这里列举一些我们学习golang时常遇见的问题,他们都是符合golang语言语法的,可以正常的编译,但是可能会出现运行结果错误,或者是由资源泄露的风险
当参数的可变参数是空接口类型时,传入空接口的切片时需要注意参数的展开的问题:
func main(){ var a = []interface{}{1,2,3} fmt.Println(a) fmt.Println(a...) }不管参数是否展开,编译器都无法发现错误,但是输出是不同的:
[1 2 3]
1 2 3
在函数调用参数中,数组是值传递,无法通过修改数组类型的参数返回结果:
func main(){ x := [3]int{1,2,3} func(arr [3]int){ arr[0] = 7 fmt.Println(arr) }(x) fmt.Println(x) }必要时需要使用切片。
map是一种散列表实现,每次遍历的顺序都可能不一样:
func main(){ m := map[string]string{ "1" : "1", "2" : "2", "3" : "3", } for k,value:=range m { println(k,v) } }在局部变量中,命名的返回值被同名的局部变量屏蔽:
func Foo()(err error){ if err : bar(); err != nill{ return } return }本章博客将会一直更新…