C語言中文網 目錄
首頁 > Go語言教程 > Go語言反射 閱讀:3,992

Go語言反射(reflect),Golang反射(reflect)

反射是指在程序運行期對程序本身進行訪問和修改的能力。程序在編譯時,變量被轉換為內存地址,變量名不會被編譯器寫入到可執行部分。在運行程序時,程序無法獲取自身的信息。

支持反射的語言可以在程序編譯期將變量的反射信息,如字段名稱、類型信息、結構體信息等整合到可執行文件中,并給程序提供接口訪問反射信息,這樣就可以在程序運行期獲取類型的反射信息,并且有能力修改它們。

Go程序在運行期使用reflect包訪問程序的反射信息。

其它語言中的反射

C/C++ 語言沒有支持反射功能,只能通過 typeid 提供非常弱化的程序運行時類型信息。Java、C# 等語言都支持完整的反射功能。

Lua、JavaScript 類動態語言,由于其本身的語法特性就可以讓代碼在運行期訪問程序自身的值和類型信息,因此不需要反射系統。

Go 程序的反射系統無法獲取到一個可執行文件空間中或者是一個包中的所有類型信息,需要配合使用標準庫中對應的詞法、語法解析器和抽象語法樹(AST)對源碼進行掃描后獲得這些信息。
本章內容:
1. Go語言reflect.TypeOf()和reflect.Type(通過反射獲取類型信息)
2. Go語言reflect.Elem()——通過反射獲取指針指向的元素類型
3. Go語言通過反射獲取結構體的成員類型
4. Go語言結構體標簽(Struct Tag)
5. Go語言reflect.ValueOf()和reflect.Value(通過反射獲取值信息)
6. Go語言通過反射訪問結構體成員的值
7. Go語言IsNil()和IsValid()——判斷反射值的空和有效性
8. Go語言通過反射修改變量的值
9. Go語言通過類型信息創建實例
10. Go語言通過反射調用函數

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo