go語言中有豐富的資料型別,除了基本的整型、浮點型、布林型、字串外,還有陣列、切片、結構體、函式、map、通道(channel)等。go 語言的基本型別和其他語言大同小異。
基本資料型別
整型整型分為以下兩個大類: 按長度分為:int8、int16、int32、int64 對應的無符號整型:uint8、uint16、uint32、uint64
其中,uint8就是我們熟知的byte型,int16對應c語言中的short型,int64對應c語言中的long型。
型別描述
uint8
無符號 8位整型 (0 到 255)
uint16
無符號 16位整型 (0 到 65535)
uint32
無符號 32位整型 (0 到 4294967295)
uint64
無符號 64位整型 (0 到 18446744073709551615)
int8
有符號 8位整型 (-128 到 127)
int16
有符號 16位整型 (-32768 到 32767)
int32
有符號 32位整型 (-2147483648 到 2147483647)
int64
有符號 64位整型 (-9223372036854775808 到 9223372036854775807)
特殊整型
型別描述
uint
32位作業系統上就是uint32,64位作業系統上就是uint64
int32位作業系統上就是int32,64位作業系統上就是int64
uintptr
無符號整型,用於存放乙個指標
注意: 在使用int和 uint型別時,不能假定它是32位或64位的整型,而是考慮int和uint可能在不同平台上的差異。
注意事項 獲取物件的長度的內建len()函式返回的長度可以根據不同平台的位元組長度進行變化。實際使用中,切片或 map 的元素數量等都可以用int來表示。在涉及到二進位制傳輸、讀寫檔案的結構描述時,為了保持檔案的結構不會受到不同編譯目標平台位元組長度的影響,不要使用int和 uint。
數字字面量語法(number literals syntax)
go1.13版本之後引入了數字字面量語法,這樣便於開發者以二進位制、八進位制或十六進製制浮點數的格式定義數字,例如:
v := 0b00101101, 代表二進位制的 101101,相當於十進位制的 45。 v := 0o377,代表八進位制的 377,相當於十進位制的 255。 v := 0x1p-2,代表十六進製制的 1 除以 2²,也就是 0.25。 而且還允許我們用 _ 來分隔數字,比如說:
v := 123_456 等於 123456。
我們可以借助fmt函式來將乙個整數以不同進製形式展示。
浮點型go語言支援兩種浮點型數:float32和float64。這兩種浮點型資料格式遵循ieee 754標準: float32 的浮點數的最大範圍約為 3.4e38,可以使用常量定義:math.maxfloat32。 float64 的浮點數的最大範圍約為 1.8e308,可以使用乙個常量定義:math.maxfloat64。
列印浮點數時,可以使用fmt包配合動詞%f,**如下:
複數complex64和complex128
複數有實部和虛部,complex64的實部和虛部為32位,complex128的實部和虛部為64位。
布林值go語言中以bool型別進行宣告布林型資料,布林型資料只有true(真)和false(假)兩個值。
注意:布林型別變數的預設值為false。
go 語言中不允許將整型強制轉換為布林型.
布林型無法參與數值運算,也無法與其他型別進行轉換。
字串go語言中的字串以原生資料型別出現,使用字串就像使用其他原生資料型別(int、bool、float32、float64 等)一樣。 go 語言裡的字串的內部實現使用utf-8編碼。 字串的值為雙引號(")中的內容,可以在go語言的原始碼中直接新增非ascii碼字元,例如:
字串轉義符
go 語言的字串常見轉義符包含回車、換行、單雙引號、製表符等,如下表所示。
轉義符含義
\r回車符(返回行首)
\n換行符(直接跳到下一行的同列位置)
\t製表符
單引號雙引號
反斜槓舉個例子,我們要列印乙個windows平台下的乙個檔案路徑:
多行字串
go語言中要定義乙個多行字串時,就必須使用反引號字元:
反引號間換行將被作為字串中的換行,但是所有的轉義字元均無效,文字將會原樣輸出。
字串的常用操作
方法介紹
len(str)
求長度+或fmt.sprintf
拼接字串
strings.split
分割strings.contains
判斷是否包含
strings.hasprefix,strings.hassuffix
字首/字尾判斷
strings.index(),strings.lastindex()
子串出現的位置
strings.join(astring, sep string)
join操作
byte和rune型別
組成每個字串的元素叫做「字元」,可以通過遍歷或者單個獲取字串元素獲得字元。 字元用單引號(』)包裹起來,如:
go 語言的字元有以下兩種:
uint8型別,或者叫 byte 型,代表了ascii碼的乙個字元。
rune型別,代表乙個 utf-8字元。
當需要處理中文、日文或者其他復合字元時,則需要用到rune型別。rune型別實際是乙個int32。
go 使用了特殊的 rune 型別來處理 unicode,讓基於 unicode 的文字處理更為方便,也可以使用 byte 型進行預設字串處理,效能和擴充套件性都有照顧。
輸出:因為utf8編碼下乙個中文漢字由3~4個位元組組成,所以我們不能簡單的按照位元組去遍歷乙個包含中文的字串,否則就會出現上面輸出中第一行的結果。
字串底層是乙個byte陣列,所以可以和byte型別相互轉換。字串是不能修改的 字串是由byte位元組組成,所以字串的長度是byte位元組的長度。 rune型別用來表示utf8字元,乙個rune字元由乙個或多個byte組成。
修改字串
要修改字串,需要先將其轉換成rune或byte,完成後再轉換為string。無論哪種轉換,都會重新分配記憶體,並複製位元組陣列。
型別轉換
go語言中只有強制型別轉換,沒有隱式型別轉換。該語法只能在兩個型別之間支援相互轉換的時候使用。
強制型別轉換的基本語法如下:
其中,t表示要轉換的型別。表示式包括變數、複雜運算元和函式返回值等.
比如計算直角三角形的斜邊長時使用math包的sqrt()函式,該函式接收的是float64型別的引數,而變數a和b都是int型別的,這個時候就需要將a和b強制型別轉換為float64型別。
go var 乙個整數 go語言中var
go語言中定義變數使用關鍵字var,如 var x int 4 也可以寫成x 4 在函式中,簡潔賦值語句在明確型別的地方,可以用於替代 var 定義。結構不能使用在函式外,函式外的每個語法塊都必須以關鍵字開始。package main import fmt func main var x int 4...
go var 乙個整數 Go 語言資料型別
字串去除空格和換行符package main import fmt strings func main str 這裡是 www n.runoob n.com fmt.println 原字串 fmt.println str 去除空格 str strings.replace str,1 去除換行符 st...
Go語言基礎篇(2) 編寫第乙個Go程式
建立檔案hello world.go package main 包,表名 所在的包 import fmt 引入依賴 main方法 func main 執行指令 go run hello world.go 編譯指令 go build hello world.go 應用程式入口語法說明 1.必須是mai...