第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 Go 中獲取指向結(jié)構(gòu)內(nèi)字段的真實(shí)指針?

如何在 Go 中獲取指向結(jié)構(gòu)內(nèi)字段的真實(shí)指針?

Go
白衣非少年 2022-06-13 17:19:15
我有一個(gè)結(jié)構(gòu),說(shuō):type sample struct{   data []float64}現(xiàn)在,我聲明一個(gè)方法:func (s sample) Get() *[]float64{return &s.data}我試圖通過(guò)我通過(guò) Get() 獲得的指針附加到這個(gè)切片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}}我對(duì)為什么會(huì)發(fā)生這種情況有一個(gè)大致的了解:函數(shù) Get 正在返回其本地范圍的地址,我通過(guò)將結(jié)構(gòu)本身更改為來(lái)修復(fù)它type sample struct{data *[]float64}代碼返回預(yù)期的&{1,2,3,4}現(xiàn)在,對(duì)于我的問(wèn)題:無(wú)論如何,是否可以通過(guò) getter 方法獲取指向結(jié)構(gòu)中字段的真實(shí)指針,而不直接在結(jié)構(gòu)中使用指針字段?
查看完整描述

1 回答

?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

問(wèn)題是您已經(jīng)Get使用結(jié)構(gòu)接收器定義了該方法,而不是在指針上。這意味著當(dāng)您返回時(shí),您將&s.data獲得接收者字段的地址,而不是來(lái)自原始結(jié)構(gòu)。您可以通過(guò)使用指針接收器簡(jiǎn)單地解決此問(wèn)題:


func (s *sample) Get() *[]float64{

    return &s.data

}

這是一個(gè)完整的可運(yùn)行示例(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())

}


查看完整回答
反對(duì) 回復(fù) 2022-06-13
  • 1 回答
  • 0 關(guān)注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)