成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

GO語(yǔ)言基本數(shù)據(jù)類(lèi)型-創(chuàng)新互聯(lián)

文章目錄
  • 1.整數(shù)類(lèi)型
    • 1.1.有符號(hào)整數(shù)類(lèi)型
    • 1.2.無(wú)符號(hào)整數(shù)類(lèi)型
    • 1.3.其他整數(shù)類(lèi)型
    • 1.4.額外知識(shí)
  • 2.浮點(diǎn)類(lèi)型
  • 3.字符類(lèi)型
    • 轉(zhuǎn)義字符
  • 4.布爾類(lèi)型
  • 5.字符串類(lèi)型
  • 6.基本數(shù)據(jù)類(lèi)型的默認(rèn)值
  • 7.基本數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換
  • 8.基本數(shù)據(jù)類(lèi)型轉(zhuǎn)為`string`
  • 9.`string`轉(zhuǎn)為基本數(shù)據(jù)類(lèi)型
  • 寫(xiě)在最后

成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)服務(wù)團(tuán)隊(duì)是一支充滿(mǎn)著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶(hù)提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來(lái)開(kāi)發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!
1.整數(shù)類(lèi)型

整數(shù)類(lèi)型就是存放整數(shù)的,如18,-18,123534等,在GO語(yǔ)言中,幾乎不同于其它語(yǔ)言,以字節(jié)的視角來(lái)看其int類(lèi)型還分為不同的int表達(dá),首先int還要分為兩大類(lèi)。

1.1.有符號(hào)整數(shù)類(lèi)型

有符號(hào)就是整數(shù)有正負(fù)之分

我們來(lái)看下圖:
在這里插入圖片描述
可以看到,這4個(gè)int后面都帶了數(shù)字,這其實(shí)就是這個(gè)int類(lèi)型占用內(nèi)存大的比特位,比如int8,就是這個(gè)int類(lèi)型大只能占用8個(gè)比特位,也就是一個(gè)字節(jié)(1個(gè)字節(jié) == 8個(gè)比特位),其他的int也是這樣來(lái)看的,這中分類(lèi)也就確定了各個(gè)int的表數(shù)范圍,所以我們?cè)诙x一個(gè)整型值使,要估摸這個(gè)整型值的范圍,再來(lái)確定使用哪個(gè)int的類(lèi)型。

  • 我們可以看看這些表示int的類(lèi)型其大小是不是如此呢?
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類(lèi)型其字節(jié)大小的確不同。

  • 如果說(shuō)int類(lèi)型賦值不當(dāng)就會(huì)出現(xiàn)如下的錯(cuò)誤:
package main
import "fmt"

func main(){var num1 int8 = 666 // int8 不能承受666這個(gè)值
	fmt.Println(num1)
}

在這里插入圖片描述
也就是說(shuō)666不能作為值賦給int8,不然編譯就會(huì)出問(wèn)題,應(yīng)該使用更高存儲(chǔ)字節(jié)空間的int類(lèi)型來(lái)存放。

1.2.無(wú)符號(hào)整數(shù)類(lèi)型

無(wú)符號(hào)整數(shù)類(lèi)型就是沒(méi)有負(fù)數(shù)之說(shuō)只有整正數(shù)(沒(méi)有符號(hào)位)

我們來(lái)看下圖:

在這里插入圖片描述

可以看到,無(wú)符號(hào)整數(shù)類(lèi)型在有符號(hào)整數(shù)類(lèi)型int的前面多了一個(gè)u,這就是表示無(wú)符號(hào)的意思,值得注意的是,其占用儲(chǔ)存空間的字節(jié)大小沒(méi)有變化,但表數(shù)范圍變了,變得沒(méi)有負(fù)數(shù)了,大值更大了,這就是無(wú)符號(hào)整型的優(yōu)勢(shì),如果你想表達(dá)的數(shù)據(jù)咬定沒(méi)有負(fù)數(shù),那么選無(wú)符號(hào)整型類(lèi)型會(huì)更好些(如表示身高,年齡)。

  • 當(dāng)然,如果用無(wú)符號(hào)整型取存放負(fù)數(shù),這也是會(huì)嚴(yán)格的報(bào)錯(cuò)的

在這里插入圖片描述

1.3.其他整數(shù)類(lèi)型

我們來(lái)看下圖:

在這里插入圖片描述
可以看到,intuint他們的字節(jié)大小是由計(jì)算機(jī)系統(tǒng)的位數(shù)來(lái)決定的,rune就相當(dāng)于int32,byte相當(dāng)于uint8(在后面byte可以用作字符的類(lèi)型)。

