我正在尝试将 type 的值分配给 type*string的变量*wrapperspb.StringValue。但是,当*string为 nil 时,它会触发错误(请查看截取代码中的注释以了解是何种错误)。这是我的代码的简化版本:// You can edit this code!// Click here and start typing.package mainimport ( "fmt" "google.golang.org/protobuf/types/known/wrapperspb")func main() { var var1 *wrapperspb.StringValue var1 = &wrapperspb.StringValue{Value: "test1"} fmt.Println("var1:") fmt.Println(var1) var var2 *string fmt.Println("var2:") fmt.Println(var2) //var1 = var2 // it says "Cannot use 'var2' (type *string) as the type *wrapperspb.StringValue" //var1 = wrapperspb.String(*var2) // it says panic: runtime error: invalid memory address or nil pointer dereference //fmt.Println("var1 with var2 value:") //fmt.Println(var1)}有谁知道如何正确处理转换/分配?这是一个 golang 游乐场:https ://go.dev/play/p/5JBfU0oEIC-
1 回答
不负相思意
TA贡献1777条经验 获得超10个赞
如果您的var2字符串指针是nil,您也应该保留var1 *wrapperspb.StringValue指针nil。wrapperspb.StringValue如果本身是nil指针,则句柄的方法。所以像这样“转换”它:
if var2 == nil {
var1 = nil
} else {
var1 = wrapperspb.String(*var2)
}
测试它:
for i := 0; i < 2; i++ {
var var1 *wrapperspb.StringValue
var var2 *string
if i == 0 {
s := "test"
var2 = &s
}
if var2 == nil {
var1 = nil
} else {
var1 = wrapperspb.String(*var2)
}
fmt.Printf("var2: %v\n", var2)
fmt.Printf("var1: %v\n", var1)
fmt.Printf("%q\n", var1.GetValue())
}
这将输出(在Go Playground上尝试):
var2: 0xc00009e470
var1: value:"test"
"test"
var2: <nil>
var1: <nil>
""
- 1 回答
- 0 关注
- 120 浏览
添加回答
举报
0/150
提交
取消