golang 如何通過(guò)反射創(chuàng)建新對(duì)象
廢話(huà)少說(shuō),直接貼代碼~
type A struct {
Name string
}
// 測(cè)試unit
func TestReflect(t *testing.T) {
reflectNew((*A)(nil))
}
//反射創(chuàng)建新對(duì)象。
func reflectNew(target interface{}) {
if target == nil {
fmt.Println("參數(shù)不能未空")
return
}
t := reflect.TypeOf(target)
if t.Kind() == reflect.Ptr { //指針類(lèi)型獲取真正type需要調(diào)用Elem
t = t.Elem()
}
newStruc := reflect.New(t)// 調(diào)用反射創(chuàng)建對(duì)象
newStruc.Elem().FieldByName("Name").SetString("Lily") //設(shè)置值
newVal := newStruc.Elem().FieldByName("Name") //獲取值
fmt.Println(newVal.String())
}
補(bǔ)充:Go語(yǔ)言中創(chuàng)建對(duì)象的幾種方式
對(duì)于Go對(duì)象
type Car struct {
color string
size string
}
方式一:
使用T{…}方式,結(jié)果為值類(lèi)型
c := Car{}
方式二:
使用new的方式,結(jié)果為指針類(lèi)型
c1 := new(Car)
方式三:
使用&方式,結(jié)果為指針類(lèi)型
c2 := &Car{}
以下為創(chuàng)建并初始化
c3 := &Car{"紅色", "1.2L"}
c4 := &Car{color: "紅色"}
c5 := Car{color: "紅色"}
構(gòu)造函數(shù):
在Go語(yǔ)言中沒(méi)有構(gòu)造函數(shù)的概念,對(duì)象的創(chuàng)建通常交由一個(gè)全局的創(chuàng)建函數(shù)來(lái)完成,以 NewXXX 來(lái)命名,表示“構(gòu)造函數(shù)” :
func NewCar(color,size string)*Car {
return &Car{color,size}
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
并發(fā)安全本地化存儲(chǔ)go-cache讀寫(xiě)鎖實(shí)現(xiàn)多協(xié)程并發(fā)訪(fǎng)問(wèn)
這篇文章主要介紹了并發(fā)安全本地化存儲(chǔ)go-cache讀寫(xiě)鎖實(shí)現(xiàn)多協(xié)程并發(fā)訪(fǎng)問(wèn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)
本文主要介紹了golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
gorm FirstOrCreate和受影響的行數(shù)實(shí)例
這篇文章主要介紹了gorm FirstOrCreate和受影響的行數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Go空結(jié)構(gòu)體struct{}的作用是什么
本文主要介紹了Go空結(jié)構(gòu)體struct{}的作用是什么,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Go語(yǔ)言繼承功能使用結(jié)構(gòu)體實(shí)現(xiàn)代碼重用
今天我來(lái)給大家介紹一下在?Go?語(yǔ)言中如何實(shí)現(xiàn)類(lèi)似于繼承的功能,讓我們的代碼更加簡(jiǎn)潔和可重用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
Golang開(kāi)發(fā)命令行之flag包的使用方法
這篇文章主要介紹Golang開(kāi)發(fā)命令行及flag包的使用方法,日常命令行操作,相對(duì)應(yīng)的眾多命令行工具是提高生產(chǎn)力的必備工具,本文圍繞該內(nèi)容展開(kāi)話(huà)題,需要的朋友可以參考一下2021-10-10

