廢話少說,直接貼代碼~
type A struct {
Name string
}
// 測試unit
func TestReflect(t *testing.T) {
reflectNew((*A)(nil))
}
//反射創建新對象。
func reflectNew(target interface{}) {
if target == nil {
fmt.Println("參數不能未空")
return
}
t := reflect.TypeOf(target)
if t.Kind() == reflect.Ptr { //指針類型獲取真正type需要調用Elem
t = t.Elem()
}
newStruc := reflect.New(t)// 調用反射創建對象
newStruc.Elem().FieldByName("Name").SetString("Lily") //設置值
newVal := newStruc.Elem().FieldByName("Name") //獲取值
fmt.Println(newVal.String())
}
補充:Go語言中創建對象的幾種方式
對于Go對象
type Car struct {
color string
size string
}
方式一:
使用T{…}方式,結果為值類型
方式二:
使用new的方式,結果為指針類型
方式三:
使用方式,結果為指針類型
以下為創建并初始化
c3 := Car{"紅色", "1.2L"}
c4 := Car{color: "紅色"}
c5 := Car{color: "紅色"}
構造函數:
在Go語言中沒有構造函數的概念,對象的創建通常交由一個全局的創建函數來完成,以 NewXXX 來命名,表示“構造函數” :
func NewCar(color,size string)*Car {
return Car{color,size}
}
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- Go語言變量創建的五種方法
- Go語言創建、初始化數組的常見方式匯總
- Go語言中的復合類型詳細介紹