go-指针类型,别怕,这不是C

提到指针,我们可能想到引用,go里面的引用类型包括指针、slice、map、chan等,什么是引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在 堆上分配,通过GC回收。什么是值类型,值类型:变量直接存储值,内存通常在栈中分配。
来一段代码

package main
import "fmt"
func test() {
    s1 := new([]int)
    fmt.Println(s1)
    s2 := make([]int, 10)
    fmt.Println(s2)
    *s1 = make([]int, 5)
    (*s1)[0] = 100
    s2[0] = 100
    fmt.Println(s1)
    return
}
func main() {
    test()
}

可以看到s1的0元素改变,s2[0]也改变,因为s2是slice类型,而s1是指针类型。

指针

我们先来打印一段代码

name:="longmore"
fmt.Print(&name)
fmt.Print(*&name)

这样会输出0xc42000e1d0 一段内存地址,第二个会输出真实的值,所以说*符号好比起到了取值的作用,& 好比取地址 ,上面两者 好比互为反操作。

```
var names *string

top Created with Sketch.