定義如下:

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.額外知識(shí)
  • Golang的整數(shù)類(lèi)型,默認(rèn)聲明為int類(lèi)型
    在這里插入圖片描述

  • 變量占用的字節(jié)數(shù)

首先要求變量所占用的字節(jié)數(shù),需要引入unsafe這個(gè)包,然后使用這個(gè)包里面的Sizeof來(lái)求

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
}
  • 這么多整數(shù)類(lèi)型,使用的時(shí)候該如何選擇呢?Golang程序中整型變量在使用時(shí),遵守保小不保大的原則, 即: 在保證程序正確運(yùn)行下,盡量使用占用空間小的數(shù)據(jù)類(lèi)型
// 表示學(xué)生年齡
var age byte = 8 // 小的數(shù)據(jù)盡量用byte存放
2.浮點(diǎn)類(lèi)型

簡(jiǎn)單來(lái)說(shuō),浮點(diǎn)類(lèi)型就是用來(lái)存放小樹(shù)值的, 如3.14,5.20,-13.14

看下圖:

在這里插入圖片描述

在GO語(yǔ)言中,要?jiǎng)?chuàng)建浮點(diǎn)類(lèi)型的變量,必須在float后面加上32或者64,因?yàn)?code>單純的一個(gè)float不會(huì)被當(dāng)作浮點(diǎn)類(lèi)型。

  • 當(dāng)我們?cè)谫x值給一個(gè)浮點(diǎn)類(lèi)型的變量時(shí),我們可以直接賦值小數(shù),也可以用E(或者e)(科學(xué)計(jì)數(shù)法)表示,如下:
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 // 小寫(xiě)e與大寫(xiě)E沒(méi)有區(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
}
  • 我們?cè)诮ofloat賦值的時(shí)候,很可能出現(xiàn)精度損失的情況,因此建議創(chuàng)建浮點(diǎn)類(lèi)型的時(shí)候最好用float64
package main
import "fmt"

func main(){//浮點(diǎn)數(shù)可能會(huì)有精度的損失,所以通常情況下,建議你使用:float64 
	var num7 float32 = 520.000001314
	fmt.Println(num7)
	var num8 float64 = 520.000001314
	fmt.Println(num8)
}

運(yùn)行結(jié)果:
在這里插入圖片描述

3.字符類(lèi)型
  • Golang中沒(méi)有專(zhuān)門(mén)的字符類(lèi)型,如果要存儲(chǔ)單個(gè)字符(字母),一般使用byte來(lái)保存。
  • Golang中字符使用UTF-8編碼
    UTF-8編碼鏈接

UTF-8編碼:
在這里插入圖片描述

  • 當(dāng)我們用byte類(lèi)型來(lái)定義一個(gè)字符變量,將其打印出來(lái)的值是其對(duì)應(yīng)的ASCLL碼值,各個(gè)字符的ASCLL碼值對(duì)應(yīng)如下:

在這里插入圖片描述
示例如下:
在這里插入圖片描述
所以字符類(lèi)型,本質(zhì)上就是一個(gè)整數(shù),也可以直接參與運(yùn)算,輸出字符的時(shí)候,會(huì)將對(duì)應(yīng)的碼值做一個(gè)輸出,但如果我們用Printf打?。ɡㄌ?hào)里要用%c),可以打印出字符:
在這里插入圖片描述

如果我們想要打印中文字符,比如打印一個(gè)中,這時(shí)byte類(lèi)型就存放不下其對(duì)應(yīng)的ASCLL碼值了,所以這時(shí)我們應(yīng)該使用int。

package main
import "fmt"

func main(){var c int = '中'
	fmt.Println(c)
	//漢字字符,底層對(duì)應(yīng)的是Unicode碼值
	//對(duì)應(yīng)的碼值為20013,byte類(lèi)型溢出,能存儲(chǔ)的范圍:可以用int
	//總結(jié):Golang的字符對(duì)應(yīng)的使用的是UTF-8編碼
	//(Unicode是對(duì)應(yīng)的字符集,UTF-8是Unicode的其中的一種編碼方案)
}

在這里插入圖片描述

轉(zhuǎn)義字符

看下圖:

在這里插入圖片描述

通俗來(lái)說(shuō):

  • \b
    就是往前挪一格,掩蓋挪動(dòng)的那一格的數(shù)據(jù)。
    在這里插入圖片描述


  • 就是換行,這個(gè)不用多說(shuō)(haha)

  • \r
    就是光標(biāo)回到本行的開(kāi)頭,將\r后面的字符依次覆蓋前面的字符。
    在這里插入圖片描述

  • \t
    就是將\t前面的字符串補(bǔ)夠8個(gè)位置(不夠8個(gè)位置),不夠的話(huà),則從那夠了的8個(gè)再往后數(shù)。

