为了账号安全,请及时绑定邮箱和手机立即绑定

当 *string 值为 nil 时,如何将 *string 类型的值转换/分配为

当 *string 值为 nil 时,如何将 *string 类型的值转换/分配为

Go
大话西游666 2022-11-23 15:31:49
我正在尝试将 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>

""


查看完整回答
反对 回复 2022-11-23
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信