1. 程式人生 > >golang 碎片整理 之 指針

golang 碎片整理 之 指針

fmt 一個 區別 錯誤 碎片 運算 不用 解析 %d

golang中保留了C中的值和指針的區別,但對於指針的繁瑣用法進行了簡化,引入了"引用"的概念,所以在go語言中,你不用擔心因為直接操作內存而引起各式各樣的錯誤。
運算符只有 & 和 ,一個是取地址一個是取值(解析地址)。

func main(){
    var i int
    i = 1
    var p *int
    p = &i
    fmt.Printf("i=%d,p=%d,*p=%d\n",i,p,*p)
    *p =2
    fmt.Printf("i=%d,p=%d,*p=%d\n",i,p,*p)
    i = 3
    fmt.Printf("i=%d,p=%d,*p=%d\n",i,p,*p)
}

output:
i=1,p=824634302464,p=1
i=2,p=824634302464,
p=2
i=3,p=824634302464,*p=3

type abc struct{
    v int
}
func (a abc)aaa(){
    a.v = 1
    fmt.Printf("1:%d\n",a.v)
}
func (a *abc)bbb(){
    fmt.Printf("2:%d\n",a.v)
    a.v = 2
    fmt.Printf("3:%d\n",a.v)
}
func (a *abc)ccc(){
    fmt.Printf("4:%d\n",a.v)
}
func main(){
    aobj:=abc{}
    aobj.aaa()
    aobj.bbb()
    aobj.ccc()
}

output:
1:1
2:0
3:2
4:2

golang 碎片整理 之 指針