这是 Go 语言之旅的笔记 P1, 包含两大部分的语法介绍:一个是包、变量和函数,另外一个是流程控制语句,如 for, if-else, switch。
包、变量和函数
关于包:
1 2 3 4 5 6
| package main import ( "math/rand" )
|
关于导出名:
1 2
| fmt.Println(math.Pi) fmt.Println(math.pi)
|
函数的形式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| func add(x int, y int) int { return x + y }
x int, y int x,y int
func swap(x, y string) (string, string) { return y, x }
func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return }
|
关于变量:
1 2 3 4 5 6 7 8 9 10 11
| var c, python, java bool var i int
vari, j int = 1, 2 var c, python, java = true, false, 'no!'
c, python, java := true, false, "no!"
|
基本类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte rune float32 float64 complex64 complex128
var ( ToBe bool = false MaxInt uint64 = 1<<64 - 1 z complex128 = cmplx.Sqrt(-5 + 12i) )
|
类型转换:
1 2 3 4 5 6 7 8 9
| var i int = 42 var f float = float64(i) var u uint = uint(f)
i := 42 f := float64(i) u := uint(f)
|
类型推导:
1 2 3 4 5 6 7 8 9
| var i int j := i
i := 42 j := 3.142 g := 0.867 + 0.5i
|
常量:
1 2
| const Pi = 3.14 const Pi := 3.14
|
数值常量:
1 2 3 4 5 6
|
Big = 1 << 100
Small = Big >> 99
|
流程控制
Go 只有一种循环结构即 for 循环,分成三部分
初始化语句:在第一次迭代前执行
条件表达式:在每次迭代前求值
后置语句:在每次迭代的结尾执行
它有三种写法,for 后面没有小括号, 大括号 { }
则是必须的
- for init; condition; post{}
- for condition {}
- for {}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| sum := 0 for i := 0; i < 10; i++ { sum += i }
sum := 1 for ; sum < 1000; { sum += sum }
sum := 1 for sum < 1000 { sum += sum }
package main func main() { for { } }
|
关于 If 语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| if x < 0{ }
if v := add(x, y); v < 10 { return v }
if v:= add(x, y) { } else { }
|
关于 switch:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| package main
import ( "fmt" "runtime" )
func main() { fmt.Print("Go runs on ") switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Println("Linux.") default: fmt.Printf("%s.\n", os) } }
switch i { case 0: case f(): }
func main() { t := time.Now() switch { case t.Hour() < 12: fmt.Println("Good morning!") case t.Hour() < 17: fmt.Println("Good afternoon.") default: fmt.Println("Good evening.") } }
|
关于 defer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
package main
import "fmt"
func main() { defer fmt.Println("world")
fmt.Println("hello") }
package main
import "fmt"
func main() { fmt.Println("counting")
for i := 0; i < 10; i++ { defer fmt.Println(i) }
fmt.Println("done") }
|