淺析Go語(yǔ)言的數(shù)據(jù)類型及數(shù)組
Go語(yǔ)言身世簡(jiǎn)介
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開(kāi)發(fā)的一種靜態(tài)強(qiáng)類型、編譯型語(yǔ)言。Go 語(yǔ)言語(yǔ)法與 C 相近,但功能上有:內(nèi)存安全,GC(垃圾回收),結(jié)構(gòu)形態(tài)及 CSP-style 并發(fā)計(jì)算。
Go語(yǔ)言的第一個(gè)程序
我們使用的IDE工具為GoLand(沒(méi)錯(cuò),又是Jetbrains家的產(chǎn)物,我是重度愛(ài)好者),在寫Go程序之前,我們首先得配置好Go語(yǔ)言的開(kāi)發(fā)環(huán)境,這里就不做贅述,相信憑借各位的能力,一定能夠沒(méi)問(wèn)題
package main
?
import "fmt"
?
func main() {
fmt.Println(123456)
}這里是Go語(yǔ)言的第一個(gè)程序,我們把這個(gè)程序拆分下來(lái)細(xì)看一下
首先是package,相信有語(yǔ)言基礎(chǔ)的同學(xué)都能夠明白這個(gè)是包的意思,我們導(dǎo)入的是main的包,讀者可以理解為一種約定俗成,沒(méi)有main的話,你的Go程序會(huì)出現(xiàn)奇奇怪怪的問(wèn)題
其次,是import,這里指的是導(dǎo)入的意思,我們導(dǎo)入了fmt這個(gè)庫(kù),經(jīng)過(guò)求證,fmt該庫(kù)是用來(lái)格式化輸入輸出,也就是我們所說(shuō)的java中的System.out.println();或者是JavaScript中的console.log(),這么一說(shuō),相信大家也不陌生
Go語(yǔ)言的數(shù)據(jù)類型
在介紹數(shù)據(jù)類型之前,想為讀者介紹的是,Go語(yǔ)言是沒(méi)有以分號(hào)結(jié)尾的這個(gè)習(xí)慣,而且是先聲明var類型(一般情況下都是var類型的數(shù)據(jù)),緊接著聲明變量名和數(shù)據(jù)類型
var name string var age int var sex bool
同時(shí)我們還加入了一種懶人寫法,想到這里大家可能就想到了結(jié)構(gòu)體,將同種聲明含義的變量放到一個(gè)大括號(hào)里面,沒(méi)錯(cuò),在Go語(yǔ)言中也能過(guò)實(shí)現(xiàn)這一操作
var (
name string
age int
sex bool
pwd float32
)這么一看,似乎下面的方法要高效的多
Go語(yǔ)言匿名變量
很多小伙伴第一次看到這個(gè)匿名變量,有點(diǎn)發(fā)懵。其實(shí)可以這么理解,匿名變量顧名思義,就是不想讓人知道,在Go語(yǔ)言中我們可以用_來(lái)代替,要注意的是:匿名變量不占用命名空間,不會(huì)分配內(nèi)存
func foo() (int, string) {
? ?return 10, "Q1mi"
}
func main() {
? ?x, _ := foo()
? ?_, y := foo()
? ?fmt.Println("x=", x)
? ?fmt.Println("y=", y)
}
在這個(gè)代碼塊中我們可以看到,我們定義了一個(gè)foo方法用于保存相關(guān)參數(shù),第一個(gè)參數(shù)類型為int,第二個(gè)參數(shù)類型為string;緊接著我們?cè)?code>main方法中,使用匿名變量去調(diào)用foo方法,為了體現(xiàn)差異,我們進(jìn)行二次方法調(diào)用,最后輸出的結(jié)果顯而易見(jiàn)(寫上方的demo是為了驗(yàn)證匿名變量的使用)
Go語(yǔ)言的數(shù)據(jù)類型
iota是go語(yǔ)言的常量計(jì)數(shù)器,它只能在常量的表達(dá)式中使用(作者覺(jué)得這一點(diǎn)非常的人性化,因?yàn)橐酝?code>java中,這一功能需要聲明一個(gè)變量+for循環(huán)才能實(shí)現(xiàn),go語(yǔ)言yyds! )
貼一張從Google找的圖片,請(qǐng)讀者自行查閱數(shù)據(jù)類型及其所對(duì)應(yīng)的范圍
| 類型 | 長(zhǎng)度(字節(jié)) | 默認(rèn)值 | 說(shuō)明 |
|---|---|---|---|
| bool | 1 | false | |
| byte | 1 | 0 | uint8 |
| rune | 4 | 0 | Unicode Code Point, int32 |
| int, uint | 4或8 | 0 | 32 或 64 位 |
| int8, uint8 | 1 | 0 | -128 ~ 127, 0 ~ 255,byte是uint8 的別名 |
| int16, uint16 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
| int32, uint32 | 4 | 0 | -21億~ 21億, 0 ~ 42億,rune是int32 的別名 |
| int64, uint64 | 8 | 0 | |
| float32 | 4 | 0.0 | |
| float64 | 8 | 0.0 | |
| complex64 | 8 | ||
| complex128 | 16 | ||
| uintptr | 4或8 | 以存儲(chǔ)指針的 uint32 或 uint64 整數(shù) | |
| array | 值類型 | ||
| struct | 值類型 | ||
| string | “” | UTF-8 字符串 | |
| slice | nil | 引用類型 | |
| map | nil | 引用類型 | |
| channel | nil | 引用類型 | |
| interface | nil | 接口 | |
| function | nil | 函數(shù) |
至于讀者想問(wèn)的字符串轉(zhuǎn)化、轉(zhuǎn)義字符這些問(wèn)題,作者并沒(méi)有給出詳細(xì)的介紹,因?yàn)檫@些相關(guān)介紹讀者都是能夠直接在網(wǎng)上查閱到的,在此不作贅述
Go語(yǔ)言中的數(shù)組
今天作者花了大量的時(shí)間來(lái)學(xué)習(xí)Go語(yǔ)言,其中有一半的時(shí)間都花在了數(shù)組上面
首先我們來(lái)看Go語(yǔ)言文檔中對(duì)于數(shù)組的定義
1. 數(shù)組:是同一種數(shù)據(jù)類型的固定長(zhǎng)度的序列。
2. 數(shù)組定義:var a [len]int,比如:var a [5]int,數(shù)組長(zhǎng)度必須是常量,且是類型的組成部分。一旦定義,長(zhǎng)度不能變。
3. 長(zhǎng)度是數(shù)組類型的一部分,因此,var a[5] int和var a[10]int是不同的類型。
4. 數(shù)組可以通過(guò)下標(biāo)進(jìn)行訪問(wèn),下標(biāo)是從0開(kāi)始,最后一個(gè)元素下標(biāo)是:len-1
很多讀者反應(yīng):你給我們看這些也沒(méi)用啊,沒(méi)有實(shí)際的例子我們看不懂?。?!
一維數(shù)組
func main() {
a := [3]int{1, 2}
b := [...]int{1, 2, 3, 4}
c := [5]int{2: 100, 4: 100}
d := [2]struct {
name string
age ?uint8
}{
{"user1", 10},
{"user2", 20},
}
fmt.Println(a, b, c, d)
}對(duì)于上方代碼,我們做出如下的詳細(xì)解析
- 首先我們可以看到
a變量開(kāi)拓了一個(gè)數(shù)組長(zhǎng)度為3的變量,但是只聲明了2個(gè)變量,還有一個(gè)變量未進(jìn)行變量初始化,在Go語(yǔ)言中,我們將未定義的數(shù)組的初始化變量為0 - 其次我們可以看到
b變量開(kāi)拓了一個(gè)任意長(zhǎng)度的數(shù)組,同時(shí)進(jìn)行相應(yīng)的賦值操作,在Go語(yǔ)言中,如果我們不確定數(shù)組的長(zhǎng)度,我們就可以使用...來(lái)代替數(shù)組的長(zhǎng)度,類似于一種動(dòng)態(tài)數(shù)組 - 緊接著我們可以看到
c變量比較特殊,在變量里面聲明了相關(guān)數(shù)值,c數(shù)組里面的第一個(gè)2是代表從第三個(gè)開(kāi)始輸出100,4同理 - 最后數(shù)組d采用結(jié)構(gòu)體的形式,在結(jié)構(gòu)體之前聲明該結(jié)構(gòu)體所需的容量
這里就有小伙伴要問(wèn)了,能不能使用...來(lái)代替結(jié)構(gòu)體前面的數(shù)字,作者給出的答復(fù)是:可以但沒(méi)必要;因?yàn)槟阆旅娴睦ㄌ?hào)里面要聲明具體的數(shù)據(jù)類型所對(duì)應(yīng)的值,你既然能夠知道具體有幾個(gè)數(shù)來(lái)對(duì)應(yīng)數(shù)據(jù)類型,又何必使用...來(lái)代替呢?
二維數(shù)組
func main() {
a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
b := [...][2]int{{1, 1}, {2, 2}, {3, 3}}
fmt.Println(arr0, arr1)
fmt.Println(a, b)
}對(duì)于上方代碼,我們做出如下的詳細(xì)解析
- 首先我們可以看到
a數(shù)組定義了一個(gè)長(zhǎng)2寬3的數(shù)組,第一個(gè)數(shù)組里面存放的是123,第二個(gè)數(shù)組里面存放的是456,相信這一步對(duì)絕大部分讀者來(lái)說(shuō)并無(wú)異議 - 其次,我們可以看到的是,在b數(shù)組中,我們使用
...來(lái)自定義數(shù)組長(zhǎng)度,這一點(diǎn)有效的解決了動(dòng)態(tài)數(shù)組容量的問(wèn)題。值得一提的是,在二維數(shù)組里面,我們不能將第二個(gè)維度的數(shù)組設(shè)置成...,否則數(shù)組的長(zhǎng)度及定義就會(huì)出現(xiàn)歧義,具體原因讀者自行想象
到此這篇關(guān)于淺析Go語(yǔ)言的數(shù)據(jù)類型及數(shù)組的文章就介紹到這了,更多相關(guān)Go 數(shù)據(jù)類型 數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Go語(yǔ)言基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類型知識(shí)鞏固
- 夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總
- 淺析Go常量為什么只支持基本數(shù)據(jù)類型
- Go語(yǔ)言數(shù)據(jù)類型簡(jiǎn)單介紹
- 深入了解Golang中的數(shù)據(jù)類型
- Golang數(shù)據(jù)類型比較詳解
- Go語(yǔ)言中的基礎(chǔ)數(shù)據(jù)類型使用實(shí)例
- 重學(xué)Go語(yǔ)言之基礎(chǔ)數(shù)據(jù)類型詳解
- Go語(yǔ)言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解
- Go基本數(shù)據(jù)類型的具體使用
相關(guān)文章
Golang 端口復(fù)用測(cè)試的實(shí)現(xiàn)
這篇文章主要介紹了Golang 端口復(fù)用測(cè)試的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
golang原生http包實(shí)現(xiàn)各種情況的get請(qǐng)求方式
這篇文章主要介紹了golang原生http包實(shí)現(xiàn)各種情況的get請(qǐng)求方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Go語(yǔ)言安裝和GoLand2021最全超詳細(xì)安裝教程
Go語(yǔ)言和GoLand的關(guān)系好比于java和idea、python和pycharm,因此我們需要先安裝好Go語(yǔ)言后才能安裝GoLand。它的安裝和java,python的安裝大同小異,好了,下面給大家?guī)?lái)了GoLand2021安裝教程,需要的朋友參考下吧2021-08-08
golang解析json數(shù)據(jù)的4種方法總結(jié)
在日常工作中每一名開(kāi)發(fā)者,不管是前端還是后端,都經(jīng)常使用 JSON,下面這篇文章主要給大家介紹了關(guān)于golang解析json數(shù)據(jù)的4種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Golang 讀取并解析SQL文件的實(shí)現(xiàn)方法
本文介紹了如何使用Go語(yǔ)言編寫一個(gè)簡(jiǎn)單的函數(shù),用于讀取并解析SQL文件,通過(guò)一個(gè)函數(shù),我們可以輕松地將SQL文件中的語(yǔ)句提取出來(lái),進(jìn)行后續(xù)的操作,感興趣的朋友跟隨小編一起看看吧2024-12-12

