欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • Go語(yǔ)言中的sync包同步原語(yǔ)最新詳解

    Go語(yǔ)言中的sync包同步原語(yǔ)最新詳解

    Go語(yǔ)言在sync包中提供了一套多才多藝的同步機(jī)制,以及用于管理對(duì)共享資源的并發(fā)訪問(wèn)的原子操作,了解這些工具并為您的并發(fā)需求選擇合適的工具是編寫(xiě)高效可靠的并發(fā)Go程序的關(guān)鍵,這篇文章主要介紹了Go語(yǔ)言中的`sync`包同步原語(yǔ),需要的朋友可以參考下
    2023-12-12
  • Golang實(shí)現(xiàn)Directional Channel(定向通道)

    Golang實(shí)現(xiàn)Directional Channel(定向通道)

    這篇文章主要介紹了Golang實(shí)現(xiàn)Directional Channel(定向通道),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Go 并發(fā)實(shí)現(xiàn)協(xié)程同步的多種解決方法

    Go 并發(fā)實(shí)現(xiàn)協(xié)程同步的多種解決方法

    這篇文章主要介紹了Go 并發(fā)——實(shí)現(xiàn)協(xié)程同步的多種解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Bililive-go 實(shí)現(xiàn)直播自動(dòng)監(jiān)控錄制功能

    Bililive-go 實(shí)現(xiàn)直播自動(dòng)監(jiān)控錄制功能

    最近有直播錄制的需求,但是自己手動(dòng)錄制太麻煩繁瑣,于是用了開(kāi)源項(xiàng)目Bililive-go進(jìn)行全自動(dòng)監(jiān)控錄制,對(duì)Bililive-go 直播自動(dòng)監(jiān)控錄制實(shí)現(xiàn)思路感興趣的朋友,一起看看吧
    2024-03-03
  • Go語(yǔ)言接口與多態(tài)詳細(xì)介紹

    Go語(yǔ)言接口與多態(tài)詳細(xì)介紹

    Go語(yǔ)言的接口類(lèi)型是一組方法定義的集合,它體現(xiàn)了多態(tài)性、高內(nèi)聚和低耦合的設(shè)計(jì)思想,接口通過(guò)interface關(guān)鍵字定義,無(wú)需實(shí)現(xiàn)具體方法,任何實(shí)現(xiàn)了接口所有方法的類(lèi)型即視為實(shí)現(xiàn)了該接口,感興趣的朋友一起看看吧
    2024-09-09
  • golang中實(shí)現(xiàn)graphql請(qǐng)求的方法

    golang中實(shí)現(xiàn)graphql請(qǐng)求的方法

    這篇文章主要介紹了如何在golang中實(shí)現(xiàn)graphql請(qǐng)求,在本文中,我們介紹了如何使用gqlgen來(lái)構(gòu)建GraphQL服務(wù),需要的朋友可以參考下
    2023-04-04
  • 全面解析Go語(yǔ)言中crypto/sha1庫(kù)

    全面解析Go語(yǔ)言中crypto/sha1庫(kù)

    crypto/sha1在Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中是一個(gè)強(qiáng)大且實(shí)用的工具,適用于多種應(yīng)用場(chǎng)景,本文就詳細(xì)的介紹了Go語(yǔ)言中crypto/sha1庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • golang常用庫(kù)之配置文件解析庫(kù)-viper使用詳解

    golang常用庫(kù)之配置文件解析庫(kù)-viper使用詳解

    viper 配置管理解析庫(kù),是由大神 Steve Francia 開(kāi)發(fā),他在google領(lǐng)導(dǎo)著 golang 的產(chǎn)品開(kāi)發(fā),他也是 gohugo.io 的創(chuàng)始人之一,命令行解析庫(kù) cobra 開(kāi)發(fā)者,這篇文章主要介紹了golang常用庫(kù)之配置文件解析庫(kù)-viper使用詳解,需要的朋友可以參考下
    2020-10-10
  • Go語(yǔ)言中使用flag包對(duì)命令行進(jìn)行參數(shù)解析的方法

    Go語(yǔ)言中使用flag包對(duì)命令行進(jìn)行參數(shù)解析的方法

    這篇文章主要介紹了Go語(yǔ)言中使用flag包對(duì)命令行進(jìn)行參數(shù)解析的方法,文中舉了一個(gè)實(shí)現(xiàn)flag.Value接口來(lái)自定義flag的例子,需要的朋友可以參考下
    2016-04-04
  • 利用Go語(yǔ)言追加內(nèi)容到文件末尾

    利用Go語(yǔ)言追加內(nèi)容到文件末尾

    關(guān)于Go語(yǔ)言讀寫(xiě)文件,網(wǎng)上很多教程了,但是今天有個(gè)需求,想要把內(nèi)容追加寫(xiě)到文件末尾,在網(wǎng)上找了很久才找到答案,現(xiàn)在分享給大家,有需要的可以參考借鑒。
    2016-09-09

最新評(píng)論