我有一段代码,它返回对一个片段的引用:
package main
import "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 main
import "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()函数的第一行产生分段冲突。通过命名返回值进行此操作的正确方法是什么,或者这是否是不应该使用命名返回值的情况之一?解释为什么我的解决方案会产生分割错误是非常受欢迎的。
发布于 2022-05-16 18:54:45
作为回报,parsedBucketsNames *[]V2BucketAccess1被赋予nil值。这条线
*parsedBucketsNames = []V2BucketAccess{}是相同的
var parsedBucketsNames *[]V2BucketAccess
*parsedBucketsNames = []V2BucketAccess{}在零指针上使用*会导致程序崩溃,从而导致分段冲突。不能这么早取消指针的引用。若要赋值,必须获取文字的地址。
parsedBucketsNames = &[]V2BucketAccess{}我在这里修正了你的代码https://go.dev/play/p/AU5InoPWFJW
https://stackoverflow.com/questions/72261289
复制相似问题