
1.1.有符號整數類型整數類型就是存放整數的,如
18,-18,123534等,在GO語言中,幾乎不同于其它語言,以字節(jié)的視角來看其int類型還分為不同的int表達,首先int還要分為兩大類。
有符號就是整數有正負之分
我們來看下圖:
可以看到,這4個int后面都帶了數字,這其實就是這個int類型占用內存大的比特位,比如int8,就是這個int類型大只能占用8個比特位,也就是一個字節(jié)(1個字節(jié) == 8個比特位),其他的int也是這樣來看的,這中分類也就確定了各個int的表數范圍,所以我們在定義一個整型值使,要估摸這個整型值的范圍,再來確定使用哪個int的類型。
- 我們可以看看這些表示int的類型其大小是不是如此呢?
package main
import (
"fmt"
"unsafe"
)
func main(){var num1 int8
fmt.Println(unsafe.Sizeof(num1))
var num2 int16
fmt.Println(unsafe.Sizeof(num2))
var num3 int32
fmt.Println(unsafe.Sizeof(num3))
var num4 int64
fmt.Println(unsafe.Sizeof(num4))
}
可以看到,不同的int類型其字節(jié)大小的確不同。
- 如果說int類型賦值不當就會出現如下的錯誤:
package main
import "fmt"
func main(){var num1 int8 = 666 // int8 不能承受666這個值
fmt.Println(num1)
}
也就是說666不能作為值賦給int8,不然編譯就會出問題,應該使用更高存儲字節(jié)空間的int類型來存放。
無符號整數類型就是沒有負數之說只有整正數(沒有符號位)
我們來看下圖:

可以看到,無符號整數類型在有符號整數類型int的前面多了一個u,這就是表示無符號的意思,值得注意的是,其占用儲存空間的字節(jié)大小沒有變化,但表數范圍變了,變得沒有負數了,大值更大了,這就是無符號整型的優(yōu)勢,如果你想表達的數據咬定沒有負數,那么選無符號整型類型會更好些(如表示身高,年齡)。
- 當然,如果用無符號整型取存放負數,這也是會嚴格的報錯的

我們來看下圖:

可以看到,int和uint他們的字節(jié)大小是由計算機系統(tǒng)的位數來決定的,rune就相當于int32,byte相當于uint8(在后面byte可以用作字符的類型)。
定義如下:
package main
import "fmt"
func main(){var a int = 3
var b uint = 5
var c rune = 10
var d byte = 20
var e byte = 'a'
}1.4.額外知識Golang的整數類型,默認聲明為int類型
變量占用的字節(jié)數
首先要求變量所占用的字節(jié)數,需要引入
unsafe這個包,然后使用這個包里面的Sizeof來求
package main
import (
"fmt"
"unsafe" // 引入包
)
func main(){// 直接使用
var num1 int8
fmt.Println(unsafe.Sizeof(num1)) // 1
var num2 int16
fmt.Println(unsafe.Sizeof(num2)) // 2
var num3 int32
fmt.Println(unsafe.Sizeof(num3)) // 4
var num4 int64
fmt.Println(unsafe.Sizeof(num4)) // 8
}// 表示學生年齡
var age byte = 8 // 小的數據盡量用byte存放2.浮點類型簡單來說,浮點類型就是用來存放小樹值的, 如
3.14,5.20,-13.14。
看下圖:

在GO語言中,要創(chuàng)建浮點類型的變量,必須在float后面加上32或者64,因為單純的一個float不會被當作浮點類型。
package main
import (
"fmt"
)
func main(){var fa float32 = 314E-2 // E-2表示乘以10^-2
var fb float32 = 314E+2 // E+2表示乘以10^2
var fc float32 = 314e-2 // 小寫e與大寫E沒有區(qū)別
var fd float32 = 3.14 // 直接賦值3.14
fmt.Println(fa) // 3.14
fmt.Println(fb) // 31400
fmt.Println(fc) // 3.14
fmt.Println(fd) // 3.14
}float64。package main
import "fmt"
func main(){//浮點數可能會有精度的損失,所以通常情況下,建議你使用:float64
var num7 float32 = 520.000001314
fmt.Println(num7)
var num8 float64 = 520.000001314
fmt.Println(num8)
}運行結果:
- Golang中沒有專門的字符類型,如果要存儲單個字符(字母),一般使用
byte來保存。- Golang中字符使用UTF-8編碼
UTF-8編碼鏈接
UTF-8編碼:
byte類型來定義一個字符變量,將其打印出來的值是其對應的ASCLL碼值,各個字符的ASCLL碼值對應如下:
示例如下:
所以字符類型,本質上就是一個整數,也可以直接參與運算,輸出字符的時候,會將對應的碼值做一個輸出,但如果我們用Printf打印(括號里要用%c),可以打印出字符:
如果我們想要打印中文字符,比如打印一個中,這時
byte類型就存放不下其對應的ASCLL碼值了,所以這時我們應該使用int。
package main
import "fmt"
func main(){var c int = '中'
fmt.Println(c)
//漢字字符,底層對應的是Unicode碼值
//對應的碼值為20013,byte類型溢出,能存儲的范圍:可以用int
//總結:Golang的字符對應的使用的是UTF-8編碼
//(Unicode是對應的字符集,UTF-8是Unicode的其中的一種編碼方案)
}
看下圖:

