常數宣告的方式與 var 的宣告方式相似,一般來說在定義常數時,變數字首會用大寫表示,若由多個字組成時,會用駝峰式命名,例如光速 (speed of light) 可定義為 LightSpeed
cosnt(
Pi = 3.14
Gravity = 9.8
LightSpeed = 300000000
// 在golang中以x為底的n次方表示為math.Pow(x, n),數學表達式為x^n
// 但若是用LightSpeed = 3 * math.Pow(10, 8)
// 會出現以下錯誤math.Pow(10, 8) (value of type float64) is not constant
// 因此在定義前先算完後直接寫成定值
)
在 x 的 n 次方情況下,一般會使用 math.Pow(x, n),但若遇到2的n次方時,也可以用其他的表達方式,透過 num << n 或是 num >> n 來表達 num * 2^n 或 num / 2^n ,分別為左移與右移 n 位,但這僅限用於 2^n 時可使用,也就是2進制的運算
func main() {
multipliedBy8 := 3 << 3 // 24 (3 * 2^3 = 3 * 8 = 24)
dividedBy8 := 16 >> 3 // 2 (16 / 2^3 = 16 / 8 = 2)
}
go 語言實際上沒有 enum 型別,但可透過定義 常數(constant) 與 iota(自增值) 來模擬。 enum 的使用時機通常是為了管理多個同系列的常數,做為狀態的判斷所使用,並且提高程式的可讀性。
const (
Black = iota // 0
Red // 1
Yellow // 2
Green // 3
)
在 go 語言中,if的寫法與其他程式語言類似,就不詳細說明,寫法如下
func main() {
var n int // var n = ? (?的部份可自行定義)
if n == 1 {
fmt.Println("Traffic lights are now red")
} else if n == 2 {
fmt.Println("Traffic lights are now yellow")
} else if n == 3 {
fmt.Println("Traffic lights are now green")
} else {
fmt.Println("Traffic lights are now black")
}
}
與上述例子 if 對應的 switch 用法如下,比較特別的是相較於 c++ ,在 go 中的 case 不用在每個 case 後面加 break ,進入到相對應的 case 後,執行完該 case 就會跳出 switch ,不會執行其他的 case
func main() {
var n int // var n = ? (?的部份可自行定義)
switch n {
case 1:
fmt.Println("Traffic lights are now red")
case 2:
fmt.Println("Traffic lights are now yellow")
case 3:
fmt.Println("Traffic lights are now green")
default:
fmt.Println("Traffic lights are now black")
}
}
上面有提到 enum 的目的是為了增加程式的可讀性,可閱讀下面的範例,感受一下其中的差異
func main() {
var n = 1
switch n {
case 1:
fmt.Println("Traffic lights are now red")
case 2:
fmt.Println("Traffic lights are now yellow")
case 3:
fmt.Println("Traffic lights are now green")
default:
fmt.Println("Traffic lights are now black")
}
// 結果為: Traffic lights are now red
}
上面是沒有用 enum 的範例,下面是使用 enum 的例子
const (
Black = iota // 0
Red // 1
Yellow // 2
Green // 3
)
func main() {
var n = Red
switch n {
case Red:
fmt.Println("Traffic lights are now red")
case Yellow:
fmt.Println("Traffic lights are now yellow")
case Green:
fmt.Println("Traffic lights are now green")
default:
fmt.Println("Traffic lights are now black")
}
// 結果也是: Traffic lights are now red
// 但可讀性明顯提升許多,在撰寫程式碼時也比較不容易出錯
}
https://github.com/luckyuho/ithome30-golang/tree/main/day02