在golang中返回一个指针

时间:2018-06-02 15:17:07

标签: pointers go

我是/include/的初学者,但我有一个问题:

我有以下代码:

go

我的问题是,package lab import ( "fmt" "math" ) type Circle struct { x float64 y float64 r float64 } func (c *Circle) area() float64 { return math.Pi * c.r * c.r } func StructCode() { c := Circle{1,2,5} fmt.Println("struct addr",c) fmt.Println("Circle",c.area()) } 需要Circle area function并返回该区域。基于此。 为什么当我打印结构时它不显示内存地址,但显示Circle Pointer而不是。它需要一个区域函数的指针,但&{1 2 5}不打印为指针(我想它会打印一个内存地址为c circle

更新

除非可能circle pointer实际上是参考?

第二次更新

我能够做到这一点:

&{1 2 5}

但我现在的问题是,为什么我可以通过c := Circle{1,2,5} p := &c fmt.Printf("%p",p) // returns 0xc042052340 代替c.area(),因为circle的区域函数需要指针:

1 个答案:

答案 0 :(得分:1)

当我们将值为接收器的指针接收器方法调用时。 Go将函数调用c.area()解释为(&c).area()。这种便利是由go本身提供的。 在Golang规范中,函数调用被描述为

  

方法调用 x.m()如果方法集(类型)x有效   包含m,参数列表可以分配给参数列表   米如果x是可寻址的并且& x的方法集包含m,则 x.m()是   (& x).m()

的简写