我有一个结构,说:type sample struct{ data []float64}现在,我声明一个方法:func (s sample) Get() *[]float64{return &s.data}我试图通过我通过 Get() 获得的指针附加到这个切片func main(){example := sample{[]float64{1,2,3}}//Here I will append:pointerToArray := example.Get()*pointerToArray = append(*pointerToArray, 4)fmt.Println(example.Get()) // still shows only &{1,2,3}}我对为什么会发生这种情况有一个大致的了解:函数 Get 正在返回其本地范围的地址,我通过将结构本身更改为来修复它type sample struct{data *[]float64}代码返回预期的&{1,2,3,4}现在,对于我的问题:无论如何,是否可以通过 getter 方法获取指向结构中字段的真实指针,而不直接在结构中使用指针字段?
1 回答

猛跑小猪
TA贡献1858条经验 获得超8个赞
问题是您已经Get使用结构接收器定义了该方法,而不是在指针上。这意味着当您返回时,您将&s.data获得接收者字段的地址,而不是来自原始结构。您可以通过使用指针接收器简单地解决此问题:
func (s *sample) Get() *[]float64{
return &s.data
}
这是一个完整的可运行示例(https://play.golang.org/p/AIj8QOYfx85)
package main
import "fmt"
type sample struct {
data []float64
}
func (s *sample) Get() *[]float64 {
return &s.data
}
func main() {
example := sample{[]float64{1, 2, 3}}
p := example.Get()
*p = append(*p, 4)
fmt.Println(example.Get())
}
- 1 回答
- 0 关注
- 112 浏览
添加回答
举报
0/150
提交
取消