2.3 Go語言從入門到精通:數(shù)據(jù)類型


作者:xcbeyond
瘋狂源自夢(mèng)想,技術(shù)成就輝煌!微信公眾號(hào):《程序猿技術(shù)大咖》號(hào)主,專注后端開發(fā)多年,擁有豐富的研發(fā)經(jīng)驗(yàn),樂于技術(shù)輸出、分享,現(xiàn)階段從事微服務(wù)架構(gòu)項(xiàng)目的研發(fā)工作,涉及架構(gòu)設(shè)計(jì)、技術(shù)選型、業(yè)務(wù)研發(fā)等工作。對(duì)于Java、微服務(wù)、數(shù)據(jù)庫、Docker有深入了解,并有大量的調(diào)優(yōu)經(jīng)驗(yàn)。 










文章目錄

1、基本數(shù)據(jù)類型
    1.1 布爾型
    1.2 數(shù)值型
        1.2.1 整型
        1.2.2 浮點(diǎn)型
        1.2.3 復(fù)數(shù)
    1.3 字符串型
2、派生數(shù)據(jù)類型
    2.1 指針
    2.2 數(shù)組
    2.3 結(jié)構(gòu)體
    2.4 通道(channel)
    2.5 切片(slice)
    2.6 函數(shù)
    2.7 接口(interface)
    2.8 Map
3、其他
    3.1 數(shù)據(jù)類型轉(zhuǎn)換
    3.2 類型別名
4、小結(jié)

Go 語言是一種靜態(tài)類型的編程語言,在 Go 編程語言中,數(shù)據(jù)類型用于聲明函數(shù)和變量。數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù),編程的時(shí)候需要用大數(shù)據(jù)的時(shí)候才需要申請(qǐng)大內(nèi)存,就可以充分利用內(nèi)存。編譯器在進(jìn)行編譯的時(shí)候,就要知道每個(gè)值的類型,這樣編譯器就知道要為這個(gè)值分配多少內(nèi)存,并且知道這段分配的內(nèi)存表示什么。

Go 語言按類別有以下幾種數(shù)據(jù)類型:
在這里插入圖片描述













下面將針對(duì)各種數(shù)據(jù)類型的使用展開詳細(xì)的說明。
1、基本數(shù)據(jù)類型
1.1 布爾型

布爾類型的值只有兩種:true 或 false。在if 和 for 語句的條件部分都是布爾類型的值,并且==和<等比較操作也會(huì)產(chǎn)生布爾型的值。

一元操作符!對(duì)應(yīng)邏輯非操作,因此!true的值為 false,更復(fù)雜一些的寫法是(!truefalse) == true,實(shí)際開發(fā)中我們應(yīng)盡量采用比較簡(jiǎn)潔的布爾表達(dá)式,就像用 x 來表示xtrue。

var a = 10
fmt.Println(a == 10) // true
fmt.Println(a == 5) // false
fmt.Println(a != 10) // false
fmt.Println(a != 5) // true


Go語言對(duì)于值之間的比較有非常嚴(yán)格的限制,只有兩個(gè)相同類型的值才可以進(jìn)行比較,如果值的類型是接口(interface),那么它們也必須都實(shí)現(xiàn)了相同的接口。如果其中一個(gè)值是常量,那么另外一個(gè)值可以不是常量,但是類型必須和該常量類型相同。如果以上條件都不滿足,則必須將其中一個(gè)值的類型轉(zhuǎn)換為和另外一個(gè)值的類型相同之后才可以進(jìn)行比較。

var a = 10
fmt.Println(a == true) // cannot use true (type untyped bool) as type int

布爾值可以和 &&(AND)和 ||(OR)操作符結(jié)合,并且有短路行為,如果運(yùn)算符左邊的值已經(jīng)可以確定整個(gè)布爾表達(dá)式的值,那么運(yùn)算符右邊的值將不再被求值,因此下面的表達(dá)式總是安全的:

s != “” && s[0] == ‘x’

Go語言中不允許將整型強(qiáng)制轉(zhuǎn)換為布爾型,代碼如下:

var n bool
fmt.Println(int(n) * 2) // cannot convert n (type bool) to type int

1.2 數(shù)值型

