第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

Go 入門(mén)教程

Go 語(yǔ)言基礎(chǔ)教程
01 Go語(yǔ)言簡(jiǎn)介 02 Go 在 Windows 上的安裝及配置 03 Go 在 Linux 上的安裝與配置 04 Go 在 MacOS 上的安裝及配置 05 Git 的下載和安裝 06 VSCode 編輯器安裝和配置 07 Go 的變量聲明 08 Go 的變量賦值 09 Go 語(yǔ)言的 := 10 Go 的整型(int) 11 Go 的無(wú)符號(hào)整型(uint) 12 Go 的浮點(diǎn)型(float) 13 Go 的字符類(lèi)型 14 Go 的布爾型(bool) 15 Go 的強(qiáng)制類(lèi)型轉(zhuǎn)換 16 Go 語(yǔ)言的常量 17 Go 語(yǔ)言中代替枚舉的辦法 18 Go 語(yǔ)言中的運(yùn)算符 19 Go 語(yǔ)言的分支語(yǔ)句 20 Go 語(yǔ)言的循環(huán)語(yǔ)句 21 Go 語(yǔ)言的通道 22 Go 語(yǔ)言中的函數(shù) 23 Go 語(yǔ)言函數(shù)中的 defer 24 Go 語(yǔ)言中的閉包 25 Go 語(yǔ)言的指針 26 Go 語(yǔ)言中的數(shù)組 27 Go 語(yǔ)言中的切片 28 Go 語(yǔ)言中的 Map 29 Go 語(yǔ)言中的 range 30 Go 語(yǔ)言拓展以有類(lèi)型 31 Go 語(yǔ)言中的結(jié)構(gòu)體和"面向?qū)ο?quot; 32 Go 語(yǔ)言中的接口 33 Go 語(yǔ)言類(lèi)型的內(nèi)嵌 34 Go 語(yǔ)言中的 nil 35 Go 語(yǔ)言函數(shù)式編程 36 Go 語(yǔ)言中的錯(cuò)誤和異常處理 37 Go 語(yǔ)言的并發(fā) 38 Go 語(yǔ)言中的包 39 Go 語(yǔ)言 go mod 包依賴(lài)管理工具 40 Go 語(yǔ)言的文件操作 41 Go 語(yǔ)言中的系統(tǒng)包 42 Go 語(yǔ)言的 strings 系統(tǒng)包的使用 43 Go 語(yǔ)言中的變參 44 Go 語(yǔ)言中的反射 45 Go 語(yǔ)言性能測(cè)試 46 使用 Go 語(yǔ)言搭建簡(jiǎn)易登錄功能 47 使用 gin 包優(yōu)化登錄功能

Go 語(yǔ)言中的反射

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

1. 通過(guò)反射獲取類(lèi)型

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

代碼示例:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    test := 10
    typeOfTest := reflect.TypeOf(test)
    fmt.Println("變量test的類(lèi)型:", typeOfTest)
}
  • 第 9 行:定義一個(gè)值為10的變量;
  • 第 10 行:通過(guò)反射獲取變量的類(lèi)型。

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

圖片描述

2. 通過(guò)反射獲取值

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

代碼示例:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    test := 10
    ValueOfTest := reflect.ValueOf(test)
    fmt.Println("變量test的值:", ValueOfTest)
}
  • 第 9 行:定義一個(gè)值為 10 的變量;
  • 第 10 行:通過(guò)反射獲取變量的值。

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

圖片描述

3. 通過(guò)反射修改變量值

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

代碼示例:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    test := 10
    //獲取test變量的地址
    ValueOfTestAddr := reflect.ValueOf(&test)
    //獲取地址存放的值
    ValueOfTest := ValueOfTestAddr.Elem()
    //修改這個(gè)值
    ValueOfTest.SetInt(100)
    fmt.Println("變量test的值:", test)
}

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

圖片描述

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

4. 小結(jié)

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