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

