亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決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() 函數的第一行生成分段違規。通過命名返回值執行此操作的正確方法是什么,或者這是不應使用命名返回值的情況之一?非常歡迎解釋為什么我的解決方案會生成分段錯誤。
查看完整描述

1 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

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

*parsedBucketsNames = []V2BucketAccess{}

是相同的

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

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

parsedBucketsNames = &[]V2BucketAccess{}

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


查看完整回答
反對 回復 2022-12-13
  • 1 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號