Go語言的數(shù)值類型分為以下幾種:整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù)。其中每一種都包含了不同大小的數(shù)值類型,例如有符號(hào)整數(shù)包含 int8、int16、int32、int64 等,每種數(shù)值類型都決定了對(duì)應(yīng)的大小范圍和是否支持正負(fù)符號(hào)。本小節(jié)我們主要介紹一下數(shù)值類型。
1.2.1 整型

Go語言也是基于架構(gòu)的類型,同時(shí)提供了有符號(hào)和無符號(hào)的整數(shù)類型,具體如下:
在這里插入圖片描述

有符號(hào):用最高位表示符號(hào)(正或負(fù)),其余位表示數(shù)值大小。

無符號(hào):所有位都用于表示數(shù)的大小。

1字節(jié)=8位

大多數(shù)情況下,我們只需要 int 一種整型即可,它可以用于循環(huán)計(jì)數(shù)器(for 循環(huán)中控制循環(huán)次數(shù)的變量)、數(shù)組和切片的索引,以及任何通用目的的整型運(yùn)算符,通常 int 類型的處理速度也是最快的。
1.2.2 浮點(diǎn)型

Go語言提供了兩種精度的浮點(diǎn)數(shù):float32 和 float64,這些浮點(diǎn)數(shù)類型的取值范圍可以從很微小到很巨大。
在這里插入圖片描述

很小或很大的數(shù)最好用科學(xué)計(jì)數(shù)法書寫,通過 e 或 E 來指定指數(shù)部分:

const Avogadro = 6.02214129e23 // 阿伏伽德羅常數(shù)
const Planck = 6.62606957e-34 // 普朗克常數(shù)

1.2.3 復(fù)數(shù)

復(fù)數(shù)是由兩個(gè)浮點(diǎn)數(shù)表示的,其中一個(gè)表示實(shí)部(real),一個(gè)表示虛部(imag)。

Go語言中復(fù)數(shù)的類型有兩種,分別是 complex128(64 位實(shí)數(shù)和虛數(shù))和 complex64(32 位實(shí)數(shù)和虛數(shù)),其中 complex128 為復(fù)數(shù)的默認(rèn)類型。

復(fù)數(shù)的值由三部分組成 RE + IMi,其中 RE 是實(shí)數(shù)部分,IM 是虛數(shù)部分,RE 和 IM 均為 float 類型,而最后的 i 是虛數(shù)單位。如:1+2i

聲明復(fù)數(shù)的語法格式如下所示:

var name complex128 = complex(x, y)

其中 name 為復(fù)數(shù)的變量名,complex128 為復(fù)數(shù)的類型,“=”后面的 complex 為Go語言的內(nèi)置函數(shù)用于為復(fù)數(shù)賦值,x、y 分別表示構(gòu)成該復(fù)數(shù)的兩個(gè) float64 類型的數(shù)值,x 為實(shí)部,y 為虛部。

如下所示:

var cmp complex128 = complex(1, 2) // 復(fù)數(shù):1+2i
fmt.Println(real(cmp)) // 輸出實(shí)部 1
fmt.Println(imag(cmp)) // 輸出虛部 2

1.3 字符串型

字符串是一種值類型,且值不可變,即創(chuàng)建某個(gè)文本后將無法再次修改這個(gè)文本的內(nèi)容,其實(shí),字符串是字節(jié)的定長(zhǎng)數(shù)組。

使用雙引號(hào)""來定義字符串,字符串中可以使用轉(zhuǎn)義字符來實(shí)現(xiàn)換行、縮進(jìn)等效果,常用的轉(zhuǎn)義字符包括:

