久久国产乱子伦精品免费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. 主站蜘蛛池模板: 陕西省| 称多县| 九寨沟县| 黄骅市| 洞口县| 翼城县| 和龙市| 渝北区| 读书| 甘肃省| 凤凰县| 宜阳县| 无极县| 阳朔县| 永和县| 米易县| 宣化县| 凌云县| 墨竹工卡县| 伊宁市| 五寨县| 井冈山市| 碌曲县| 屯门区| 专栏| 新营市| 江安县| 梅州市| 新昌县| 大化| 年辖:市辖区| 定边县| 阿坝县| 沂源县| 白河县| 农安县| 武宣县| 唐河县| 祁阳县| 苍山县| 扶沟县|