如何在 Go 中获取指向结构内字段的真实指针?

我有一个结构,说:


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 方法获取指向结构中字段的真实指针,而不直接在结构中使用指针字段?


白衣非少年
浏览 114回答 1
1回答

猛跑小猪

问题是您已经Get使用结构接收器定义了该方法,而不是在指针上。这意味着当您返回时,您将&s.data获得接收者字段的地址,而不是来自原始结构。您可以通过使用指针接收器简单地解决此问题:func (s *sample) Get() *[]float64{    return &s.data}这是一个完整的可运行示例(https://play.golang.org/p/AIj8QOYfx85)package mainimport "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())}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go