在這里插入圖片描述

  • \",\',\\
    這三個(gè)是為了在字符串中能夠?qū)?code>”,',\打印出來(lái)而不是與旁邊的"",'',或者是轉(zhuǎn)義匹配。

例如:

在這里插入圖片描述

4.布爾類(lèi)型
  • 布爾類(lèi)型也叫bool類(lèi)型,bool類(lèi)型數(shù)據(jù)只允許取值true和false。
  • 布爾類(lèi)型占1個(gè)字節(jié)。
  • 布爾類(lèi)型適于邏輯運(yùn)算,一般用于程序流程控制。

基本的使用:

package main
import "fmt"
func main(){//測(cè)試布爾類(lèi)型的數(shù)值:
        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,因?yàn)?的確小于9:為真
}
5.字符串類(lèi)型
  • 字符串類(lèi)型用string來(lái)定義。
  • 字符串定義后就不能改變了(單指字符串,變量的值可以變)。
  • 字符串可以拼接。
  • 當(dāng)一個(gè)字符串里面有轉(zhuǎn)義的時(shí)候最好用 `` (Esc下面的按鍵)括起來(lái)(當(dāng)然轉(zhuǎn)義字符也可以)。
  • 當(dāng)一個(gè)字符串過(guò)長(zhǎng)時(shí),最好換行,而換行的時(shí)候最好將運(yùn)算符放在一行的最后面,因?yàn)槿绻皇欠?hào)在最后面,編譯器會(huì)自動(dòng)在這一行的后面加上,我們看不見(jiàn)而已。

示例:

package main
import "fmt"

func main(){// 定義一個(gè)字符串
	var str1 string = "hello golang"
	fmt.Println(str1) // hello golang


	// 轉(zhuǎn)義字符過(guò)多時(shí)用``括起來(lái)
	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


	//當(dāng)一個(gè)字符串過(guò)長(zhǎng)的時(shí)候:注意:+保留在上一行的最后
	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.基本數(shù)據(jù)類(lèi)型的默認(rèn)值

在Golang中數(shù)據(jù)類(lèi)型都有一個(gè)默認(rèn)值,當(dāng)程序員沒(méi)有賦值時(shí),就會(huì)保留默認(rèn)值(默認(rèn)值又叫零值)。

在這里插入圖片描述

7.基本數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換

Go在不同類(lèi)型的變量之間賦值時(shí)需要顯式轉(zhuǎn)換,并且只有顯式轉(zhuǎn)換(強(qiáng)制轉(zhuǎn)換)。

語(yǔ)法形式:
表達(dá)式T(v)將值v轉(zhuǎn)換為類(lèi)型T
T : 就是數(shù)據(jù)類(lèi)型
v : 就是需要轉(zhuǎn)換的變量

例如:

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
}

但如過(guò)一個(gè)大的值強(qiáng)制轉(zhuǎn)換為一個(gè)不能存放這個(gè)大數(shù)據(jù)的值的類(lèi)型時(shí),編譯器不會(huì)報(bào)錯(cuò),但運(yùn)行后會(huì)造成數(shù)據(jù)的溢出(截?cái)啵?br />例如:

package main
import "fmt"

func main(){// 將int64轉(zhuǎn)為int8的時(shí)候,編譯不會(huì)出錯(cuò)的,但是會(huì)數(shù)據(jù)的溢出
	var n1 int64 = 666666
	var n2 int8 = int8(n3)
	// 這里發(fā)生了截?cái)?	fmt.Println(n2)//56
}
8.基本數(shù)據(jù)類(lèi)型轉(zhuǎn)為string
  • 在程序開(kāi)發(fā)中,我們經(jīng)常需要將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)成string類(lèi)型?;蛘邔tring類(lèi)型轉(zhuǎn)成基本數(shù)據(jù)類(lèi)型。
  • 將基本數(shù)據(jù)類(lèi)型轉(zhuǎn)化為string有兩種方式:
    1.fmt包中的Sprintf“%參數(shù)”,要轉(zhuǎn)換的變量注意:原先的變量值不變,只是將面值賦給一個(gè)string類(lèi)型的變量))—推薦。
    2.使用strconv包中的函數(shù)。
  • 第一種方式轉(zhuǎn)換如下:
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對(duì)應(yīng)的類(lèi)型是:%T ,s1 = %q \n",s1, s1)

	var s2 string = fmt.Sprintf("%f",n2)
	fmt.Printf("s2對(duì)應(yīng)的類(lèi)型是:%T ,s2 = %q \n",s2, s2)

	var s3 string = fmt.Sprintf("%t",n3)
	fmt.Printf("s3對(duì)應(yīng)的類(lèi)型是:%T ,s3 = %q \n",s3, s3)
	
	var s4 string = fmt.Sprintf("%c",n4)
	fmt.Printf("s4對(duì)應(yīng)的類(lèi)型是:%T ,s4 = %q \n",s4, s4)
}

