自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

掌握Go語言的基本數(shù)據(jù)類型:編程世界的ABC

開發(fā) 前端
聲明變量同時賦值的方式,如果沒有指定明確的數(shù)據(jù)類型,會默認(rèn)使用范圍大的類型,比如:int、float64、false。

Go語言,以其簡潔的語法和強(qiáng)大的性能,已經(jīng)成為現(xiàn)代軟件開發(fā)領(lǐng)域中的重要力量。在Go語言的豐富特性中,基本數(shù)據(jù)類型扮演著至關(guān)重要的角色。它們是構(gòu)建復(fù)雜程序的基礎(chǔ),是每一個Go程序的起點。正如學(xué)習(xí)任何新語言一樣,了解其字母表(ABC)是掌握語言的關(guān)鍵第一步。在Go語言中,這意味著要熟悉其提供的基本數(shù)據(jù)類型。

Go語言提供的基本數(shù)據(jù)類型

Go語言的基本數(shù)據(jù)類型可以分為以下幾個類別:

  1. 整型:包括不同大小和符號的整數(shù),如 int, int8, int16, int32, int64 和 uint 等。
  2. 浮點型:用于表示實數(shù),包括 float32 和 float64。
  3. 布爾型:表示邏輯值 true 或 false。
  4. 字符串:用于表示文本數(shù)據(jù),是一個不可變的字符序列。
  5. rune 類型:代表一個 Unicode 碼點,等同于 int32。
  6. byte 類型:是 uint8 的別名,常用于表示字節(jié)。

int

定義int類型

var int1 = 1
fmt.Printf("int1類型:%T\n", int1)

輸出結(jié)果:

int1類型:int

注意:%T 查看變量的類型

進(jìn)制轉(zhuǎn)化

var i1 = 101
fmt.Printf("%d\n", i1) //轉(zhuǎn)成十進(jìn)制
fmt.Printf("%b\n", i1) //把十進(jìn)制轉(zhuǎn)成二級制
fmt.Printf("%o\n", i1) //把十進(jìn)制轉(zhuǎn)成八進(jìn)制
fmt.Printf("%x\n", i1) //把十進(jìn)制轉(zhuǎn)成十六進(jìn)制
fmt.Println("-----")

輸出結(jié)果:

數(shù)值為:101
把十進(jìn)制轉(zhuǎn)成二級制:1100101
把十進(jìn)制轉(zhuǎn)成八進(jìn)制:145
把十進(jìn)制轉(zhuǎn)成十六進(jìn)制:65

定義八進(jìn)制

八進(jìn)制一定是以0開頭的,逢八進(jìn)一位

i2 := 077
fmt.Printf("i2十進(jìn)制:%d\n", i2)
fmt.Printf("i2八進(jìn)制:%o\n", i2)
fmt.Printf("i2類型%T\n",i2)

輸出結(jié)果

i2十進(jìn)制:63
i2八進(jìn)制:77
i2類型int

定義十六進(jìn)制

從0到f,逢十六進(jìn)一

i3 := 0x1234567
fmt.Printf("i3十進(jìn)制:%d\n", i3)
fmt.Printf("i3十流進(jìn)制:%x\n", i3)
// %T 查看變量的類型
fmt.Printf("i3十進(jìn)制數(shù)據(jù)類型:%T\n", i3)

輸出結(jié)果

i3十進(jìn)制:19088743
i3十六進(jìn)制:1234567
i3十進(jìn)制數(shù)據(jù)類型:int

總結(jié):我們發(fā)現(xiàn)直接定義十進(jìn)制、八進(jìn)制、十六進(jìn)制的變量,變量的類型都是int型。

拋出問題

我們怎么定義int8/int16/int32/int64類型的數(shù)據(jù)呢?

其實非常簡單:

i4 := int8(1)
i5 := int16(1)
i6 := int32(1)
i7 := int64(1)
fmt.Printf("i4:%T\n", i4)
fmt.Printf("i5:%T\n",i5)
fmt.Printf("i6:%T\n",i6)
fmt.Printf("i7:%T\n",i7)

