golang資料的型別識別 獲取與判斷

2021-09-03 01:42:22 字數 1347 閱讀 9935

golang是一種簡潔、方便、效率高的語言,很適合c/c++、python等程式設計師使用。

golang是靜態語言,但是具有動態語言的特性,這篇文章主要介紹golang的資料型別在執行期的識別、獲取和判斷方法,讓大家可以感受到golang靜態語言的動態特性。

1.型別識別

在我們編碼中,經常會碰到讀取資料時,要判斷資料是哪種型別,典型的是json格式文字的讀取和識別。在golang中主要用 x.(t)的方式來識別型別:x是變數,而且是不確定型別的變數,inte***ce,如果是已知型別的,比如x是string,那麼就會報錯:invalid type assertion: data.(string) (non-inte***ce type string on left),當然也不能是常量,常量的型別已知,不需要做型別判斷。t是型別字面量,就是型別的名稱,舉例來說:

var data inte***ce{} = "hello"

strvalue, ok := data.(string)

if ok

t的型別並不是任意的,比如有如下json

var f inte***ce{}

b := byte(``)

json.unmarshal(b, &f)

data, ok := f.(inte***ce{}) // 這裡不能使用f.(map[string]inte***ce{}),這樣是無法判斷成功的

if ok

所以,x.(t)的方式只能判斷一層?這點還沒有經過證實,等後面看了原始碼之後再確定吧

2.型別獲取

可以使用反射的方式獲取變數的型別

reflect.typeof(x)

比如:var str string = 「hello」

fmt.println(reflect.typeof(str))

輸出:string

3.型別判斷

如果有一系列的資料要識別型別,可以用switch的型別判斷語句,分類識別確認。還是以上面json格式的識別判斷為例:

var f inte***ce{}

b := byte(``)

json.unmarshal(b, &f)

for k, v := range f.(map[string]inte***ce{}) :

fmt.println(k, "is array:")

for i, j := range vv

}}

注意:switch這句,vv := v.(type)只有在switch中才能使用,如果單獨使用是會報錯的。

通過以上三種方法,基本上可以滿足golang中對型別的動態識別、獲取和判斷操作了。

Golang 資料型別

注釋 行注釋 塊注釋 識別符號 除了數字開頭的不允許,符號開頭的不允許,關鍵字不允許,其他的unicode字元組合都可以。33 也可以是識別符號,我們 也可以是識別符號。識別符號也區分大小寫。以大寫字母開頭的識別符號是公開的。其他任何識別符號都是私有的。空識別符號 是乙個佔位符,用於賦值操作的時候,...

Golang資料型別

二 布林型 三 字串 數字 字串和布林型。布林型的值只可以是常量 true 或者 false。數字型別支援整型和浮點型,並且支援複數,其中位的運算採用補碼。復合資料型別包括 陣列 結構體是通過組合簡單型別,來表達更加複雜的資料結構。引用型別包括 指標 slice map channel 介面和函式型...

Golang 資料型別 字元型別

基本介紹 golang 中沒有專門的字元型別,如果要儲存單個字元 字母 一般使用 byte 來儲存。字串就是一串固定長度的字元連線起來的字串行。go 的字串是由單個位元組連線起來的。也就是說對於傳統的字串是由字元組成的,而 go 的字串不同,它是由位元組組成的。案例演示 對上面 說明 1 如果我們儲...