在這里插入圖片描述

  • 第二種方式轉(zhuǎn)換我們還需了解strconv包,以及包中我們將要用到的函數(shù)。

在這里插入圖片描述

根據(jù)函數(shù)的功能及使用,如下轉(zhuǎn)換:

package main
import(
        "fmt"
        "strconv"
)
func main(){var n1 int = 18
        var s1 string = strconv.FormatInt(int64(n1),10)  //參數(shù):第一個(gè)參數(shù)必須轉(zhuǎn)為int64類(lèi)型 ,第二個(gè)參數(shù)指定字面值的進(jìn)制形式為十進(jìn)制
        fmt.Printf("s1對(duì)應(yīng)的類(lèi)型是:%T ,s1 = %q \n",s1, s1)
        
        var n2 float64 = 4.29
        var s2 string = strconv.FormatFloat(n2,'f',9,64)
        //第二個(gè)參數(shù):'f'(-ddd.dddd)  第三個(gè)參數(shù):9 保留小數(shù)點(diǎn)后面9位  第四個(gè)參數(shù):表示這個(gè)小數(shù)是float64類(lèi)型
        fmt.Printf("s2對(duì)應(yīng)的類(lèi)型是:%T ,s2 = %q \n",s2, s2)
        
        var n3 bool = true
        var s3 string = strconv.FormatBool(n3)
        fmt.Printf("s3對(duì)應(yīng)的類(lèi)型是:%T ,s3 = %q \n",s3, s3)
}
9.string轉(zhuǎn)為基本數(shù)據(jù)類(lèi)型

string轉(zhuǎn)為基本數(shù)據(jù)類(lèi)型的方式是使用strconv包中的函數(shù)。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

下面通過(guò)使用函數(shù)來(lái)代碼實(shí)現(xiàn)轉(zhuǎn)化:

package main
import(
        "fmt"
        "strconv"
)

func main(){//1. string 轉(zhuǎn) bool
        //string-->bool
        var s1 string = "true"
        var b bool
        //ParseBool這個(gè)函數(shù)的返回值有兩個(gè):(value bool, err error)
        //value就是我們得到的布爾類(lèi)型的數(shù)據(jù),err出現(xiàn)的錯(cuò)誤
        //我們只關(guān)注得到的布爾類(lèi)型的數(shù)據(jù),err可以用_直接忽略
        b , _ = strconv.ParseBool(s1)
        fmt.Printf("b的類(lèi)型是:%T,b=%v \n",b,b)
//2.  string 轉(zhuǎn) int64        
        //string---》int64
        var s2 string = "19"
        var num1 int64
        num1,_ = strconv.ParseInt(s2,10,64)
        fmt.Printf("num1的類(lèi)型是:%T,num1=%v \n",num1,num1)
//3.  string 轉(zhuǎn) float64        
        //string-->float32/float64
        var s3 string = "3.14"
        var f1 float64
        f1,_ = strconv.ParseFloat(s3,64)
        fmt.Printf("f1的類(lèi)型是:%T,f1=%v \n",f1,f1)
//4.        
        //注意:string向基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換的時(shí)候,
        //一定要確保string類(lèi)型能夠
        //轉(zhuǎn)成有效的數(shù)據(jù)類(lèi)型,
        //否則最后得到的結(jié)果就是按照對(duì)應(yīng)類(lèi)型的默認(rèn)值輸出
        var s4 string = "golang"
        var b1 bool
        b1 , _ = strconv.ParseBool(s4)
        fmt.Printf("b1的類(lèi)型是:%T,b1=%v \n",b1,b1)
//5.        
        var s5 string = "golang"
        var num2 int64
        num2,_ = strconv.ParseInt(s5,10,64)
        fmt.Printf("num2的類(lèi)型是:%T,num2=%v \n",num2,num2)
}

運(yùn)行結(jié)果為:

在這里插入圖片描述

可以看到,b1與 num2的值都是默認(rèn)值。

寫(xiě)在最后

GO語(yǔ)言需要求精的地方多,不能放過(guò)每一個(gè)部分,不然出來(lái)的代碼就很可能會(huì)不夠嚴(yán)謹(jǐn)。

感謝閱讀本小白的博客,錯(cuò)誤的地方請(qǐng)嚴(yán)厲指出噢!

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站名稱(chēng):GO語(yǔ)言基本數(shù)據(jù)類(lèi)型-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://jinyejixie.com/article16/djcigg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、定制開(kāi)發(fā)、網(wǎng)站導(dǎo)航品牌網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化