久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Go 語言中的反射

反射是在 java 出現后迅速流行起來的一種概念,通過反射可以獲取豐富的類型信息,并可以利用這些類型信息做非常靈活的工作。大多數現代的高級語言都以各種形式支持反射功能,反射是把雙刃劍,功能強大但代碼可讀性并不理想,若非必要并不推薦使用反射。本文就來介紹一下反射在 Go 語言中的基本使用方法

 

1. 通過反射獲取類型

在 Go 語言中提供反射的包為?reflect 包,其中reflect.Type()函數可以獲取一個變量的類型。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? "fmt"
  • 5? ? ? ? ? "reflect"
  • 6? )
  • 7
  • 8? func main() {
  • 9? ? ? ? ? test := 10
  • 10? ? ? ? typeOfTest := reflect.TypeOf(test)
  • 11? ? ? ? fmt.Println("變量test的類型:", typeOfTest)
  • 12? }
  • 第 9 行:定義一個值為10的變量;
  • 第 10 行:通過反射獲取變量的類型。

執行結果:

圖片描述

 

2. 通過反射獲取值

其中?reflect.ValueOf()?函數可以獲取一個變量的值。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? "fmt"
  • 5? ? ? ? ? "reflect"
  • 6? )
  • 7
  • 8? func main() {
  • 9? ? ? ? ? test := 10
  • 10? ? ? ? ValueOfTest := reflect.ValueOf(test)
  • 11? ? ? ? fmt.Println("變量test的值:", ValueOfTest)
  • 12? }
  • 第 9 行:定義一個值為 10 的變量;
  • 第 10 行:通過反射獲取變量的值。

執行結果:

圖片描述

 

3. 通過反射修改變量值

上文中我們了解了兩個反射中常用的函數,接下來,我們來學習下如何使用反射來進行一些靈活的操作,比如修改變量的值。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? ? "fmt"
  • 5? ? ? ? ? "reflect"
  • 6? )
  • 7
  • 8? func main() {
  • 9? ? ? ? ? test := 10
  • 10? ? ? ? //獲取test變量的地址
  • 11? ? ? ? ValueOfTestAddr := reflect.ValueOf(&test)
  • 12? ? ? ? //獲取地址存放的值
  • 13? ? ? ? ValueOfTest := ValueOfTestAddr.Elem()
  • 14? ? ? ? //修改這個值
  • 15? ? ? ? ValueOfTest.SetInt(100)
  • 16? ? ? ? fmt.Println("變量test的值:", test)
  • 17? }

執行結果:

圖片描述

使用上述操作,我們就可以在一些情況下操作其它包中的私有變量,這種操作是十分危險的,所以如非必要盡量不要使用。

 

4. 小結

本文主要是簡單的介紹了以下 Go 語言中的反射的用法。雖然反射的功能強大,但是由于使用的風險比較高,而且對程序的設計會有破壞,所以建議非必要盡量就不要使用了。反射是在 java 出現后迅速流行起來的一種概念,通過反射可以獲取豐富的類型信息,并可以利用這些類型信息做非常靈活的工作。大多數現代的高級語言都以各種形式支持反射功能,反射是把雙刃劍,功能強大但代碼可讀性并不理想,若非必要并不推薦使用反射。

文章來源于網絡,侵刪!

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

  • <menu id="dlktz"></menu>
    <ul id="dlktz"></ul>
    <menu id="dlktz"></menu>
    <bdo id="dlktz"></bdo>
    主站蜘蛛池模板: 建平县| 麻栗坡县| 乌拉特后旗| 宝清县| 安溪县| 宿迁市| 枣庄市| 千阳县| 禹城市| 三门县| 洮南市| 上杭县| 九龙城区| 洪湖市| 四会市| 靖安县| 漠河县| 张北县| 威信县| 宁化县| 大埔区| 宜昌市| 昌吉市| 桓台县| 旬阳县| 灵璧县| 洪雅县| 高清| 句容市| 泸溪县| 芒康县| 马边| 嘉义市| 城市| 黄大仙区| 高雄市| 灵山县| 乐清市| 韩城市| 浦江县| 元阳县|