初学Go语言,会不会有如下疑问?
// test.go
package main
import (
"fmt"
"unsafe"
)
const (
Unknown = "abc_const"
Female = len(Unknown)
Male = unsafe.Sizeof(Female)
)
// const (
// a = iota
// b
// c
// )
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
func main() {
const LENGTH int = 10
const WIDTH int = 5
var area int
// const a, b, c = 1, false, "str" //多重赋值
area = LENGTH * WIDTH
fmt.Printf("面积为 : %d\n", area)
println()
println(Unknown, Female, Male)
fmt.Println(a, b, c, d, e, f, g, h, i)
}
输出:
面积为 : 50
0 1 2 ha ha 100 100 7 8
abc_const 9 8
此处为什么先fmt.Print函数簇执行,后println执行?
println vs fmt.println
//println: The println built-in function formats its arguments in an //implementation-specific way and writes the result to standard error.
//Spaces are always added between arguments and a newline is appended.
//println is useful for bootstrapping and debugging;
//it is not guaranteed to stay in the language.
//fmt.Println: Println formats using the default formats for
//its operands and writes to standard output.
//Spaces are always added between operands and a newline is appended.
//It returns the number of bytes written and any write error encountered.
println是用于打印标准输出,fmt.Println 是用于打印标准输出。
两个不同的描述符,把两个流都输出到终端,输出的先后顺序不确定。
解决办法:可以把流分开输出, 各看各的就没问题了
go run test.go 1>std_out.log 2>std_err.log
cat std_err.log
abc_const 9 8
cat std_out.log
面积为 : 50
0 1 2 ha ha 100 100 7 8