亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Println 如何訪問未導出的字段

Println 如何訪問未導出的字段

Go
暮色呼如 2023-08-07 11:15:43
package testimport (    "fmt")type DP struct {    array []int    cols  int}func (v *DP) Init(rs, cs int) {    v.array = make([]int, rs*cs, rs*cs)    v.cols = cs}func (v *DP) Get(r, c int) int {    return v.array[r*v.cols+c]}package mainimport (    "fmt"    "test")func main() {    var k, x, n int    var dp test.DP    fmt.Scanf("%d %d %d", &n, &k, &x)    dp.Init(n, k)    fmt.Println(dp) // print the contents of dp.array    fmt.Printf("%d %d %d", n, k, x)}Println 如何訪問所有未導出的字段。為什么它沒有給出像 dp.array undefined 這樣的錯誤(無法引用未導出的字段或方法數組)
查看完整描述

1 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

因為fmt.Print家庭使用reflect,并reflect授予訪問未導出字段的權力,因此reflect.Value.Field. 請注意,未導出的字段只能以這種方式讀取,而不能寫入。


一些代碼:


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)

}

游樂場:https://play.golang.org/p/6mhFR7efPEc


查看完整回答
反對 回復 2023-08-07
  • 1 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號