在Go語言中經常使用的基本數據類型有以下幾種:數組
注意:在使用
int
和uint
類型時,不能假定它是32位或64位的整型,而是考慮int
和uint
可能在不一樣平臺上的差別。bash
// 程序入口 func main() { // age = "17" // fmt.Println("Hello World") // fmt.Print("isOK") // fmt.Printf("Age: %s", age)\n var a1 = 10 fmt.Printf("十進制:%d\n", a1) fmt.Printf("二進制:%b\n", a1) fmt.Printf("八進制:%o\n", a1) fmt.Printf("十六進制:%x\n", a1) // 直接定義八進制 a2 := 077 fmt.Printf("直接聲明八進制:%d\n", a2) // 直接定義十六進制 a3 := 0x12321 fmt.Printf("直接聲明十六進制:%d\n", a3) }
Go語言支持兩種浮點型:ide
打印浮點數,能夠用fmt包配合%f
,以下:函數
package main import ( "fmt" "math" ) func main() { fmt.Printf("%f\n", math.Pi) fmt.Printf("%.2f\n", math.Pi) }
Go語言中以bool
類型進行聲明布爾型數據,布爾型數據只有true(真)
和false(假)
兩個值。性能
注意:ui
false
。複數有實部和虛部,complex64的實部和虛部爲32位,complex128的實部和虛部爲64位。以下:編碼
func main(){ var c1 complex64 c1 = 1 + 2i var c2 complex128 c2 = 2 + 3i fmt.Println(c1) fmt.Println(c2) }
Go語言中的字符串以原生數據類型出現,使用字符串就像使用其餘原生數據類型(int、bool、float3二、float64 等)同樣。 Go 語言裏的字符串的內部實現使用UTF-8
編碼。 字符串的值爲雙引號(")
中的內容,能夠在Go語言的源碼中直接添加非ASCII碼字符,例如:操作系統
s1 := "Joker" s2 := "HelloWorld"
若是是多行字符串,則是用反引號,它裏面的內容會原樣輸出,好比:指針
s1 := ` 你好, 歡迎光臨。 `
組成每一個字符串的元素叫作字符
,字符
用''
括起來,以下:code
s1 := 'H' s2 := '你'
Go語言中的字符有兩種:
ASCII
碼的一個符號;UTF-8
符號;當須要處理中文、日文或者其餘複合字符時,則須要用到rune
類型。rune
類型實際是一個int32
。
Go 使用了特殊的 rune 類型來處理 Unicode,讓基於 Unicode 的文本處理更爲方便,也可使用 byte 型進行默認字符串處理,性能和擴展性都有照顧。
package main import "fmt" func main() { s1 := "Hello World,你好啊!" // fmt.Printf(s1) // 遍歷字符串,Byte類型 for i := 0; i < len(s1); i++ { fmt.Printf("%v(%c)", s1[i], s1[i]) } fmt.Println() // 遍歷字符串,rune類型 for _, r := range s1 { fmt.Printf("%v(%c)", r, r) } }
其輸出結果以下:
72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)239(ï)188(¼)140()228(ä)189(½)160( )229(å)165(¥)189(½)229(å)149( )138()239(ï)188(¼)129() =============================================== 72(H)101(e)108(l)108(l)111(o)32( )87(W)111(o)114(r)108(l)100(d)65292(,)20320(你)22909(好)21834(啊)65281(!)
從上能夠看到,第一種遍歷方法是按字節進行遍歷的,而對於非英文字母或者數字來講,其佔用的並不是一個字節,好比中文在UTF-8
編碼中就佔用3個字節,這時候若是咱們按着字節來遍歷就會獲得第一種結果,這種結果並非咱們想要的。咱們就須要採用第二用遍歷方式,rune類型用來 表示UTF-8
字符,一個rune字符由一個或者多個字節組成。
特殊字符串須要保持其原生的意義,就須要對其進行轉義,經常使用的以下表:
轉義符 | 含義 |
---|---|
\r | 回車 |
\n | 換行 |
\t | 製表 |
\' | 單引號 |
\\ | 反斜槓 |
\" | 雙引號 |
好比:
package main import "fmt" func main() { s1 := "\"Hello World\"" fmt.Printf(s1) }
方法 | 做用 |
---|---|
len(s) | 求長度(是字節的長度) |
+或者fmt.Sprintf | 字符串拼接 |
strings.Split | 字符串切割 |
strings.contains | 判斷字符串中是否包含 |
strings.HasPrefix,strings.HasSuffix | 判斷字符串的前綴/後綴(布爾類型) |
strings.Index(),strings.LastIndex() | 輸出子串出現的位置(索引) |
strings.Join(a[]string, sep string) | join操做 |
例子:
package main import "fmt" import "strings" func main() { s := "Hello World 你好啊!" // 求長度 fmt.Println(len(s)) // 字符串拼接 s1 := "Joker" s2 := "你好" fmt.Println(s1 + s2) s12 := fmt.Sprintf("%s%s", s1, s2) fmt.Println(s12) // 字符串切割 sSplit := strings.Split(s, " ") fmt.Println(sSplit) // 判斷字符串是否包含 fmt.Println(strings.Contains(s, "H")) fmt.Println(strings.Contains(s, "L")) // 判斷字符串的前綴 fmt.Println(strings.HasPrefix(s, "H")) // 判斷字符串的後綴 fmt.Println(strings.HasSuffix(s, "啊")) // 判斷字串出現的位置 fmt.Println(strings.Index(s, "H")) // 判斷子串最後出現的位置 fmt.Println(strings.LastIndex(s, "o")) // join操做 fmt.Println(strings.Join(sSplit, "-")) }
要修改字符串,須要先將其轉換成[]rune
或[]byte
,完成後再轉換爲string
。不管哪一種轉換,都會從新分配內存,並複製字節數組。
package main import "fmt" func main() { s1 := "hello" // 一、強制轉換 byteS1 := []byte(s1) // 二、進行修改 byteS1[0] = 'H' // 三、強制轉換成字符串並打印 fmt.Println(string(byteS1)) s2 := "我愛你中國" // 一、強制轉換 runeS2 := []rune(s2) // 二、修改 runeS2[3] = '祖' // 三、強制轉換成字符串並打印 fmt.Println(string(runeS2)) }
Go語言中只有強制類型轉換,沒有隱式類型轉換。該語法只能在兩個類型之間支持相互轉換的時候使用。
強制類型轉換的基本語法以下:
T(表達式)
其中,T表示要轉換的類型。表達式包括變量、複雜算子和函數返回值等.