关于slice

我们都知道slice是在通过参数传递的时候传递的是引用

slice的appen操作是有返回值的,并不改变原值

例如 

b := []int {1,2,3,4}
c:=append(b, 5)
// b 不变

另外,在使用make方法建立slice的时候,make([]int,0,3),这里第二个参数代表len,第三个参数代表cap,第三个参数可以省略。如果省略,两个就都是0

 

闭包和go

注意闭包都是引用传递

a := [3]string {"a","b","c"}
func (){a[1] = "gg"}()
fmt.Println(a)
闭包传递的都是指针
    a := []string {"a","b","c"}
    for _,v := range a {
        func (){
            fmt.Println(v)
        }()
    }
正常是不会有什么问题的

 

s := []string{"a","b","c"}
for _,v := range s{
go func(){
fmt.Println(v)}
}()

// 这种情况下打印的都是ccc
// 如果想打印abc需要传递参数