Saya perlu membuat StructField, di mana saya harus memberikan nilai reflect.Type untuk bidang Type. Saya ingin meneruskan tipe lain seperti reflect.Bool, reflect.Int ke fungsi yang akan digunakan dalam pembangunan StructField. Saya tidak dapat melakukan ini dengan kode di bawah ini

reflect.StructField{
            Name: strings.Title(v.Name),
            Type: reflect.Type(reflect.String),
            Tag:  reflect.StructTag(fmt.Sprintf(`xml:"%v,attr"`, v.Name)),
        }

Karena itu

Cannot convert an expression of the type 'Kind' to the type 'Type'
-1
Intolighter 27 Mei 2021, 15:40

1 menjawab

Jawaban Terbaik

reflect.Type adalah tipe, dan ekspresinya

reflect.Type(reflect.String)

Akan menjadi jenis konversi. Jenis reflect.String adalah reflect.Kind yang tidak mengimplementasikan antarmuka ketik reflect.Type, jadi konversi tidak valid.

Nilai reflect.Type yang mewakili string adalah:

reflect.TypeOf("")

Umumnya deskriptor reflect.Type jenis (non-antarmuka) apa pun dapat diperoleh menggunakan reflect.TypeOf() berfungsi jika Anda memiliki nilai:

var x int64
t := reflect.TypeOf(x) // Type descriptor of the type int64

Itu juga mungkin jika Anda tidak memiliki nilai. Mulai dari nilai pointer nil yang diketik, dan panggil Type.Elem() untuk mendapatkan tipe runcing:

t := reflect.TypeOf((*int64)(nil)).Elem()      // Type descriptor of type int64

t2 := reflect.TypeOf((*io.Reader)(nil)).Elem() // Type descriptor of io.Reader
4
icza 27 Mei 2021, 13:18