1 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
因?yàn)閒mt.Print家庭使用reflect,并reflect授予訪問未導(dǎo)出字段的權(quán)力,因此reflect.Value.Field. 請(qǐng)注意,未導(dǎo)出的字段只能以這種方式讀取,而不能寫入。
一些代碼:
package main
import (
"fmt"
"reflect"
)
type A struct {
A int
b int
}
func main() {
fmt.Println("Hello, playground")
a := A{1, 2}
va := reflect.ValueOf(&a).Elem()
exported := va.Field(0)
unexported, unexportedName := va.Field(1), va.Type().Field(1)
fmt.Println(unexportedName, unexported)
// exported settable but unexported not settable
fmt.Println(exported.CanSet(), unexported.CanSet())
exported.Set(reflect.ValueOf(int(3)))
fmt.Println(a)
// this will panic
unexported.Set(reflect.ValueOf(int(5)))
fmt.Println(a)
}
游樂場(chǎng):https://play.golang.org/p/6mhFR7efPEc
- 1 回答
- 0 關(guān)注
- 138 瀏覽
添加回答
舉報(bào)