package main
import "fmt"
import "time"
func main() {
// 一个基本的 `switch`。
i := 2
fmt.Print("write ", i, " as ")
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
}
// 在同一个 `case` 语句中,你可以使用逗号来分隔多个表达式。
// 在这个例子中,我们还使用了可选的 `default` 分支。
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println("It's the weekend")
default:
fmt.Println("It's a weekday")
}
// 不带表达式的 `switch` 是实现 if/else 逻辑的另一种方式。
// 这里还展示了 `case` 表达式也可以不使用常量。
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
// 类型开关 (`type switch`) 比较类型而非值。可以用来发现一个接口值的类型。
// 在这个例子中,变量 `t` 在每个分支中会有相应的类型。
whatAmI := func(i interface{}) {
switch t := i.(type) {
case bool:
fmt.Println("I'm a bool")
case int:
fmt.Println("I'm an int")
default:
fmt.Printf("Don't know type %T\n", t)
}
}
whatAmI(true)
whatAmI(1)
whatAmI("hey")
}
package main
import "fmt"
func main() {
// 这里是一个基本的例子。
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
// 你可以不要 `else` 只用 `if` 语句。
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
// 在条件语句之前可以有一个声明语句;在这里声明的变量
// 可以在所有的条件分支中使用。
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
package main
import "fmt"
func main() {
// 最基础的方式,单个循环条件。
i := 1
for i <= 3 {
fmt.Println(i)
i = i + 1
}
// 经典的初始/条件/后续 `for` 循环。
for j := 7; j <= 9; j++ {
fmt.Println(j)
}
// 不带条件的 `for` 循环将一直重复执行,直到在循环体内使用
// 了 `break` 或者 `return` 来跳出循环。
for {
fmt.Println("loop")
break
}
// 你也可以使用 `continue` 来跳到下一个循环迭代
for n := 0; n <= 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
}
package main
import "fmt"
import "math"
// `const` 用于声明一个常量。
const s string = "constant"
func main() {
fmt.Println(s)
// `const` 语句可以出现在任何 `var` 语句可以出现的地方
const n = 500000000
// 常数表达式可以执行任意精度的运算
const d = 3e20 / n
fmt.Println(d)
// 数值型常量没有确定的类型,直到被给定,
// 比如一次显式的类型转化。
fmt.Println(int64(d))
// 当上下文需要时,比如变量赋值或者函数调用,
// 一个数可以被给定一个类型。举个例子,
// 这里的 `math.Sin` 函数需要一个 `float64` 的参数。
fmt.Println(math.Sin(n))
}
package main
import "fmt"
func main() {
// `var` 声明 1 个或者多个变量。
var a = "initial"
fmt.Println(a)
// 你可以一次性声明多个变量。
var b, c int = 1, 2
fmt.Println(b, c)
// Go 将自动推断已经初始化的变量类型。
var d = true
fmt.Println(d)
// 声明后却没有给出对应的初始值时,变量将会初始化为
// _零值_ 。例如,一个 `int` 的零值是 `0`。
var e int
fmt.Println(e)
// `:=` 语法是声明并初始化变量的简写,例如
// 这个例子中的 `var f string = "short"`。
f := "short"
fmt.Println(f)
}