一篇文章帶你了解Go語言基礎之數據類型
上篇文章中我們學習了Go語言基礎中的變量,一篇文章帶你了解Go語言基礎之變量,這篇文章我們繼續介紹Go語言基礎知識,今天跟大家分享的是基礎數據類型,一起來學習下吧~
前言
Hey,大家好呀,我是星期八,這次咱們繼續學習Go基礎之數據類型叭。
iota
iota是Go中的一個常量計數器,只能在跟常量(const)一塊使用。
我們先來理解這一段話。
- iota在const關鍵字出現時將被重置為0
- const中每新增一行常量,iota將計數(+1)一次
示例1:
- package main
- import "fmt"
- func main() {
- const (
- n1 = iota //在const關鍵字出現時將被重置為0
- n2 //沒寫相當于寫了個n2=iota,每新增一行常量iota計數(+1)一次,n2 = 1
- n3 //同上 n3 = 2
- n4 // 同上 n4 = 3
- )
- fmt.Println(n1, n2, n3, n4)
- }
示例2:
遇到_會是什么情況。
- package main
- import "fmt"
- func main() {
- const (
- n1 = iota //在const關鍵字出現時將被重置為0
- n2 // n2=1
- _ //匿名變量,相當于寫了個 _=iota,所以此時iota=2
- n4 //n4=3
- )
- fmt.Println(n1, n2, n4)
- }
示例3:
一行多個iota。
- package main
- import "fmt"
- func main() {
- const (
- a, b = iota + 1, iota + 2 //在const關鍵字出現時,iota=0,并且兩次賦值在同一行,iota沒有做+1
- c, d //同理,新增一行常量,常量個數為倆,仍然是一行,所以iota=1
- //c, d = iota + 1, iota + 2 同上,此時iota=1,c=2,d=3
- e, f // 同理,同上,e=3,f=4
- )
- fmt.Println(a, b, c, d, e, f)
- }
整型
整數,很簡單了,就是像1,2,3,7,11,..這樣的整型數字了。
但是在Go中,整數分為兩大類,正整數和沒有符號的整數。
u開頭的不能存負數
在不同平臺上的差異。
示例:
- package main
- import "fmt"
- func main() {
- var a = 10 //定義一個十進制數
- fmt.Printf("%T\n", a) //功能:打印變量類型,結果:默認為int類型,也叫int64
- fmt.Printf("%d \n", a) //功能:十進制輸出,結果:10
- fmt.Printf("%b \n", a) //功能:二進制輸出,結果:1010
- fmt.Printf("%o \n", a) //功能:二進制輸出,結果:12
- var b = 0b1010011010 //定義一個二進制數1010011010,以0b開頭
- fmt.Printf("%d\n", b) //結果:666
- var c = 077 //定義一個八進制數77
- fmt.Printf("%d\n", c) //結果:63
- var d = 0x42 //定義一個十六進制42
- fmt.Printf("%d\n", d) //結果:66
- }
浮點型
在Go中,只有float32和float64,默認使用的是float64。
示例:
- package main
- import "fmt"
- func main() {
- var a = 1.21 //默認為float64
- fmt.Printf("%T\n", a) //結果:float64
- fmt.Printf("%f\n",a)//功能:輸出浮點型數,結果:1.210000
- fmt.Printf("%.1f\n",a)//功能:輸出浮點型數,保留小數點一位,其他忽略,結果:1.2
- fmt.Printf("%.2f\n",a)//功能:輸出浮點型數,保留小數點二位,其他忽略,結果:1.21
- }
布爾值
在Go中,bool類型就倆值,true和false。
無示例。
注:
- bool類型默認值為false。
- true != 1,在Go中,bool類型和整型不能混用。
字符串
終于到字符串了,在Go中,字符串是基本數據類型,在棧中存儲。
字符串的值為雙引號("")中的內容。
示例:
- package main
- import "fmt"
- func main() {
- var name = "hello"
- var name2 = "張三"
- fmt.Println(name,name2)
- }
在Go中,字符串內存布局如下。
其實在Go中,字符串的本質就是一個個的字符拼接成的。
多行字符串
有時候我們可能需要一個長篇大論,需要很長的字符串,這時候我們需要用到`號。
- package main
- import "fmt"
- func main() {
- var lyric = `
- 昨夜同門云集bai 推杯又換盞
- 今朝du茶涼酒寒 豪言成笑談
- 半生累 盡徒然zhi 碑文完美有誰看dao
- 隱居山水之間 誓與浮名散
- 湖畔青石板上 一把油紙傘
- `
- fmt.Println(lyric)
- }
字符串常用操作
示例代碼
- package main
- func main() {
- //len() 求字符串字節長度
- //var name = "你好,世界"
- //fmt.Println(len(name)) //因為中文是utf8,一個文字三個字節,再加一個,號,所以是13
- //fmt.Sprintf 或 + 拼接字符串
- //name1 := "張"
- //name2 := "三"
- //name :=name1 + name2 //拼接字符串
- //fmt.Println(name)
- //name := fmt.Sprintf("%s%s", name1, name2)//同上,不過這種更靈活,推薦
- //name := fmt.Sprintf("我的姓名是:%s%s", name1, name2)//自定義拼接
- //fmt.Println(name)
- //strings.Split 分割字符串
- //name := "張三|18|男|法外狂徒"
- //info := strings.Split(name, "|")
- //fmt.Println(info) //返回的是切片,[張三 18 男 法外狂徒]
- //strings.contains 是否包含
- //name := "張三666"
- //result := strings.Contains(name, "6")
- //fmt.Println(result) //返回的是bool類型,true
- //strings.HasPrefix 判斷前綴(是不是以什么開頭)
- //name := "web/student/xxx.html"
- //result := strings.HasPrefix(name, "web")
- //fmt.Println(result) //true
- //strings.HasSuffix 判斷后綴(是不是以什么結尾)
- //name := "web/student/xxx.html"
- //result := strings.HasSuffix(name, "html")
- //fmt.Println(result)//true
- //strings.Index() 返回第一個字符串出現的位置
- //name := "hello world"
- //index := strings.Index(name, "o")
- //fmt.Println(index) //4
- //strings.LastIndex() // 正向數,返回最后一個字符串出現的位置
- //name := "hello world"
- //index := strings.LastIndex(name, "o")
- //fmt.Println(index) // 7
- //strings.Join(a[]string, sep string) 字符串拼接
- //info_list := []string{"張三", "男", "18"} //定義一個列表
- //name := strings.Join(info_list, "|")
- //fmt.Println(name) //張三|男|18
- }
總結
上述我們學習了Go基礎之數據類型。