bool 只有 true 或 false.go 的 bool 跟數值 0 或 1 沒有間接的轉換,還有邏輯運算子 && 會比 || 先執行.
package main
import (
"fmt"
)
func main() {
fmt.Println(checkLetter('A')) // 1
fmt.Println(checkLetter(5)) // 0
}
func checkLetter(c byte) int {
if 'a' <= c && c <= 'z' ||
'A' <= c && c <= 'Z' {
return 1
} else {
return 0
}
}
string 是不可變的一系列位元組.由於不可變所以下面範例的 oldstr 還是原來的值
str := "hello, Daniel"
oldstr := str
str += " World"
fmt.Println(str) // hello, Daniel World
fmt.Println(oldstr) //hello, Daniel
子字串操作 s[i:j] 從原始字串的索引 i 到 j-1 的位元組.
str := "hello, Daniel"
fmt.Println(len(str)) // 13
fmt.Println(str[0]) // 104
fmt.Println(str[len(str)-1]) // 108
fmt.Println(str[0:5]) // hello
fmt.Println(str[7:]) // Daniel
fmt.Println(str[:]) // hello, Daniel
string 可加入跳脫字元例如要加上雙引號("")、單引號(')、tab(\t)或換行(\n)等... :
fmt.Println("Hello \t \"Daniel\"") // Hello "Daniel"
如果不要有跳脫字元只要保留原始的字串只要使用反引號取代雙引號 :
fmt.Println(`He'l'lo "Daniel" \t`) // He'l'lo "Daniel" \t
使用 fmt.Sprintf 從 int 轉換成 string
num1 := 12345678
num2 := fmt.Sprintf("%d", num1)
fmt.Println("number is " + num2)
strconv 套件可以在不同進位格式化數字
package main
import (
"fmt"
"strconv"
)
func main() {
num1 := 10
fmt.Println("number is " + strconv.FormatInt(int64(num1), 10)) // number is 10
fmt.Println("number is " + strconv.FormatInt(int64(num1), 2)) // number is 1010
fmt.Println("number is " + strconv.FormatInt(int64(num1), 8)) // number is 12
fmt.Println("number is " + strconv.FormatInt(int64(num1), 16)) // number is a
}
使用 trconv.Atoi 或 strconv.ParseInt 從 string 轉換成 int
package main
import (
"fmt"
"strconv"
)
func main() {
str1 := "1000"
i1, err := strconv.Atoi(str1)
if err == nil {
fmt.Println(i1 + 10) // 印出 1010
}
str2 := "2000"
i2, err := strconv.ParseInt(str2, 10, 64)
if err == nil {
fmt.Println(i2 + 10) // 印出 2010
}
}
const 常數宣告可以使用 iota 常數產生器,可以產生一系列相關值.iota 值從 0 開始對序列中的每個元素遞增.
package main
import (
"fmt"
)
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
func main() {
fmt.Println(Sunday) // 0
fmt.Println(Monday) // 1
fmt.Println(Tuesday) // 2
fmt.Println(Wednesday) // 3
fmt.Println(Thursday) // 4
fmt.Println(Friday) // 5
fmt.Println(Saturday) // 6
}
也可以從 1 開始
type Weekday int
const (
Sunday Weekday = 1 + iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
func main() {
fmt.Println(Sunday) // 1
fmt.Println(Monday) // 2
fmt.Println(Tuesday) // 3
fmt.Println(Wednesday) // 4
fmt.Println(Thursday) // 5
fmt.Println(Friday) // 6
fmt.Println(Saturday) // 7
}
透過 << 將每一個值 * 2 遞增
type Weekday int
const (
Sunday Weekday = 3 << iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
func main() {
fmt.Println(Sunday) // 3
fmt.Println(Monday) // 6
fmt.Println(Tuesday) // 12
fmt.Println(Wednesday) // 24
fmt.Println(Thursday) // 48
fmt.Println(Friday) // 96
fmt.Println(Saturday) // 192
}