這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
session("user")是在另一個版面設定的,儲存了一個models.User類型的struct
var user models.User
u := this.GetSession("user") 獲得session user,這裡u是一個interface
user = u.(models.User) 類型斷言,我斷言這個U的類型就是models.User類型的,然後我把他賦值給另一個models.User類型的變數
fmt.Println(user.Id) 這裡我就可以訪問session user的值了
u := this.GetSession("user") //取得一個interface
v := reflect.ValueOf(u)//反射得到這個變數的類型
fmt.Println(v.Field(0).Int())//取儲存在第0格的值
fmt.Println(v.Elem().Field(1).String())//取儲存在第1格的值
t := reflect.TypeOf(u)//得到這個變數的類型
fmt.Println(t)
var acc models.Account
acc.Username = "hello"
val := reflect.ValueOf(acc).FieldByName("Username") //請取反射中的Username欄位
var acc models.Account
acc.Username = "hello"
p := reflect.ValueOf(&acc.Username) //反射取值
v := p.Elem() //反射對象 p並不是可定址的,但是並不希望設定p,(實際上)是 *p。為了獲得 p 指向的內容,調用值上的 Elem 方法,從指標間接指向,然後儲存反射值的結果叫做 v
v.SetString("worldv.SetString("world")//反射給對象賦值
fmt.Println(acc)
func test(a string) string {return a}func main() {a := "sssssss"args := []reflect.Value{reflect.ValueOf(a)}//獲得一個[]reflect.Valuec := reflect.ValueOf(test).Call(args)//反射函數的值,並調用fmt.Println(c)}
獲得一個反射的類型
v := reflect.ValueOf(user)
fmt.Println(v.Type().String())//取得一個反射的類型