亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Go 語言中的反射

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

 

1. 通過反射獲取類型

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

代碼示例:

代碼塊
  • 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 行:通過反射獲取變量的類型。

執(zhí)行結(jié)果:

圖片描述

 

2. 通過反射獲取值

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

代碼示例:

代碼塊
  • 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 行:通過反射獲取變量的值。

執(zhí)行結(jié)果:

圖片描述

 

3. 通過反射修改變量值

上文中我們了解了兩個反射中常用的函數(shù),接下來,我們來學(xué)習(xí)下如何使用反射來進(jìn)行一些靈活的操作,比如修改變量的值。

代碼示例:

代碼塊
  • 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? }

執(zhí)行結(jié)果:

圖片描述

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

 

4. 小結(jié)

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

文章來源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!