golang通過反射設置結構體變量的值
更新時間:2021年04月25日 08:50:46 作者:butterfly5211314
這篇文章主要介紹了golang通過反射設置結構體變量的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
如果需要動態(tài)設置struct變量field的情況下, 可以利用reflect來完成。
代碼如下:
package main import ( "fmt" "reflect" ) // 定義結構體Person type Person struct { Name string Age int } func main() { person := Person{} fmt.Println(person) // 修改前 { 0} pp := reflect.ValueOf(&person) // 取得struct變量的指針 field := pp.Elem().FieldByName("Name") //獲取指定Field field.SetString("gerrylon") // 設置值 field = pp.Elem().FieldByName("Age") field.SetInt(26) fmt.Println(person) // 修改后 {gerrylon 26} }
事實上對于原始值也是一樣的, 要利用指針, 因為golang默認都是傳值, 示例如下:
var f float64 = 3.4 fmt.Println(f) // 3.4 p := reflect.ValueOf(&f) // 注意這里一定要是指針, 否則傳遞給ValueOf的是f的拷貝 v := p.Elem() v.SetFloat(3.5) fmt.Println(f) // 3.5
總結:
反射傳入的應該是變量的指針
利用 FieldByName()方法可以設置struct的指定key的值, 非常強大。
補充:golang通過反射修改變量的值
看代碼吧~
package main import ( "fmt" "reflect" ) func reflectTest(str interface{}) { fs := reflect.ValueOf(str) fs.Elem().SetString("jack") fmt.Printf("%v\n" ,fs.Elem()) } func main(){ var str string = "tom" reflectTest(&str) fmt.Println(str) }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
Golang實現(xiàn)Directional Channel(定向通道)
這篇文章主要介紹了Golang實現(xiàn)Directional Channel(定向通道),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02Go 并發(fā)實現(xiàn)協(xié)程同步的多種解決方法
這篇文章主要介紹了Go 并發(fā)——實現(xiàn)協(xié)程同步的多種解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08Bililive-go 實現(xiàn)直播自動監(jiān)控錄制功能
最近有直播錄制的需求,但是自己手動錄制太麻煩繁瑣,于是用了開源項目Bililive-go進行全自動監(jiān)控錄制,對Bililive-go 直播自動監(jiān)控錄制實現(xiàn)思路感興趣的朋友,一起看看吧2024-03-03Go語言中使用flag包對命令行進行參數(shù)解析的方法
這篇文章主要介紹了Go語言中使用flag包對命令行進行參數(shù)解析的方法,文中舉了一個實現(xiàn)flag.Value接口來自定義flag的例子,需要的朋友可以參考下2016-04-04