Go語(yǔ)言基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類(lèi)型知識(shí)鞏固
前言
快速上手一門(mén)新的語(yǔ)言,首先要做的就是熟悉新語(yǔ)言的基本語(yǔ)法和基本數(shù)據(jù)類(lèi)型,本文將對(duì) Go 語(yǔ)言的基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類(lèi)型進(jìn)行介紹。
Hello,World!
記得當(dāng)初學(xué)習(xí) C 語(yǔ)言的時(shí)候,第一個(gè)演示程序是輸出 Hello World!
,Go 官網(wǎng)的第一個(gè)案例也是輸出 Hello,World!
。
package main // 包聲明 import "fmt" // 包導(dǎo)入 // func 函數(shù)關(guān)鍵字 func main() { fmt.Println("Hello,World!") }
從 Hello,World!
輸出案例可知:
- 聲明包的關(guān)鍵字是
package
; - 導(dǎo)包的關(guān)鍵字是
import
; - 使用包里面的函數(shù)以
包名.函數(shù)
這種格式進(jìn)行; - 函數(shù)的聲明關(guān)鍵字是
func
。
有關(guān) main 函數(shù)的一些要點(diǎn)
1、`main` 函數(shù)必須在 `main` 包里。
2、當(dāng) `main` 函數(shù)所在的文件被命名為 `main.go` 時(shí),可以直接使用 `go run ./main.go` 命令直接運(yùn)行程序。
3、當(dāng) `main` 函數(shù)所在的文件名字不為 `main.go`,需要分以下兩種情況,假設(shè)所在文件的名字為 `a.go`。
當(dāng) a.go
文件里沒(méi)有引用其他文件的變量等元素時(shí),可以直接使用 go run ./a.go
運(yùn)行。
package main // 包聲明 import "fmt" // 包導(dǎo)入 // func 函數(shù)關(guān)鍵字 func main() { fmt.Println("Hello,World!") }
運(yùn)行文件
D:\go_projects\src\go_basic> go run .\main.go
Hello,World!
當(dāng) a.go
文件里有引用其他文件的變量等元素時(shí),需要先使用 go build ./a.go ./b.go
生成可執(zhí)行文件,再運(yùn)行 exe
可執(zhí)行文件。
package main // a.go 文件 import "fmt" func main() { fmt.Println(name) }
package main // b.go 文件 var name string = "cmy"
直接運(yùn)行文件會(huì)報(bào)錯(cuò)
D:\go_projects\src\go_basic> go run .\a.go # command-line-arguments .\a.go:6:14: undefined: name
正確的運(yùn)行方式
D:\go_projects\src\go_basic> go build .\a.go .\b.go D:\go_projects\src\go_basic> ls 目錄: D:\go_projects\src\go_basic Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022-11-23 1:39 .idea -a---- 2022-11-23 2:03 1950720 a.exe -a---- 2022-11-23 1:50 63 a.go -a---- 2022-11-23 1:52 38 b.go -a---- 2022-11-23 1:57 127 main.go D:\go_projects\src\go_basic> .\a.exe cmy
關(guān)鍵字
除了上面提到的幾個(gè)關(guān)鍵字以外,Go 語(yǔ)言還有其他關(guān)鍵字,一共 25 個(gè)關(guān)鍵字。
package
聲明
語(yǔ)法格式: package xxx
。
package main
包名字由英文或英文與下劃線組合組成。
注意點(diǎn):
包聲明時(shí)名字可以和文件夾的命名不一樣。
同一個(gè)文件夾內(nèi),每個(gè) Go 文件的包聲明必須一致,否則會(huì)報(bào)錯(cuò)。
package hello // a.go 文件
package hello // b.go 文件
引入
包的引入方式:import [alias] xxx,alice 是一個(gè)可選值,為包起別名。
import "fmt" import f "fmt" // 起別名
注意點(diǎn):
引入包而沒(méi)有使用,會(huì)報(bào)錯(cuò)。
匿名引入:
import _ "fmt" // 起別名
一般匿名引入,是為了使用包里面的 init
函數(shù),它先于 main
函數(shù)之前執(zhí)行-
func init() { }
基本數(shù)據(jù)類(lèi)型
Go 語(yǔ)言中的數(shù)據(jù)類(lèi)型有很多,除了本文介紹的基本數(shù)據(jù)類(lèi)型以外,還有指針、數(shù)組、結(jié)構(gòu)體 struct
、管道 channel
、函數(shù) func
、切片
整形數(shù)據(jù)類(lèi)型
有符號(hào)整數(shù)類(lèi)型
類(lèi)型 | 占用存儲(chǔ)空間 | 表數(shù)范圍 |
---|---|---|
int8 | 1字節(jié) | -2^7 ~ 2^7-1 (-128-127) |
int16 | 2字節(jié) | -2^15 ~ 2^15-1 (-32768-32767) |
int32 | 4字節(jié) | -2^31 ~ 2^31-1 (-2147483648-2147483647) |
int64 | 8字節(jié) | -2^63 ~ 2^63-1 |
無(wú)符號(hào)整數(shù)類(lèi)型
類(lèi)型 | 占用存儲(chǔ)空間 | 表數(shù)范圍 |
---|---|---|
uint8 | 1字節(jié) | 0~255 |
uint16 | 2字節(jié) | 0~2^16-1 |
uint32 | 4字節(jié) | 0~2^31-1 |
uint64 | 8字節(jié) | 0~2^63-1 |
其他整數(shù)類(lèi)型
類(lèi)型 | 有無(wú)符號(hào) | 占用存儲(chǔ)空間 | 表數(shù)范圍 |
---|---|---|---|
int | 有 | 32位系統(tǒng)-4字節(jié), 64位系統(tǒng)-8字節(jié) | -2^31 ~ 2^31-1, -2^63 ~ 2^63-1 |
uint | 無(wú) | 32位系統(tǒng)-4字節(jié), 4位系統(tǒng)-8字節(jié) | 0 ~ 2^31-1, 0~2^64-1 |
rune | 有 | 等價(jià) int32 | -2^31 ~ 2^31-1 |
byte | 無(wú) | 等價(jià) unint8 | 0~255 |
浮點(diǎn)數(shù)據(jù)類(lèi)型
類(lèi)型 | 占用存儲(chǔ)空間 | 表數(shù)范圍 |
---|---|---|
float32 | 4字節(jié) | -3.403E38~3.403E38 |
float64 | 8字節(jié) | -1.798E308~1.798E308 |
字符類(lèi)型
- Go 沒(méi)有字符類(lèi)型,如果要存單個(gè)字符(字母),可使用
byte
類(lèi)型代替。 - Go 中字符使用
UTF-8
編碼。
布爾類(lèi)型
- 布爾類(lèi)型在 Go 中對(duì)應(yīng)
bool
類(lèi)型,它只允許取值為true
和false
。 - 布爾類(lèi)型占 1 個(gè)字節(jié)。
- 布爾類(lèi)型適用于邏輯運(yùn)算,一般用于程序流程控制。
字符串類(lèi)型
- 字符串不可變(指的是其中字符的值不能變,例如
var name string = "cmy"
,然后操作name[0]='a'
是不行的)。 - 如果字符串中需要換行或者字符串較復(fù)雜,可以使用反引號(hào) ``。
基本數(shù)據(jù)類(lèi)型的默認(rèn)值
數(shù)據(jù)類(lèi)型 | 默認(rèn)值 |
---|---|
整數(shù)類(lèi)型 | 0 |
浮點(diǎn)類(lèi)型 | 0 |
布爾類(lèi)型 | false |
字符串類(lèi)型 | "" |
常量和變量聲明
常量聲明:const xxx type = value
const realName string = "chenmingyong" const Age int = 18
變量聲明:var xxx type = value
var realName string = "chenmingyong" var Age int = 18
在定義局部變量(方法或函數(shù)內(nèi)部的變量)時(shí),還可以使用 :=
去聲明,切記是局部變量,全局變量不能使用 :=
,否則會(huì)報(bào)錯(cuò)。
realName := "chenmingyong" Age := 18
Go 會(huì)使用類(lèi)型推斷來(lái)判斷類(lèi)型,數(shù)字會(huì)被理解為 int
或者 float64
,字符串會(huì)被理解為 string
。
注意點(diǎn):
- Go 推薦使用駝峰命名的方式。
- 常量被聲明后,后續(xù)的值不能被修改。
- 常量和變量的名字,首字母是否大寫(xiě),決定著它是否能夠被包外文件訪問(wèn),大寫(xiě)則可以被包外的 Go 文件訪問(wèn),小寫(xiě)則認(rèn)為是私有的,只能被包內(nèi)的 Go 文件訪問(wèn)。
- 變量聲明之后,沒(méi)有使用,編譯時(shí)會(huì)報(bào)錯(cuò)。
- 類(lèi)型不匹配不能被賦值。
- 同一個(gè)作用域下,變量只能聲明一次。
以上就是Go語(yǔ)言基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類(lèi)型知識(shí)鞏固的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言語(yǔ)法基本數(shù)據(jù)類(lèi)型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類(lèi)型梳理匯總
- 淺析Go常量為什么只支持基本數(shù)據(jù)類(lèi)型
- Go語(yǔ)言數(shù)據(jù)類(lèi)型簡(jiǎn)單介紹
- 深入了解Golang中的數(shù)據(jù)類(lèi)型
- Golang數(shù)據(jù)類(lèi)型比較詳解
- Go語(yǔ)言中的基礎(chǔ)數(shù)據(jù)類(lèi)型使用實(shí)例
- 重學(xué)Go語(yǔ)言之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解
- 淺析Go語(yǔ)言的數(shù)據(jù)類(lèi)型及數(shù)組
- Go語(yǔ)言中基本數(shù)據(jù)類(lèi)型的相互轉(zhuǎn)換詳解
- Go基本數(shù)據(jù)類(lèi)型的具體使用
相關(guān)文章
golang并發(fā)執(zhí)行的幾種方式小結(jié)
本文主要介紹了golang并發(fā)執(zhí)行的幾種方式小結(jié),主要包括了Channel,WaitGroup ,Context,使用這三種機(jī)制中的一種或者多種可以達(dá)到并發(fā)控制很好的效果,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08Golang 定時(shí)器(Timer 和 Ticker),這篇文章就夠了
這篇文章主要介紹了Golang 定時(shí)器(Timer 和 Ticker),這篇文章就夠了,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10詳解go程序如何在windows服務(wù)中開(kāi)啟和關(guān)閉
這篇文章主要介紹了一個(gè)go程序,如何在windows服務(wù)中優(yōu)雅開(kāi)啟和關(guān)閉,文中通過(guò)代碼示例和圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-07-07GO語(yǔ)言標(biāo)準(zhǔn)錯(cuò)誤處理機(jī)制error用法實(shí)例
這篇文章主要介紹了GO語(yǔ)言標(biāo)準(zhǔn)錯(cuò)誤處理機(jī)制error用法,實(shí)例分析了錯(cuò)誤處理機(jī)制的具體用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12