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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當 *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 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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