第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

更改通過引用傳遞的結構的值

更改通過引用傳遞的結構的值

Go
慕容森 2023-05-04 16:08:16
我想傳遞一個結構作為對函數(shù)的引用,并根據(jù)它的類型(由反射識別)進行適當?shù)霓D換并將值存儲在結構本身中。然而,雖然代碼運行,并且值在函數(shù)內部被識別和轉換,但當控件返回到函數(shù) main() 時,該結構沒有我想存儲在那里的值。這是代碼:package mainimport (    "fmt"    "reflect"    "strconv")type x struct {    f1 string    f2 int    f3 bool}func main() {    s := x{}    getData(&s.f1, "AAA")    getData(&s.f2, "1")    getData(&s.f3, "true")    fmt.Println(s)}func getData(data interface{}, value string) {    if value != "" {        switch reflect.TypeOf(data).String() {        case "*int":            data, _ = strconv.Atoi(value)        case "*bool":            data, _ = strconv.ParseBool(value)        case "*string":            data = value        }    }}在這個例子中,我在{ 0 false}期待的同時得到{ AAA 1 true}是否有任何Golang GURU可以告訴我這段代碼做錯了什么?在去游樂場的鏈接下面 https://play.golang.org/p/l1_INJLOhAq
查看完整描述

2 回答

?
慕的地6264312

TA貢獻1817條經(jīng)驗 獲得超6個贊

使用類型開關根據(jù)值的類型執(zhí)行代碼。在這種情況下不需要使用反射。

func getData(data interface{}, value string) {

? ? if value != "" {

? ? ? ? switch data := data.(type) {

? ? ? ? case *int:

? ? ? ? ? ? *data, _ = strconv.Atoi(value)

? ? ? ? case *bool:

? ? ? ? ? ? *data, _ = strconv.ParseBool(value)

? ? ? ? case *string:

? ? ? ? ? ? *data = value

? ? ? ? }

? ? }

}



查看完整回答
反對 回復 2023-05-04
?
慕后森

TA貢獻1802條經(jīng)驗 獲得超5個贊

您需要使用reflect.Value.Elem()來獲取實際值而不是指針本身。


這是一個快速要點:


func getData(data interface{}, value string) {


? ? switch v := data.(type) {

? ? case *int:

? ? ? ? val := reflect.ValueOf(v).Elem()

? ? ? ? intVal, _ := strconv.Atoi(value)

? ? ? ? val.SetInt(int64(intVal))

? ? }

}


查看完整回答
反對 回復 2023-05-04
  • 2 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號