久久国产乱子伦精品免费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開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 宜君县| 黄梅县| 兴和县| 平利县| 临安市| 南雄市| 兴义市| 喜德县| 济宁市| 郧西县| 沂水县| 营口市| 台安县| 惠安县| 民丰县| 桐庐县| 射洪县| 广南县| 灵寿县| 石楼县| 东明县| 南京市| 灯塔市| 东丽区| 宾川县| 青海省| 乃东县| 铜梁县| 射阳县| 东方市| 新乡县| 越西县| 阜新市| 邵东县| 出国| 视频| 宁蒗| 岳池县| 五指山市| 南澳县| 湄潭县|