輸出結(jié)果:

i4:int8
i5:int16
i6:int32
i7:int64

拋出問題:go有這么多種int類型,我們怎么選擇使用哪種呢?

給出答案:

我們首先要知道這些類型的區(qū)別:

  • int8類型大小為 1 字節(jié)
  • int16類型大小為 2 字節(jié)
  • int32類型大小為 4 字節(jié)
  • int64類型大小為 8 字節(jié)
  • int類型的大小為 4個字節(jié) 或者 8個字節(jié)

其中int類型要重點說一下:go語言中的 int 的大小是和操作系統(tǒng)位數(shù)相關(guān)的,如果是32位操作系統(tǒng),int 類型的大小就是4字節(jié)。如果是64位操作系統(tǒng),int 類型的大小就是8個字節(jié)。

由此我們可以知道,根據(jù)自己需要的字節(jié)數(shù)來選擇,當(dāng)然選擇int類型是最省心安全的,但是當(dāng)我們?nèi)≈捣秶〉臅r候,會浪費存儲空間。

float

go中的float可以細(xì)分為:float32和float64

定義float

f1 := 1.0
fmt.Printf("f1類型:%T\n", f1) // Go語言中的小數(shù)默認(rèn)類型是:float64

輸出結(jié)果:

f1類型:float64

分析:在未指定類型定義float時,默認(rèn)的類型是float64。和int類型的定義是一致的。

反思:這種設(shè)計我們也可以很好理解,出于數(shù)據(jù)安全的考慮,設(shè)置數(shù)據(jù)類型對應(yīng)的最大內(nèi)存空間的類型,避免內(nèi)存溢出等問題。

定義float32類型

聰明的你一定會想到,和定義int8是一樣的

f2 := float32(1.4321)
fmt.Printf("%T\n", f2)

輸出結(jié)果:

f2類型:float32

小技巧

我們可以通過內(nèi)置的Math函數(shù),獲得常用的數(shù)值,比如:

var maxFloat = math.MaxFloat32;
println(maxFloat)

輸出結(jié)果:

+3.402823e+038

注意

在go中,數(shù)據(jù)類型是有嚴(yán)格的區(qū)分的,不同類型之間是不能互相轉(zhuǎn)換的,比如:

圖片圖片

bool類型

定義

b1 := true
fmt.Printf("b1類型:%T\n", b1)

輸出結(jié)果:

b1類型:bool

默認(rèn)值為false

var b2 bool
// 前面有2個% 后面也要傳2次參數(shù)
fmt.Printf("b2類型為:%T 值為: %v\n", b2, b2)

輸出結(jié)果:

b2類型為:bool 值為: false

字符串

  • Go語言中的字符串是由雙引號包裹的
s1 := "123"
s2 := "我們"
s3 := "mystring"
  • go語言中單引號包裹的是字符(單獨的字母,漢字,符號,數(shù)字)
s1 := '1'
s2 := '我'
s3 := 's'
// 字節(jié):1個字節(jié)=8Bit(8個二進(jìn)制位)
// 一個字符'A' = 1個字節(jié)
// 一個utf8編碼的漢字一般占3個字節(jié) (比如‘沙’)

rune

rune它是int32的別名(-2147483648~2147483647),相比于byte(-128~127),可表示的字符更多。由于rune可表示的范圍更大,所以能處理一切字符,當(dāng)然也包括中文字符。在平時計算中文字符,可用rune。

當(dāng)我們數(shù)據(jù)中有中文時,一定要注意rune的處理。

len()詳解

len()獲得的是 byte 字節(jié)的數(shù)量,一個中文占用3個字節(jié)

s := "Hello王"
sHello := "Hello"
sWang := "王"
//len()獲得的是 byte 字節(jié)的數(shù)量
fmt.Println(len(s))
fmt.Println(len(sHello))
fmt.Println(len(sWang))

輸出結(jié)果是:8 5 3

循環(huán)輸出字符串

s := "Hello王"
for i := 0; i < len(s); i++ {
   fmt.Printf("%c\n", s[i])
}

