初探Golang(3)-数据类型
Go語言擁有兩大數(shù)據(jù)類型,基本數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型。
1. 數(shù)值類型
##有符號整數(shù) int8(-128 -> 127) int16(-32768 -> 32767) int32(-2,147,483,648 -> 2,147,483,647) int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807) int( 32 位操作系統(tǒng)上32 位,64 位操作系統(tǒng)64 位)##無符號整數(shù) uint8(0 -> 255) uint16(0 -> 65,535) uint32(0 -> 4,294,967,295) uint64(0 -> 18,446,744,073,709,551,615) uint ( 32 位操作系統(tǒng)上32 位,64 位操作系統(tǒng)64 位)##浮點型 float32(+- 1e-45 -> +- 3.4 * 1e38) float64(+- 5 1e-324 -> 107 1e308) #無float類型#復(fù)數(shù) Go 擁有以下復(fù)數(shù)類型: complex64 (32 位實數(shù)和虛數(shù)) complex128 (64 位實數(shù)和虛數(shù))復(fù)數(shù)使用 re+imI 來表示,其中 re 代表實數(shù)部分, im 代表虛數(shù)部分,I 代表根號負 1 var c1 complex64 = 5 + 10i fmt.Printf("The value is: %v", c1) // 輸出: 5 + 10i1.1 整型
int后面的數(shù)字代表位數(shù),而前面的u代表無符號。Go語言中int類型的大小與具體的平臺有關(guān)系,一般來說,int在32位系統(tǒng)中是4字節(jié),在64位系統(tǒng)中是8字節(jié),使用簡短定義自動推導(dǎo)類型初始化一個整數(shù),默認為int類型。
1.2 浮點型
Go語言有兩種精度的浮點數(shù) float32 和 float64,分別占4個字節(jié)和8個字節(jié)
1.3 數(shù)值類型使用注意
-
整型的零值為 0,浮點型的零值為 0.0。
-
int 和 uint 在 32 位操作系統(tǒng)上,它們均使用 32 位(4 個字節(jié)) ,在 64 位操作系統(tǒng)上,它們均使用 64 位(8 個字節(jié))。
-
uintptr 的長度被設(shè)定為足夠存放一個指針即可。
-
整型的零值為 0,浮點型的零值為 0.0。
-
int 型是計算最快的一種類型。
-
盡可能地使用 float64,因為 math 包中所有有關(guān)數(shù)學(xué)運算的函數(shù)都會要求接收這個類型。
-
Go 是強類型語言,不會進行隱式轉(zhuǎn)換.。所以Go 中不允許不同類型之間的混合使用,但允許常量之間的混合使用。
2.字符串
字符串由“ ”聲明,由多個字節(jié)組成,需要使用"進行轉(zhuǎn)義后才能使用 \n \r \t 為特殊作用字符。
3. 布爾
兩種取值類型,true false
4. 數(shù)據(jù)類型的轉(zhuǎn)換
強制類型轉(zhuǎn)換的語法 Type(value)。Type 為目標數(shù)據(jù)類型
5. 運算符
算術(shù)運算符,邏輯運算符,關(guān)系運算符,賦值運算符與Java,c++相差無幾,就不多贅述了
位運算存在一些差別
6. 占位符號
占位符表示在程序中輸出一行字符串時候,或者格式化輸出字符串的時候使用。go內(nèi)置包fmt中Printf方法可以在控制臺格式化打印出用戶輸入的內(nèi)容。fmt.Printf("%T",x)
T代表type類型,s代表字符串string,t代表布爾值,d代表十進制數(shù)字,p代表內(nèi)存地址
7. 數(shù)組
數(shù)組聲明的語法格式為: var 數(shù)組名稱 [長度]數(shù)據(jù)類型
- 數(shù)組的長度,用內(nèi)置函數(shù) len()來獲取。
- 數(shù)組的容量,用內(nèi)置函數(shù) cap()來獲取。
8. 切片Slice
聲明一個切片語法:var 切片名字 [] 數(shù)據(jù)類型
通常情況下,使用make函數(shù)來創(chuàng)建一個切片,切片有長度和容量,默認情況下它的容量與長度相等。所以可以不用指定容量。
//使用make函數(shù)來創(chuàng)建切片 slice :=make([]int,3,5)//長度為3 容量為5 容量如果省略 則默認與長度相等也為3 fmt.Println(slice)//[0,0,0] fmt.Println(len(slice),cap(slice))//長度3,容量5- 首先判斷,如果新申請容量(cap)大于2倍的舊容量(old.cap),最終容量(newcap)就是新申請的容量(cap)
- 否則判斷,如果舊切片的長度小于1024,則最終容量(newcap)就是舊容量(old.cap)的兩倍,即(newcap=doublecap)
- 否則判斷,如果舊切片長度大于等于1024,則最終容量(newcap)從舊容量(old.cap)開始循環(huán)增加原來的 1/4,即(newcap=old.cap,for {newcap += newcap/4})直到最終容量(newcap)大于等于新申請的容量(cap),即(newcap >= cap)
追加元素append語法 slice=append(slice,elem1,elem2)
8.1 make()與new() 的區(qū)別
make()是Go語言中的內(nèi)置函數(shù),主要用于創(chuàng)建并初始化slice切片類型,或者map字典類型,或者channel通道類型數(shù)據(jù)。他與new方法的區(qū)別是。new用于各種數(shù)據(jù)類型的內(nèi)存分配,在Go語言中認為他返回的是一個指針。指向的是一個某種類型的零值。make 返回的是一個有著初始值的非零值。
基本的區(qū)別是 new(T) 返回一個 *T ,返回的這個指針可以被隱式地消除引用 。而 make(T, args) 返回一個普通的T.
8.2 切片刪除
由于切片沒有刪除方法,因此我們需要通過切片的屬性進行刪除,例如:
slice:=[]int{1,2,3,4} i := 2 // 要刪除的下標為2 slice = append(slice[:i], slice[i+1:]...) // 刪除中間1個元素 fmt.Println(slice) //結(jié)果[1 2 4]參考文章:
https://juejin.cn/book/6844733833401597966/section/6844733833477111821
總結(jié)
以上是生活随笔為你收集整理的初探Golang(3)-数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初探Golang(2)-常量和命名规范
- 下一篇: 初探Golang(4)-map和流程控制