通俗來說:
\b
就是往前挪一格,掩蓋挪動的那一格的數據。
就是換行,這個不用多說(haha)
\r
就是光標回到本行的開頭,將\r后面的字符依次覆蓋前面的字符。
\t
就是將\t前面的字符串補夠8個位置(不夠8個位置),不夠的話,則從那夠了的8個再往后數。

\",\',\\”,',\打印出來而不是與旁邊的"",'',或者是轉義匹配。例如:

- 布爾類型也叫bool類型,bool類型數據只允許取值true和false。
- 布爾類型占1個字節(jié)。
- 布爾類型適于邏輯運算,一般用于程序流程控制。
基本的使用:
package main
import "fmt"
func main(){//測試布爾類型的數值:
var flag1 bool = true
fmt.Println(flag1) // true
var flag2 bool = false
fmt.Println(flag2) // false
var flag3 bool = 5< 9
fmt.Println(flag3) // true,因為5的確小于9:為真
}5.字符串類型
- 字符串類型用
string來定義。- 字符串定義后就不能改變了(單指字符串,變量的值可以變)。
- 字符串可以拼接。
- 當一個字符串里面有轉義的時候最好用 `` (
Esc下面的按鍵)括起來(當然轉義字符也可以)。- 當一個字符串過長時,最好換行,而換行的時候最好將運算符放在一行的最后面,因為如果不是符號在最后面,編譯器會自動在這一行的后面加上
;,我們看不見而已。
示例:
package main
import "fmt"
func main(){// 定義一個字符串
var str1 string = "hello golang"
fmt.Println(str1) // hello golang
// 轉義字符過多時用``括起來
var str2 string = `package main
import "fmt"
func main(){
fmt.Println("abc\"d\"efghijklm\\nopqrs\\tuvw")
// abc"d"efghijklm\nopqrs\tuvw
}`
// 字符串拼接
var str3 string = "hahaha" + "hehehe"
str3 += "iloveyou"
fmt.Println(str3) // hahahaheheheiloveyou
//當一個字符串過長的時候:注意:+保留在上一行的最后
var str4 string = "abc" + "def" + "abc" + "def" + "abc" + "def" + "abc" +
"def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+
"abc" + "def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" +
"def" + "abc" + "def"+ "abc" + "def" + "abc" + "def"+ "abc" + "def" +
"abc" + "def"+ "abc" + "def"
fmt.Println(str4)
}6.基本數據類型的默認值在Golang中數據類型都有一個默認值,當程序員沒有賦值時,就會保留默認值(默認值又叫零值)。

