我有這段代碼,它返回對切片的引用: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
- 1 回答
- 0 關(guān)注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消