golang通過(guò)反射設(shè)置結(jié)構(gòu)體變量的值
如果需要?jiǎng)討B(tài)設(shè)置struct變量field的情況下, 可以利用reflect來(lái)完成。
代碼如下:
package main
import (
"fmt"
"reflect"
)
// 定義結(jié)構(gòu)體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") // 設(shè)置值
field = pp.Elem().FieldByName("Age")
field.SetInt(26)
fmt.Println(person) // 修改后 {gerrylon 26}
}
事實(shí)上對(duì)于原始值也是一樣的, 要利用指針, 因?yàn)間olang默認(rèn)都是傳值, 示例如下:
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
總結(jié):
反射傳入的應(yīng)該是變量的指針
利用 FieldByName()方法可以設(shè)置struct的指定key的值, 非常強(qiáng)大。
補(bǔ)充:golang通過(guò)反射修改變量的值
看代碼吧~
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)
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
golang 的string與[]byte轉(zhuǎn)換方式
這篇文章主要介紹了golang 的string與[]byte轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
go?zero微服務(wù)實(shí)戰(zhàn)處理每秒上萬(wàn)次的下單請(qǐng)求
這篇文章主要為大家介紹了go?zero微服務(wù)實(shí)戰(zhàn)處理每秒上萬(wàn)次的下單請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Golang基于epoll實(shí)現(xiàn)最簡(jiǎn)單網(wǎng)絡(luò)通信框架
這篇文章主要為大家詳細(xì)介紹了Golang如何基于epoll實(shí)現(xiàn)最簡(jiǎn)單網(wǎng)絡(luò)通信框架,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)2023-06-06
Golang微服務(wù)框架Kratos實(shí)現(xiàn)Kafka消息隊(duì)列的方法
消息隊(duì)列是大型分布式系統(tǒng)不可缺少的中間件,也是高并發(fā)系統(tǒng)的基石中間件,所以掌握好消息隊(duì)列MQ就變得極其重要,在本文當(dāng)中,您將了解到:什么是消息隊(duì)列?什么是Kafka?怎樣在微服務(wù)框架Kratos當(dāng)中應(yīng)用Kafka進(jìn)行業(yè)務(wù)開(kāi)發(fā),需要的朋友可以參考下2023-09-09
Go語(yǔ)言中g(shù)o?mod?vendor使用方法
go mod vendor的功能是將新增的依賴包自動(dòng)寫(xiě)入當(dāng)前項(xiàng)目的 vendor目錄,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中g(shù)o?mod?vendor使用的相關(guān)資料,需要的朋友可以參考下2022-10-10

