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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Golang 中的命名返回值返回對切片的引用

使用 Golang 中的命名返回值返回對切片的引用

Go
一只斗牛犬 2022-12-13 16:22:34
我有這段代碼,它返回對切片的引用:package mainimport "fmt"type V2BucketAccess struct {    BucketName   string    AccessPolicy string}func main() {    result := MyFunc()    fmt.Print(*result)}func MyFunc() *[]V2BucketAccess {    parsedBucketsNames := []V2BucketAccess{}    mystuff1 := V2BucketAccess{        BucketName:   "bucket-1",        AccessPolicy: "readwrite",    }    mystuff2 := V2BucketAccess{        BucketName:   "bucket-2",        AccessPolicy: "read",    }    parsedBucketsNames = append(parsedBucketsNames, mystuff1, mystuff2)    return &parsedBucketsNames}我想用命名的返回值重寫這個,我想出了這樣的事情:package mainimport "fmt"type V2BucketAccess struct {    BucketName   string    AccessPolicy string}func main() {    result := MyFunc()    fmt.Print(*result)}func MyFunc() (parsedBucketsNames *[]V2BucketAccess) {    *parsedBucketsNames = []V2BucketAccess{}    mystuff1 := V2BucketAccess{        BucketName:   "bucket-1",        AccessPolicy: "readwrite",    }    mystuff2 := V2BucketAccess{        BucketName:   "bucket-2",        AccessPolicy: "read",    }    *parsedBucketsNames = append(*parsedBucketsNames, mystuff1, mystuff2)    return}但是,這會在 MyFunc() 函數(shù)的第一行生成分段違規(guī)。通過命名返回值執(zhí)行此操作的正確方法是什么,或者這是不應(yīng)使用命名返回值的情況之一?非常歡迎解釋為什么我的解決方案會生成分段錯誤。
查看完整描述

1 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

在返回聲明中parsedBucketsNames *[]V2BucketAccess1給出了nil值。這條線

*parsedBucketsNames = []V2BucketAccess{}

是相同的

var parsedBucketsNames *[]V2BucketAccess
*parsedBucketsNames = []V2BucketAccess{}

在 nil 指針上使用*會使程序因分段沖突而崩潰。您不能這么早解除對指針的引用。要分配一個值,您必須獲得文字的地址

parsedBucketsNames = &[]V2BucketAccess{}

我在這里修復(fù)了你的代碼https://go.dev/play/p/AU5InoPWFJW


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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