輸出結(jié)果:

圖片圖片

我們發(fā)現(xiàn)英文可以正常輸出,但是中文通過這種方式輸出會亂碼

循環(huán)輸出中文字符串

我們可以通過for range循環(huán),從字符串中拿出具體的字符

s := "Hello王"
for _, c := range s {
   fmt.Printf("%c\n", c) //%c 字符
}

輸出結(jié)果:

圖片圖片

字符串的修改

字符串修改是不能直接修改的,需要轉(zhuǎn)成rune切片后再修改

s2 := "小白兔"
s3 := []rune(s2)        //把字符串強(qiáng)制轉(zhuǎn)成rune切片
s3[0] = '大'             //注意 這里需要使用單引號的字符,而不是雙引號的字符串
fmt.Println(string(s3)) //把rune類型的s3強(qiáng)轉(zhuǎn)成字符串

輸出結(jié)果:大白兔

字符和字符串的區(qū)別

c1 := "紅"
c2 := '紅'                            
fmt.Printf("c1的類型:%T c2的類型:%T \n", c1, c2) 
c3 := "H"                            
c4 := 'H'                            
fmt.Printf("c3的類型:%T c4的類型:%T \n", c3, c4)

輸出結(jié)果:

c1的類型:string c2的類型:int32 
c3的類型:string c4的類型:int32

總結(jié):我們發(fā)現(xiàn)只要是雙引號包裹的類型就是string,只要是單引號包裹的類型就是int32,也就是rune。和中英文無關(guān)。

知識點:rune的別名是int32

類型轉(zhuǎn)換

n1 := 10
var f float64
f = float64(n1)
fmt.Printf("f的類型是:%T f的值是:%v\n", f,f)

輸出結(jié)果:

f的類型是:float64 f的值是:10

總結(jié)

  1. Go語言中對類型有嚴(yán)格的要求,不同類型之間不能直接轉(zhuǎn)換,哪怕int8/int16之間也不能轉(zhuǎn)換。
  2. 聲明變量同時賦值的方式,如果沒有指定明確的數(shù)據(jù)類型,會默認(rèn)使用范圍大的類型,比如:int、float64、false。
  3. 字符串的修改要轉(zhuǎn)成rune切片,而不能像PHP一樣直接修改。

本文轉(zhuǎn)載自微信公眾號「王中陽Go」,作者「王中陽Go」,可以通過以下二維碼關(guān)注。

轉(zhuǎn)載本文請聯(lián)系「王中陽Go」公眾號。

責(zé)任編輯:武曉燕 來源: 王中陽
相關(guān)推薦

2016-08-18 14:13:55

JavaScript基本數(shù)據(jù)引用數(shù)據(jù)

2010-10-08 09:02:03

JavaScript基

2010-04-27 11:03:39

Oracle Java

2017-02-27 08:34:09

JavaScript數(shù)據(jù)引用

2011-05-26 14:27:56

java

2021-04-28 18:16:24

Rust數(shù)據(jù)類型

2018-05-25 09:50:30

Java數(shù)據(jù)類型類型轉(zhuǎn)換

2019-11-11 14:55:25

Redis數(shù)據(jù)類型命令

2023-03-27 10:04:27

數(shù)據(jù)類型浮點型布爾型

2024-11-04 06:20:00

Redis單線程

2020-10-26 13:46:07

Java基礎(chǔ)入門篇

2009-08-14 11:15:45

C#基本數(shù)據(jù)類型

2023-07-04 08:41:08

Redis數(shù)據(jù)類型

2023-10-19 07:42:37

Python數(shù)據(jù)類型

2010-01-18 16:49:36

VB.NET基本數(shù)據(jù)類

2024-11-12 13:01:46

2025-01-06 05:10:00

Python數(shù)據(jù)類型編程

2019-08-12 15:40:26

Redis數(shù)據(jù)庫數(shù)據(jù)類型

2023-04-06 07:49:23

Python數(shù)據(jù)類型

2010-10-08 15:11:28

JavaScript數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號