golang 如何通過反射創(chuàng)建新對(duì)象
廢話少說,直接貼代碼~
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 { //指針類型獲取真正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語言中創(chuàng)建對(duì)象的幾種方式
對(duì)于Go對(duì)象
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ù)的概念,對(duì)象的創(chuàng)建通常交由一個(gè)全局的創(chuàng)建函數(shù)來完成,以 NewXXX 來命名,表示“構(gòu)造函數(shù)” :
func NewCar(color,size string)*Car { return &Car{color,size} }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析
這篇文章主要為大家介紹了go slice 擴(kuò)容實(shí)現(xiàn)原理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01golang websocket 服務(wù)端的實(shí)現(xiàn)
這篇文章主要介紹了golang websocket 服務(wù)端的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09golang?gin框架實(shí)現(xiàn)大文件的流式上傳功能
這篇文章主要介紹了golang?gin框架中實(shí)現(xiàn)大文件的流式上傳,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-0715個(gè)Golang中時(shí)間處理的實(shí)用函數(shù)
在Go編程中,處理日期和時(shí)間是一項(xiàng)常見任務(wù),涉及到精確性和靈活性,本文將介紹一系列實(shí)用函數(shù),它們充當(dāng)time包的包裝器,需要的可以參考下2024-01-01Go語言實(shí)現(xiàn)UDP版聊天小工具的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Go語言實(shí)現(xiàn)聊天小工具(UDP版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03go實(shí)現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例
本文主要介紹了go實(shí)現(xiàn)服務(wù)優(yōu)雅關(guān)閉的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Go結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁中的圖像鏈接
這篇文章主要為大家詳細(xì)介紹了Go語言如何結(jié)合JavaScript實(shí)現(xiàn)抓取網(wǎng)頁中的圖像鏈接,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11