最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang通過(guò)反射設(shè)置結(jié)構(gòu)體變量的值

 更新時(shí)間:2021年04月25日 08:50:46   作者:butterfly5211314  
這篇文章主要介紹了golang通過(guò)反射設(shè)置結(jié)構(gòu)體變量的值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

如果需要?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)換方式

    這篇文章主要介紹了golang 的string與[]byte轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go語(yǔ)言二維數(shù)組的傳參方式

    Go語(yǔ)言二維數(shù)組的傳參方式

    這篇文章主要介紹了Go語(yǔ)言二維數(shù)組的傳參方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Golang?websocket協(xié)議使用淺析

    Golang?websocket協(xié)議使用淺析

    這篇文章主要介紹了Golang?websocket協(xié)議的使用,WebSocket是一種新型的網(wǎng)絡(luò)通信協(xié)議,可以在Web應(yīng)用程序中實(shí)現(xiàn)雙向通信,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • go?zero微服務(wù)實(shí)戰(zhàn)處理每秒上萬(wàn)次的下單請(qǐng)求

    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
  • Go設(shè)計(jì)模式之享元模式講解和代碼示例

    Go設(shè)計(jì)模式之享元模式講解和代碼示例

    享元是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許你在消耗少量?jī)?nèi)存的情況下支持大量對(duì)象,模式通過(guò)共享多個(gè)對(duì)象的部分狀態(tài)來(lái)實(shí)現(xiàn)上述功能,換句話來(lái)說(shuō),享元會(huì)將不同對(duì)象的相同數(shù)據(jù)進(jìn)行緩存以節(jié)省內(nèi)存,本文就將通過(guò)代碼示例給大家詳細(xì)介紹一下享元模式
    2023-06-06
  • Golang遞歸獲取目錄下所有文件方法實(shí)例

    Golang遞歸獲取目錄下所有文件方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Golang遞歸獲取目錄下所有文件的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Golang基于epoll實(shí)現(xiàn)最簡(jiǎn)單網(wǎng)絡(luò)通信框架

    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ì)列的方法

    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-cache的基本使用場(chǎng)景示例解析

    go-cache的基本使用場(chǎng)景示例解析

    這篇文章主要為大家介紹了go-cache的基本使用場(chǎng)景示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go語(yǔ)言中g(shù)o?mod?vendor使用方法

    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

最新評(píng)論

德州市| 五指山市| 海安县| 黑河市| 旺苍县| 会理县| 曲水县| 陈巴尔虎旗| 通州市| 江山市| 石阡县| 桐城市| 祁门县| 安平县| 桃园县| 广西| 余姚市| 本溪市| 资阳市| 罗甸县| 平邑县| 客服| 新丰县| 竹山县| 开江县| 新闻| 余姚市| 新兴县| 阳曲县| 无棣县| 揭东县| 博客| 朝阳市| 上犹县| 花莲市| 梓潼县| 剑川县| 政和县| 阳谷县| 莆田市| 宁远县|