a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Golang > 正文

Go語言中反射的正確使用

2020-04-01 19:07:52
字體:
供稿:網(wǎng)友

介紹

反射是元數(shù)據(jù)編程的一種形式,指的是程序獲得本身結(jié)構(gòu)的一種能力。不同語言的反射模型實(shí)現(xiàn)不一樣,本文中的反射,僅僅指的是Go語言中的反射模型。

反射有兩個問題,在使用前需要三思:

  1. 大量的使用反射會損失一定性能
  2. Clear is better than clever. Reflection is never clear.

Go的類型設(shè)計上有一些基本原則,理解這些基本原則會有助于你理解反射的本質(zhì):

  1. 變量包括 <type, value> 兩部分。理解這一點(diǎn)你就知道為什么nil != nil了。
  2. type包括 static typeconcrete type. 簡單來說 static type是你在編碼是看見的類型,concrete type是runtime系統(tǒng)看見的類型。
  3. 類型斷言能否成功,取決于變量的concrete type,而不是static type. 因此,一個 reader變量如果它的concrete type也實(shí)現(xiàn)了write方法的話,它也可以被類型斷言為writer.
  4. Go中的反射依靠interface{}作為橋梁,因此遵循原則3. 例如,反射包.Kind方法返回的是concrete type, 而不是static type.

多說無用,下面來看示例代碼

 

復(fù)制代碼 代碼如下:

package main
 
import (
    "fmt"
    "reflect"
)
 
type T struct {
    A int
    B string
}
 
func main() {
    t := T{23, "skidoo"}
    tt := reflect.TypeOf(t)
    fmt.Printf("t type:%v/n", tt)
    ttp := reflect.TypeOf(&t)
    fmt.Printf("t type:%v/n", ttp)
    // 要設(shè)置t的值,需要傳入t的地址,而不是t的拷貝。
    // reflect.ValueOf(&t)只是一個地址的值,不是settable, 通過.Elem()解引用獲取t本身的reflect.Value
    s := reflect.ValueOf(&t).Elem()
    typeOfT := s.Type()
    for i := 0; i < s.NumField(); i++ {
        f := s.Field(i)
        fmt.Printf("%d: %s %s = %v/n", i,
            typeOfT.Field(i).Name, f.Type(), f.Interface())
    }
}
 
// 輸出結(jié)果
// t type:main.T
// t type:*main.T
// 0: A int = 23
// 1: B string = skidoo

 

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 午夜天| 日韩电影免费在线观看中文字幕 | 日韩视频精品 | 自拍偷拍视频网 | 精品国产一区二区在线 | 一区二区三区亚洲 | 久久99国产精品久久99大师 | 成人在线精品视频 | 国产99999| 色婷婷香蕉在线一区二区 | 国产综合亚洲精品一区二 | 成人av国产 | 欧美日韩在线视频一区二区 | 久久99爱视频 | 波多野结衣一区二 | 一级特黄色大片 | 国产视频一区二区在线观看 | 日本一区二区三区视频在线 | 国产91亚洲精品 | 男人桶女人鸡鸡 | 久久免费精品 | 香蕉91| 成年人在线观看视频 | 91久久综合亚洲鲁鲁五月天 | 国产免费网址 | 亚洲成人综合在线 | 欧美淫视频 | 国产精品久久久久久久久久妇女 | 国产一区二区三区精品久久久 | 欧美日韩一区二区在线观看 | 国产一二在线 | 久久国产精品亚州精品毛片 | 伊人国产精品 | 超碰97在线免费 | 亚洲tv国产 | jizzjizz亚洲中国少妇 | 日本在线不卡视频 | 成人欧美一区二区三区在线播放 | 免费av在线网站 | 国产成人久久精品一区二区三区 | 国产精品久久久久久无遮挡 |