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)proxy代理簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于golang如何實(shí)現(xiàn)proxy代理簡(jiǎn)單方法的相關(guān)資料,Proxy是golang實(shí)現(xiàn)的高性能http,https,websocket,tcp,udp,socks5,ss代理服務(wù)器,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10基于Golang實(shí)現(xiàn)Excel表格的導(dǎo)入導(dǎo)出功能
最近項(xiàng)目開發(fā)中有涉及到Excel的導(dǎo)入與導(dǎo)出功能,特別是導(dǎo)出表格時(shí)需要特定的格式,所以本文給大家介紹了基于Golang實(shí)現(xiàn)Excel表格的導(dǎo)入導(dǎo)出功能,文中通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12golang判斷chan channel是否關(guān)閉的方法
這篇文章主要介紹了golang判斷chan channel是否關(guān)閉的方法,結(jié)合實(shí)例形式對(duì)比分析了Go語言判斷chan沒有關(guān)閉的后果及關(guān)閉的方法,需要的朋友可以參考下2016-07-07Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法
在cmd下運(yùn)行g(shù)o程序或者是GOLAND的Terminal下運(yùn)行g(shù)o程序會(huì)出現(xiàn)中文亂碼的情況。本文就詳細(xì)的介紹下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12Golang中常見的三種并發(fā)控制方式使用小結(jié)
這篇文章主要為大家詳細(xì)介紹了如何對(duì)goroutine并發(fā)行為的控制,在Go中最常見的有三種方式:sync.WaitGroup、channel和Context,下面我們就來看看他們的具體使用吧2024-01-01一文帶你掌握Golang中panic與recover的使用方法
這篇文章主要介紹了Golang中panic與recover的作用和使用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考一下2023-04-04Go實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng)的實(shí)例代碼
平常我們?cè)陂_發(fā)API的時(shí)候,前端傳遞過來的大批數(shù)據(jù)需要經(jīng)過后端處理,如果后端處理的速度快,前端響應(yīng)就快,反之則很慢,影響用戶體驗(yàn),為了解決這一問題,需要我們自己實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng),本文將介紹如何用Go語言實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng),需要的朋友可以參考下2023-06-06