[Golang] 變數宣告(variables)
Basic Go Type
Go 屬於強型別(Static Types)的語言,其中常見的基本型別包含 bool
, string
, int
, float64
, map
。
變數宣告時變數名稱放前面 變數型別放後面
定義變數:
- 使用
:=
- 使用
var
// 讓 go 自動推論 price 的型別
var price = 3000 // 不常用,比較常用 :=
price := 3000 // 建議使用
// 如果希望指定明確的型別可以使用 type annotation
// var <name> <type> = <value>
var price float64 = 3000;
// 同時建立宣告多個變數
height, weight := 170.0, 70.0
var height, weight float64 = 170, 70
定義常數:
- 使用
const
const ageOfAdult = 18
第一種宣告方式(最常用):short declaration
使用 :=
宣告,表示之前沒有進行宣告過。這是在 go 中最常使用的變數宣告的方式,因為它很簡潔。但因為在 package scope 的變數都是以 keyword 作為開頭,因此不能使用縮寫的方式定義變數(foo := bar
),只能在 function 中使用,具有區域性(local variable):
// 第一種宣告方式
function main() {
foo := "Hello"
bar := 100
// 也可以簡寫成
foo, bar := "Hello", 100
}
// 等同於
function main() {
var foo string
foo = "Hello"
}
第二種宣告方式:variable declaration
使用時機主要是:
- 當你不知道變數的起始值
- 需要在 package scope 宣告變數
- 當為了程式的閱讀性,將變數組織在一起時
⚠️ 留意:在 package scope 宣告的變數會一直保存在記憶體中,直到程式結束才被釋放,因此應該減少在 package scopes 宣告變數
// 第二種宣告方式,在 main 外面宣告(全域變數),並在 main 內賦值
var foo string
var bar int
// 可以簡寫成
var (
foo string
bar int
)
function main() {
foo = "Hello"
bar = 100
}
⚠️ 不建議把變數宣告在全域環境。
如果 變數型別一樣的話,也可以簡寫成這樣:
func main() {
var c, python, java bool
fmt.Println(c, python, java)
}
第三種宣告方式
直接宣告並賦值:
// 第三種宣告方式,直接賦值
var (
foo string = "Hello"
bar int = 100
)
兩種方式是一樣的
下面這兩種寫法是完全一樣的:
var <name> <type> = <value>
<name> := <value>
// var card string = "Ace of Spades"
card := "Ace of Spades"
// var pi float = 3.14
pi := 3.14
只有在宣告變數的時候可以使用 :=
的寫法,如果要重新賦值的話只需要使用 =
。
注意事項
錯誤:重複宣告變數
// 錯誤:重複宣告變數
paperColor := "Green"
paperColor := "Blue"
正確:我們可以在 main 函式外宣告變數,但無法在 main 函式外賦值
// 正確:我們可以在 main 函式外宣告變數,但無法在 main 函式外賦值
package main
import "fmt"
var deckSize int
func main() {
deckSize = 50
fmt.Println(deckSize)
}
錯誤:無法在 main 函式外賦值
// 錯誤:但無法在 main 函式外賦值
package main
import "fmt"
// syntax error: non-declaration statement outside function body
deckSize := 20
func main() {
fmt.Println(deckSize)
}
錯誤:變數需要先宣告完才能使用
// 錯誤:變數需要先宣告完才能使用
package main
import "fmt"
func main() {
deckSize = 52 // undefined: deckSize
fmt.Println(deckSize) // undefined: deckSize
}
常數(constant)
keywords: iota
使用 :=
或 var
所宣告的會是變數,若需要宣告常數,需要使用 const
:
const (
Monday = 1
Tuesday = 2
Wednesday = 3
// ...
)
// 可以簡寫成
// iota 預設從 0 開始,後面的變數自動加一
const (
Monday = iota + 1
Tuesday
Wednesday
// ...
)
參考
- Go 語言基礎實戰 (開發, 測試及部署) @ Udemy by Bo-Yi Wu
- Go (Golang): The Complete Bootcamp @ Udemy by Jose Portilla
- Go: The Complete Developer's Guide (Golang) @ Udemy by Stephen Grider