\n:換行符
\r:回車符
\t:tab 鍵
\u 或 \U`:Unicode 字符
\\:反斜杠自身

Go語言比其他語言更加的靈活,此外,可通過反引號(hào)可以定義多行字符串。(注意:是反引號(hào)(鍵盤上1鍵左邊鍵),而不是引號(hào)‘)

多行字符串一般用于內(nèi)嵌源碼和內(nèi)嵌數(shù)據(jù)等。

示例如下:

package main

import “fmt”

func main() {
// 字符串
var str = “兄弟們!\n趕緊開始學(xué)習(xí)Go語言啦?!?br> fmt.Println(str)
var str2 = 第一行 第二行 第三行
fmt.Println(str2)
}

輸出結(jié)果如下:

兄弟們!
趕緊開始學(xué)習(xí)Go語言啦。
第一行
第二行
第三行






2、派生數(shù)據(jù)類型
2.1 指針

與 Java 等編程語言不同,Go語言為程序員提供了控制數(shù)據(jù)結(jié)構(gòu)指針的能力,但是,并不能進(jìn)行指針運(yùn)算。Go語言允許你控制特定集合的數(shù)據(jù)結(jié)構(gòu)、分配的數(shù)量以及內(nèi)存訪問模式,這對(duì)于構(gòu)建運(yùn)行良好的系統(tǒng)是非常重要的。指針對(duì)于性能的影響不言而喻,如果你想要做系統(tǒng)編程、操作系統(tǒng)或者網(wǎng)絡(luò)應(yīng)用,指針更是不可或缺的一部分。

一個(gè)指針變量指向了一個(gè)值的內(nèi)存地址。

類似于變量和常量,在使用指針前你需要聲明指針。指針聲明格式如下:

var <變量名> *<變量類型>

例如:

var ip *int // 指向整型的指針

指針的使用流程一般為:

定義指針變量。
為指針變量賦值。
訪問指針變量中指向地址的值。

示例如下:

package main

import “fmt”

func main() {
// 指針
var i int = 20 // 聲明實(shí)際變量
var ip *int // 聲明指針變量
ip = &i // 指針變量的存儲(chǔ)地址
fmt.Println("i變量的地址是: ", &i) // 變量的存儲(chǔ)地址
fmt.Println("ip變量?jī)?chǔ)存的指針地址: “, ip) // 指針變量的存儲(chǔ)地址
fmt.Println(”*ip變量的值: ", *ip) // 使用指針訪問值
}

輸出結(jié)果如下:

i變量的地址是: 0xc00008a000
ip變量?jī)?chǔ)存的指針地址: 0xc00008a000
*ip變量的值: 20

提示:變量、指針和地址三者的關(guān)系是,每個(gè)變量都擁有地址,指針的值就是地址。
2.2 數(shù)組

數(shù)組是具有相同類型的一組已編號(hào)且長(zhǎng)度固定的數(shù)據(jù)集合,這種類型可以是任意的基本數(shù)據(jù)類型,例如整型、字符串,或者自定義類型。

相對(duì)于去聲明 number0, number1, …, number99 的變量,使用數(shù)組形式 numbers[0], numbers[1] …, numbers[99] 更加方便且易于擴(kuò)展。

數(shù)組元素可以通過索引(位置)來讀?。ɑ蛘咝薷模饕龔?0 開始,第一個(gè)元素索引為 0,第二個(gè)索引為 1,以此類推。

聲明數(shù)組

Go 語言數(shù)組聲明需要指定元素類型及元素個(gè)數(shù),語法格式如下:

var <數(shù)組變量名> [數(shù)組長(zhǎng)度]<數(shù)組變量類型>

例如,定義一個(gè)長(zhǎng)度為5的int類型數(shù)組:

var intArr [5]int

初始化數(shù)組

var intArr = [5]int{1,2,3,4,5}

或者

intArr := [5]int{1,2,3,4,5}

如果數(shù)組長(zhǎng)度不確定,可以使用 … 代替數(shù)組的長(zhǎng)度,編譯器會(huì)根據(jù)元素個(gè)數(shù)自行推斷數(shù)組的長(zhǎng)度:

intArr := […]int{1,2,3,4,5}

如果設(shè)置了數(shù)組的長(zhǎng)度,我們還可以通過指定下標(biāo)來初始化對(duì)應(yīng)元素:

// 將索引為1和3的元素初始化,其他索引的元素將以默認(rèn)值處理
intArr := [5]int{1:2,3:5}

訪問數(shù)組元素

數(shù)組元素可以通過索引來讀取。格式為數(shù)組名后加中括號(hào) [],中括號(hào)中為索引的值。例如:

var i int = intArr[4]

示例如下:

package main

import “fmt”

func main() {
// 數(shù)組
var intArr [10]int // 定義一個(gè)int類型數(shù)組
var idx int
// 遍歷數(shù)組賦值
for idx = 0; idx < 10; idx++ {
intArr[idx] = idx * 10
}
for idx = 0; idx < 10; idx++ {
fmt.Printf(“intArr[%d] = %d\n”, idx, intArr[idx])
}
}

輸出結(jié)果如下:

intArr[0] = 0
intArr[1] = 10
intArr[2] = 20
intArr[3] = 30
intArr[4] = 40
intArr[5] = 50
intArr[6] = 60
intArr[7] = 70
intArr[8] = 80
intArr[9] = 90

2.3 結(jié)構(gòu)體

Go 語言中數(shù)組只能存儲(chǔ)同一類型的數(shù)據(jù),但在結(jié)構(gòu)體中我們可以為不同項(xiàng)定義不同的數(shù)據(jù)類型。

Go 語言中沒有類的概念,因此在 Go 中結(jié)構(gòu)體有著更為重要的地位。

結(jié)構(gòu)體是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合。

結(jié)構(gòu)體表示一項(xiàng)記錄,比如保存一個(gè)人的信息,每個(gè)人有以下屬性:

Name :姓名
Sex: 性別
Age:年齡

結(jié)構(gòu)體定義

結(jié)構(gòu)體定義需要使用 type 和 struct 語句。struct 語句定義一個(gè)新的數(shù)據(jù)類型,結(jié)構(gòu)體中有一個(gè)或多個(gè)成員。type 語句設(shè)定了結(jié)構(gòu)體的名稱。結(jié)構(gòu)體的格式如下:

type <結(jié)構(gòu)體名稱> struct {
<成員名稱1> <數(shù)據(jù)類型>
<成員名稱2> <數(shù)據(jù)類型>
……
<成員名稱n> <數(shù)據(jù)類型>
}

例如:

type Person struct {
Name string
Sex string
Age int
}

結(jié)構(gòu)體聲明、賦值

定義好一個(gè)結(jié)構(gòu)體后,就可以聲明結(jié)構(gòu)體為一個(gè)變量,并自動(dòng)初始化為零值,然后可以對(duì)其成員賦值,例如:

var p Person
p.Name = “xcbeyond”
p.Age = 18

或者,使用結(jié)構(gòu)體字面量聲明變量,并初始化為非零值,例如:

p := Person {
Name: “xcbeyond”,
Sex: “F”,
Age: 18
}

2.4 通道(channel)

通道,是 goroutine 之間的通道。它可以讓 goroutine 之間相互通信。(在后續(xù)并發(fā)章節(jié)會(huì)詳細(xì)講解)

每個(gè)通道都有與其相關(guān)的類型。該類型是通道允許傳輸?shù)臄?shù)據(jù)類型。

聲明通道

和聲明一個(gè)變量一樣,語法如下:

// 聲明通道
var <通道名稱> chan <數(shù)據(jù)類型>
// 創(chuàng)建通道:如果通道為nil(就是不存在),就需要先創(chuàng)建通道
<通道名稱> = make(chan <數(shù)據(jù)類型>)

也可以簡(jiǎn)化聲明為:

<通道名稱> := make(chan <數(shù)據(jù)類型>)

示例如下:

package main

import “fmt”

func main() {
// 通道
var c chan int
if c == nil {
fmt.Println(“通道c是nil的, 不能使用,需要先創(chuàng)建通道?!?
c = make(chan int)
fmt.Printf(“c的數(shù)據(jù)類型是:%T”, c)
}
}

輸出結(jié)果如下:

通道c是nil的, 不能使用,需要先創(chuàng)建通道。
c的數(shù)據(jù)類型是:chan int

2.5 切片(slice)

Go 語言切片是對(duì)數(shù)組的抽象。

Go 數(shù)組的長(zhǎng)度不可改變,在特定場(chǎng)景中這樣的集合就不太適用,Go 中提供了一種靈活,功能強(qiáng)悍的內(nèi)置類型切片(“動(dòng)態(tài)數(shù)組”),與數(shù)組相比切片的長(zhǎng)度是不固定的,可以追加元素,在追加時(shí)可能使切片的容量增大。

切片定義

使用一個(gè)未指定大小的數(shù)組來定義切片:

var <變量名> []<數(shù)據(jù)類型>

或使用 make() 函數(shù)創(chuàng)建切片:

var <變量名> []<數(shù)據(jù)類型> = make([]<數(shù)據(jù)類型> len)

<變量名> := make([]<數(shù)據(jù)類型> len)

也可以指定容量,其中 capacity 為可選參數(shù):

make([]T, length, capacity)

這里的length是數(shù)組的長(zhǎng)度也是切片的初始長(zhǎng)度。

切片初始化

直接初始化切片,[] 表示是切片類型,{1,2,3} 初始化值依次是 1,2,3,其 cap=len=3:

s :=[] int {1,2,3 }

初始化切片 s,是數(shù)組 arr 的引用:

s := arr[:]

將 arr 中從下標(biāo) startIndex 到 endIndex-1 下的元素創(chuàng)建為一個(gè)新的切片:

s := arr[startIndex:endIndex]

默認(rèn) startIndex 時(shí)將表示一直到arr的最后一個(gè)元素:

s := arr[startIndex:]






默認(rèn) endIndex 時(shí)將表示從 arr 的第一個(gè)元素開始。

s := arr[:endIndex]

通過切片 s 初始化切片 s1。

s1 := s[startIndex:endIndex]

通過內(nèi)置函數(shù) make() 初始化切片 s,[]int 標(biāo)識(shí)為其元素類型為 int 的切片:

s :=make([]int,len,cap)

2.6 函數(shù)

函數(shù)是基本的代碼塊,用于執(zhí)行一個(gè)任務(wù)。

Go 語言最少有個(gè) main() 函數(shù)。

你可以通過函數(shù)來劃分不同功能,邏輯上每個(gè)函數(shù)執(zhí)行的是指定的任務(wù)。

函數(shù)聲明告訴了編譯器函數(shù)的名稱,返回類型,和參數(shù)。

Go 語言標(biāo)準(zhǔn)庫提供了多種可動(dòng)用的內(nèi)置的函數(shù)。例如,len()函數(shù)可以接受不同類型參數(shù)并返回該類型的長(zhǎng)度。如果我們傳入的是字符串則返回字符串的長(zhǎng)度,如果傳入的是數(shù)組,則返回?cái)?shù)組中包含的元素個(gè)數(shù)。

函數(shù)定義

Go 語言函數(shù)定義格式如下:

func function_name( ) <return_types> {
函數(shù)體
}


func:函數(shù)由 func 開始聲明
function_name:函數(shù)名稱,函數(shù)名和參數(shù)列表一起構(gòu)成了函數(shù)簽名。
parameter list:參數(shù)列表,參數(shù)就像一個(gè)占位符,當(dāng)函數(shù)被調(diào)用時(shí),你可以將值傳遞給參數(shù),這個(gè)值被稱為實(shí)際參數(shù)。參數(shù)列表指定的是參數(shù)類型、順序、及參數(shù)個(gè)數(shù)。參數(shù)是可選的,也就是說函數(shù)也可以不包含參數(shù)。
return_types:返回類型,函數(shù)返回一列值。return_types 是該列值的數(shù)據(jù)類型。有些功能不需要返回值,這種情況下 return_types 不是必須的。
函數(shù)體:函數(shù)定義的代碼集合。

示例如下:

package main

import “fmt”

func main() {
fmt.Print(max(10, 7))
}

// 獲取兩數(shù)的最大值
func max(num1, num2 int) int {
if num1 > num2 {
return num1
} else {
return num2
}
}

輸出結(jié)果如下:

10

與其他語言不同的是,Go語言的函數(shù)可以返回多個(gè)值。

示例如下:

package main

import “fmt”

func main() {
x, y := swap(“xcbeyond”, “Niki”)
fmt.Println(x, y)
}

// 交換兩個(gè)字符串
func swap(x, y string) (string, string) {
return y, x
}

輸出結(jié)果如下:

Niki xcbeyond

2.7 接口(interface)

Go 語言提供了另外一種數(shù)據(jù)類型即接口,它把所有的具有共性的方法定義在一起,任何其他類型只要實(shí)現(xiàn)了這些方法就是實(shí)現(xiàn)了這個(gè)接口。
2.8 Map

Map 是一種無序的鍵值對(duì)的集合。Map 最重要的一點(diǎn)是通過key 來快速檢索數(shù)據(jù),key 類似于索引,指向數(shù)據(jù)的值。

Map 是一種集合,所以我們可以像迭代數(shù)組和切片那樣迭代它。不過,Map 是無序的,我們無法決定它的返回順序,這是因?yàn)?Map 是使用 hash 表來實(shí)現(xiàn)的。

Map定義

可以使用內(nèi)建函數(shù) make() ,也可以使用 map 關(guān)鍵字來定義 Map:

// 聲明變量,默認(rèn)map是nil
var map_variable map[key_data_type]value_data_type

// 使用make
map_variable := make(map[key_data_type]value_data_type)

示例如下:

package main

import (
“fmt”
)

func main() {
// Map
personMap := make(map[string]string)
personMap[“zhangsan”] = “張三”
personMap[“l(fā)isi”] = “李四”
personMap[“wanger”] = “王二”
personMap[“zhaowu”] = “趙五”
for p := range personMap {
fmt.Println(p, “的中文名是”, personMap[p])
}
}

輸出結(jié)果如下:

zhangsan 的中文名是 張三
lisi 的中文名是 李四
wanger 的中文名是 王二
zhaowu 的中文名是 趙五

3、其他
3.1 數(shù)據(jù)類型轉(zhuǎn)換

面對(duì)不同的數(shù)據(jù)類型,尤其是基本數(shù)據(jù)類型,在必要的情況下,一個(gè)類型的值是可以被轉(zhuǎn)換為另外一個(gè)可被轉(zhuǎn)換的類型。

不同于其他語言,Go 語言不存在隱式類型轉(zhuǎn)換,所有的類型轉(zhuǎn)換都必須是顯示的轉(zhuǎn)換:

類型B的值 = 類型B(類型A的值)

類型轉(zhuǎn)換只能在定義正確的情況下才能轉(zhuǎn)換成功,例如從一個(gè)取值范圍較小的類型轉(zhuǎn)換到一個(gè)取值范圍較大的類型(將 int16 轉(zhuǎn)換為 int32)。當(dāng)從一個(gè)取值范圍較大的類型轉(zhuǎn)換到取值范圍較小的類型時(shí)(將 int32 轉(zhuǎn)換為 int16 或?qū)?float32 轉(zhuǎn)換為 int),會(huì)發(fā)生精度丟失(截?cái)啵┑那闆r。

換言之,類型轉(zhuǎn)換只能從低精度向高精度轉(zhuǎn)換,否則將會(huì)存在精度丟失。

示例如下:

package main

import (
“fmt”
)

func main() {
// 類型轉(zhuǎn)換
var i16 int16 = 10000
i32 := int32(i16)
fmt.Print(i32)
}

3.2 類型別名

類型別名是 Go 1.9 版本添加的新功能,**主要用于解決代碼升級(jí)、遷移中存在的類型兼容性問題。**在 C/C++語言中,代碼重構(gòu)升級(jí)可以使用宏快速定義一段新的代碼,Go語言中沒有選擇加入宏,而是解決了重構(gòu)中最麻煩的類型名變更問題。

在 Go 1.9 版本之前定義內(nèi)建類型的代碼是這樣寫的:

type byte uint8
type rune int32

而在 Go 1.9 版本之后變?yōu)椋?/p>

type byte = uint8
type rune = int32

類型別名定義

定義類型別名的寫法為:

type TypeAlias = Type

TypeAlias 只是 Type 的別名,本質(zhì)上 TypeAlias 與 Type 是同一個(gè)類型,就像一個(gè)孩子小時(shí)候有小名、乳名,上學(xué)后用學(xué)名,英語老師又會(huì)給他起英文名,但這些名字都指的是他本人。

注意:類型別名與類型定義表面上只有一個(gè)等號(hào)的差異,那么它們之間實(shí)際的區(qū)別有哪些呢?通過下面的示例代碼來理解。

示例如下:

package main

import “fmt”

// 定義int類型的變量為NewInt
type NewInt int

// 定義int類型的別名IntAlias
type IntAlias = int

func main() {
var a NewInt
fmt.Printf(“a type:%T\n”, a)

var a2 IntAlias
fmt.Printf("a2 type:%T\n", a2)

}

輸出結(jié)果如下:

a type:main.NewInt
a2 type:int

4、小結(jié)

本文主要講解Go語言中存在哪些數(shù)據(jù)類型,讓你對(duì)所有數(shù)據(jù)類型有個(gè)整體的認(rèn)識(shí),學(xué)會(huì)對(duì)它們的基本使用(定義、初始化等)。從上面的學(xué)習(xí)中,你會(huì)發(fā)現(xiàn)Go語言相比其他語言是更加的靈活,彌補(bǔ)了其他語言數(shù)據(jù)類型的一些缺失、不便等。