2015-06-27 5 views
0

Я написал простые коды для проверки println и fmt.Println, но когда я запустил код, он печатал разные результаты почти каждый раз. Я попытался разделить разницу между println и fmt.Println, но ничего не получил. Есть ли кто-нибудь, кто знает реальную разницу или приоритет или последовательность этих двух функций?нужна помощь во время tesing println и fmt.println of golang

Вот код:

package main 
import (
    "fmt" 
) 

func main(){ 
    println("a") 
    fmt.Println("b") 
    println("c") 
    fmt.Println("d") 

    p() 
} 

func p(){ 
    println("e") 
    fmt.Println("f") 
    println("g") 
    fmt.Println("h") 
} 

Спасибо!

+4

Почему вы заинтересованы в использовании 'Println()'? Это не формальная часть спецификации языка и может исчезнуть в будущем. См.: Http://golang.org/ref/spec#Bootstrapping – Grokify

+0

Почему точка с запятой после 'println (" a ")' – koljanep

+0

@koljanep: точка с запятой не имеет отношения к вопросу: [Точки с запятой] (http: /golang.org/ref/spec#Semicolons). – peterSO

ответ

3

Builtin functions

func println

func println(args ...Type) 

Println встроенные функции форматирует свои аргументы в реализации- специфическим образом и записывает результат в стандартный поток ошибок. Пространства всегда добавляются между аргументами и добавляется новая строка. Println полезен для начальной загрузки и отладки; это не гарантированно останется на этом языке.

Package fmt

func Println

func Println(a ...interface{}) (n int, err error)

Println форматы, используя форматы по умолчанию для своих операндов и записывает на стандартный вывод. Между операндами всегда добавляются промежутки, и добавляется строка . Он возвращает количество записанных байтов и обнаружена ошибка записи .

fmt.Println()stdout; println() использует stderr.

Как и ожидалось, две разные функции с разными целями дают разные результаты.

+4

Чтобы добавить к этому цвет, стандартная ошибка и стандартный выход представляют собой два разных потока вывода. Нет гарантии относительно того, как они отображаются на вашем терминале. Если вы добавите fmt.Println в fmt.Fprintln (os.StdErr, «b»), тогда они будут взаимодействовать, как вы ожидаете. –

+0

Этот комментарий является важной частью ответа. – inf

2

Лучшая практика: использовать только fmt.Println("My text...")

Не используйте println("My text...")