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