Go反射中type和kind區(qū)別比較詳析
前言
Go語言中的反射是由 reflect 包提供支持的,它定義了兩個(gè)重要的類型 Type 和 Value 。任意值在反射中都可以理解為由 reflect.Type 和 reflect.Value 兩部分組成,并且 reflect 包提供了 reflect.TypeOf 和 reflect.ValueOf 兩個(gè)函數(shù)來獲取任意對(duì)象的 Value 和 Type。
在Go語言程序中,使用 reflect.TypeOf() 函數(shù)可以獲得任意值的類型對(duì)象(reflect.Type),程序通過類型對(duì)象可以訪問任意值的類型信息。
Type 和 Kind 的區(qū)別
Type 是類型。Kind 是類別。Type 和 Kind 可能相同,也可能不同。通?;A(chǔ)數(shù)據(jù)類型的 Type 和 Kind 相同,自定義數(shù)據(jù)類型則不同。
基礎(chǔ)類型
輸出結(jié)果為 int int
func main() {
var a int
typeA := reflect.TypeOf(a)
fmt.Println(typeA.Name(), typeA.Kind())
}自定義類型
輸出結(jié)果為cat struct
type cat struct {
name string
}
typeCat := reflect.TypeOf(cat{})
fmt.Println(typeCat.Name(), typeCat.Kind())對(duì)于反射中的 kind 我們既可以通過 reflect.Type 來獲取,也可以通過 reflect.Value 來獲取。他們得到的值和類型均是相同的。
種類(Kind)
種類(Kind)指的是對(duì)象歸屬的品種,在 reflect 包中有如下定義:
type Kind uint
const (
Invalid Kind = iota // 非法類型
Bool // 布爾型
Int // 有符號(hào)整型
Int8 // 有符號(hào)8位整型
Int16 // 有符號(hào)16位整型
Int32 // 有符號(hào)32位整型
Int64 // 有符號(hào)64位整型
Uint // 無符號(hào)整型
Uint8 // 無符號(hào)8位整型
Uint16 // 無符號(hào)16位整型
Uint32 // 無符號(hào)32位整型
Uint64 // 無符號(hào)64位整型
Uintptr // 指針
Float32 // 單精度浮點(diǎn)數(shù)
Float64 // 雙精度浮點(diǎn)數(shù)
Complex64 // 64位復(fù)數(shù)類型
Complex128 // 128位復(fù)數(shù)類型
Array // 數(shù)組
Chan // 通道
Func // 函數(shù)
Interface // 接口
Map // 映射
Ptr // 指針
Slice // 切片
String // 字符串
Struct // 結(jié)構(gòu)體
UnsafePointer // 底層指針
)總結(jié)
相較于 Type 而言,Kind 所表示的范疇更大。可以理解為數(shù)學(xué)中的包含關(guān)系。類似于家用電器(Kind)和電視機(jī)(Type)之間的對(duì)應(yīng)關(guān)系。類似于電商系統(tǒng)中的spu和sku的關(guān)系一樣。
到此這篇關(guān)于Go反射中type和kind區(qū)別比較的文章就介紹到這了,更多相關(guān)Go反射type和kind內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng)
本文主要介紹了Golang實(shí)現(xiàn)HTTP編程請(qǐng)求和響應(yīng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Goland?Gin?框架中的表單處理與數(shù)據(jù)綁定的操作方法
本文詳細(xì)介紹了Gin框架中表單處理的功能,包括數(shù)據(jù)綁定、驗(yàn)證和文件上傳等,并通過一個(gè)完整的用戶注冊(cè)項(xiàng)目示例展示了實(shí)際應(yīng)用,感興趣的朋友跟隨小編一起看看吧2024-11-11
Golang內(nèi)存對(duì)齊的規(guī)則及實(shí)現(xiàn)
本文介紹了Golang內(nèi)存對(duì)齊的規(guī)則及實(shí)現(xiàn),通過合理的內(nèi)存對(duì)齊,可以提高程序的執(zhí)行效率和性能,通過對(duì)本文的閱讀,讀者可以更好地理解Golang內(nèi)存對(duì)齊的原理和技巧,并應(yīng)用于實(shí)際編程中2023-08-08
Go語言如何實(shí)現(xiàn)Benchmark函數(shù)
go想要在main函數(shù)中測(cè)試benchmark會(huì)麻煩一些,所以這篇文章主要為大家介紹了如何實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的且沒有開銷的benchmark函數(shù),希望對(duì)大家有所幫助2024-12-12
詳解如何使用pprof簡(jiǎn)單檢測(cè)和修復(fù)Go語言中的內(nèi)存泄漏
雖然?Go?有自動(dòng)垃圾回收(GC),它能回收不再被使用的內(nèi)存,但這并不意味著?Go?程序中不會(huì)發(fā)生內(nèi)存泄漏,下面我們就來看看如何使用pprof進(jìn)行檢測(cè)和修復(fù)Go語言中的內(nèi)存泄漏吧2025-01-01