Go在不同類型的變量之間賦值時需要顯式轉換,并且只有顯式轉換(強制轉換)。
語法形式:
表達式T(v)將值v轉換為類型TT : 就是數據類型v : 就是需要轉換的變量
例如:
package main
import "fmt"
func main(){var num1 int = 1000
var f1 float32 = float32(num1)
fmt.Println(f1) // 1000
var f2 float32 = 666.66
var num2 int = int(f2)
fmt.Println(num2) // 66
}但如過一個大的值強制轉換為一個不能存放這個大數據的值的類型時,編譯器不會報錯,但運行后會造成數據的溢出(截斷):
例如:
package main
import "fmt"
func main(){// 將int64轉為int8的時候,編譯不會出錯的,但是會數據的溢出
var n1 int64 = 666666
var n2 int8 = int8(n3)
// 這里發(fā)生了截斷
fmt.Println(n2)//56
}8.基本數據類型轉為string
- 在程序開發(fā)中,我們經常需要將基本數據類型轉成string類型。或者將string類型轉成基本數據類型。
- 將基本數據類型轉化為
string有兩種方式:
1.fmt包中的Sprintf(“%參數”,要轉換的變量(注意:原先的變量值不變,只是將面值賦給一個string類型的變量))—推薦。
2.使用strconv包中的函數。
package main
import "fmt"
func main(){var n1 int = 19
var n2 float32 = 4.78
var n3 bool = false
var n4 byte = 'a'
var s1 string = fmt.Sprintf("%d",n1)
fmt.Printf("s1對應的類型是:%T ,s1 = %q \n",s1, s1)
var s2 string = fmt.Sprintf("%f",n2)
fmt.Printf("s2對應的類型是:%T ,s2 = %q \n",s2, s2)
var s3 string = fmt.Sprintf("%t",n3)
fmt.Printf("s3對應的類型是:%T ,s3 = %q \n",s3, s3)
var s4 string = fmt.Sprintf("%c",n4)
fmt.Printf("s4對應的類型是:%T ,s4 = %q \n",s4, s4)
}

strconv包,以及包中我們將要用到的函數。
根據函數的功能及使用,如下轉換:
package main
import(
"fmt"
"strconv"
)
func main(){var n1 int = 18
var s1 string = strconv.FormatInt(int64(n1),10) //參數:第一個參數必須轉為int64類型 ,第二個參數指定字面值的進制形式為十進制
fmt.Printf("s1對應的類型是:%T ,s1 = %q \n",s1, s1)
var n2 float64 = 4.29
var s2 string = strconv.FormatFloat(n2,'f',9,64)
//第二個參數:'f'(-ddd.dddd) 第三個參數:9 保留小數點后面9位 第四個參數:表示這個小數是float64類型
fmt.Printf("s2對應的類型是:%T ,s2 = %q \n",s2, s2)
var n3 bool = true
var s3 string = strconv.FormatBool(n3)
fmt.Printf("s3對應的類型是:%T ,s3 = %q \n",s3, s3)
}
9.string轉為基本數據類型將
string轉為基本數據類型的方式是使用strconv包中的函數。



下面通過使用函數來代碼實現轉化:
package main
import(
"fmt"
"strconv"
)
func main(){//1. string 轉 bool
//string-->bool
var s1 string = "true"
var b bool
//ParseBool這個函數的返回值有兩個:(value bool, err error)
//value就是我們得到的布爾類型的數據,err出現的錯誤
//我們只關注得到的布爾類型的數據,err可以用_直接忽略
b , _ = strconv.ParseBool(s1)
fmt.Printf("b的類型是:%T,b=%v \n",b,b)
//2. string 轉 int64
//string---》int64
var s2 string = "19"
var num1 int64
num1,_ = strconv.ParseInt(s2,10,64)
fmt.Printf("num1的類型是:%T,num1=%v \n",num1,num1)
//3. string 轉 float64
//string-->float32/float64
var s3 string = "3.14"
var f1 float64
f1,_ = strconv.ParseFloat(s3,64)
fmt.Printf("f1的類型是:%T,f1=%v \n",f1,f1)
//4.
//注意:string向基本數據類型轉換的時候,
//一定要確保string類型能夠
//轉成有效的數據類型,
//否則最后得到的結果就是按照對應類型的默認值輸出
var s4 string = "golang"
var b1 bool
b1 , _ = strconv.ParseBool(s4)
fmt.Printf("b1的類型是:%T,b1=%v \n",b1,b1)
//5.
var s5 string = "golang"
var num2 int64
num2,_ = strconv.ParseInt(s5,10,64)
fmt.Printf("num2的類型是:%T,num2=%v \n",num2,num2)
}運行結果為:

寫在最后可以看到,b1與 num2的值都是默認值。
GO語言需要求精的地方多,不能放過每一個部分,不然出來的代碼就很可能會不夠嚴謹。
感謝閱讀本小白的博客,錯誤的地方請嚴厲指出噢!
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站名稱:GO語言基本數據類型-創(chuàng)新互聯
標題來源:http://www.chinadenli.net/article16/djcigg.html
成都網站建設公司_創(chuàng)新互聯,為您提供企業(yè)網站制作、定制開發(fā)、網站導航、品牌網站建設、響應式網站、微信小程序
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