Go 語言入門基礎學習筆記之 Go 語言的基礎語法與數據類型
基礎語法#
Go 標記#
Go 程序可以由多個標記組成,可以是關鍵字,標識符,常量,字符串,符號。
行分隔符#
在 Go 程序中,一行代表一個語句結束。每個語句不需要像 C 家族中的其它語言一樣以分號 ;
結尾,因為這些工作都將由 Go 編譯器自動完成。
如果你打算將多個語句寫在同一行,它們則必須使用;人為區分,但在實際開發中並不鼓勵這種做法。
注釋#
// 單行注釋
/*
多行注釋 / 塊注釋
*/
與 C 語言一致。
標識符#
標識符用來命名變量、類型等程序實體。一個標識符實際上就是一個或是多個字母 (A~Z 和 a~z) 數字 (0~9)、下劃線_組成的序列,但是第一個字符必須是字母或下劃線而不能是數字。
這與大多數編程語言的規範一樣
比如,mahesh
、kumar
、abc
、move_name
、a_123
、myname50
、_temp
、j
、a23b9
、retVal
都是有效標識符。1ab
以數字開頭、case
關鍵字、a+b
其他字符等都是無效字符。
字符串拼接#
Go 語言的字符串連接可以通過 +
實現。
fmt.Println("Google" + "Runoob")
關鍵字#
Go 語言一共有 25 個關鍵字。
break | default | func | interface | select |
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
除此之外,Go 語言還有 36 個預定義標識符
append | bool | byte | cap | close | complex |
copy | false | float 32 | float 64 | imag | int |
int 32 | int 64 | iota | len | make | new |
println | real | recover | string | true | |
complex 64 | complex 128 | uint 16 | int 16 | uint 32 | uintptr |
panic | uint 8 | uint 64 | int 8 | uint | nil |
Go 語言中的空格#
在 Go 語言中,空格通常用於分隔標識符、關鍵字、運算符和表達式,以提高代碼的可讀性。
變量的聲明必須使用空格隔開
var x int
const Pi float64 = 3.14159265358979323846
變量與運算符之間推薦加入空格,程序看起來更加美觀
var z int = x + y
關鍵字和表達式之間必須使用空格隔開
if x > 0 {
// do something
}
在函數調用時,函數名和左邊等號之間要使用空格,參數之間也要使用空格
result := add(2, 3)
格式化字符串#
Go 語言中使用 fmt.Sprintf
或 fmt.Printf
格式化字符串並賦值給新串:
Sprintf
根據格式化參數生成格式化的字符串並返回該字符串。Printf
根據格式化參數生成格式化的字符串並寫入標準輸出。
package main
import (
"fmt"
)
func main() {
// %d 表示整型數字,%s 表示字符串
var stockcode=123
var enddate="2024-10-25"
var url="Code=%d&endDate=%s"
var target_url=fmt.Sprintf(url,stockcode,enddate)
fmt.Println(target_url)
fmt.Printf(url,stockcode,enddate)
}
// 輸出結果
Code=123&endDate=2024-10-25
Code=123&endDate=2024-10-25
補充:fmt 包中各種輸出方法的區別
fmt.Print
原樣輸出fmt.Printf
格式化輸出fmt.Println
各個值之間加空格,末尾加換行
Go 語言中還有一些內建函數,如
println()
和print()
,不屬於任何包,直接可以使用。只能簡單地輸出參數,不支持格式化,通常只用於簡單的調試目的。
println()
和print()
與 fmt 中的fmt.Println
和fmt.Print
區別一樣。
fmt.Print("go","python","php","javascript") // gopythonphpjavascript
fmt.Println("go","python","php","javascript") // go python php javascript
fmt.Printf("go %d", 1) // go 1
println("Hello Go!") // Hello Go!
數據類型#
數據類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。
Go 語言按類別分為以下幾種數據類型:
- 布爾類型:值只可以是常量 true 或者 false
- 數字類型:Go 語言支持整型和浮點型數字,並支持複數,其中位運算採用補碼
- 字符串型:Go 語言字符串是由單個字節連接起來的,字符串的字節使用 UTF-8 或 Unicode 編碼
- 派生類型:
- 指針 Pointer
- 陣列
- 結構化
- 通道 Channel
- 函數 Function
- 切片 Slice
- 接口
- 集合 Map
引用類型: 切片 Slice、指針、集合 Map、通道 Channel、函數
數字類型:
整型:Go 也有基於架構的類型,例如:int、uint 和 uintptr
類型 | 描述 |
---|---|
uint 8 | 無符號 8 位整型 (0 到 255) |
uint 16 | 無符號 16 位整型 (0 到 $2^{16}-1$) |
uint 32 | 無符號 32 位整型 (0 到 $2^{32}-1$) |
uint 64 | 無符號 64 位整型 (0 到 $2^{64}-1$) |
int 8 | 有符號 8 位整型 (-128 到 127) |
int 16 | 有符號 16 位整型 ($-2^{15}$ 到 $-2^{15}-1$) |
int 32 | 有符號 32 位整型 ($-2^{31}$ 到 $2^{31}-1$) |
int 64 | 有符號 64 位整型 ($-2^{63}$ 到 $2^{63}-1$) |
在 Go 中
int
是一個不定長的類型,取決於當前計算機的機器字長。如果當前計算機為 64 位,則int
類型也是 64 位,雖然你這與int64
的長度是一樣的,但是他們依舊是不同的兩種數據類型。
浮點型:
類型 | 描述 |
---|---|
float 32 | IEEE-754 32 位浮點數 |
float 64 | IEEE-754 64 位浮點數 |
complex 64 | 32 位實數和虛數 |
complex 128 | 64 位實數和虛數 |
其他數字類型:
類型 | 描述 |
---|---|
byte | 類似 uint 8 |
rune | 類似 int 32 |
uint | 32 或 64 位 |
int | 與 uint 一樣大小 |
uintptr | 無符號整型,用於存放一個指針 |
Go 語言可以通過格式化字符串
%T
打印出數據類型
fmt.Printf("type: %T\n", a)
浮點精度問題
浮點數計算輸出有一定的偏差,你也可以轉整型來設置精度。
package main
import (
"fmt"
)
func main() {
a := 1.69
b := 1.7
c := a * b // 結果應該是2.873
fmt.Println(c) // 輸出的是2.8729999999999998
}
設置精度
package main
import (
"fmt"
)
func main() {
a := 1690 // 表示1.69
b := 1700 // 表示1.70
c := a * b // 結果應該是2873000表示 2.873
fmt.Println(c) // 內部編碼
fmt.Println(float64(c) / 1000000) // 顯示
}