GO常见的坑(一)

215 阅读1分钟

数组是值传递

在函数调用参数中,数组是值传递,无法通过修改数组类型的参数返回结果

func main() {
    x := [3]int{1, 2, 3}
    
    func(arr [3]int) {
        arr[0] = 7
        fmt.Println(arr)
    }(x)

    fmt.Println(x)
}

结果

[7,2,3]
[1,2,3]

map遍历是顺序不固定

map是一种hash表实现,每次遍历的顺序都可能不一样

func main() {
    m := map[string]string{
        "1": "1",
        "2": "2",
        "3": "3",
    }

    for i := 0; i < 3; i++{
    	for k, v := range m {
    		print("\t\t",k,"\t", v)
    	}
    	println()
    }
	
}

结果

返回值被屏蔽

在局部作用域中,命名的返回值被同名的局部变量屏蔽

1 func Foo() (err error) {
2    if err := Bar(); err != nil {
3        return
4    }
5    return
6 }

调用Foo(),编译报错

err is shadowed during return(返回时err被隐藏)