Go 中的 if/else 语句和其他编程语言中 if/else
规则一致,除了语法上略有差异。
if
和 else if
后面的条件表达式是不需要括号的。
if condition { // do something }
package main func main() { n := 1024 if n > 0 { println("n > 0") } } // $ go run main.go // 输出如下 /** n > 0 */
if condition { // do something } else { // do something else }
package main func main() { n := 1024 if n > 0 { println("n > 0") } else { println("n <= 0") } } // $ go run main.go // 输出如下 /** n > 0 */
if condition1 { // do something } else if condition2 { // do something else } else { // default }
package main func main() { n := 0 if n > 0 { println("n > 0") } else if n < 0 { println("n < 0") } else { println("n = 0") } } // $ go run main.go // 输出如下 /** n == 0 */
相较于主流编程语言,Go 中的 switch
语法更加灵活,它接受任意形式的表达式。
• switch
后面的表达式不需要括号
• case
语句块执行完会自动退出整个 switch
语句块,也就是不需要使用 break
显式声明
• case
语句快执行完后,如果希望继续向下执行,可以使用关键字 fallthrough
, 这样就和其他编程语言不加 break
效果一样了
switch expr { // expr 可以是任意类型 case v1: ... case v2: ... case v3: ... case v4, v5, v6: // 可以同时测试多个可能符合条件的值 ... default: // 默认值 ... }
package main import "fmt" func main() { n := 1024 switch n { case 1023: fmt.Println("n = 1023") case 1024: fmt.Println("n = 1024") case 1025: fmt.Println("n = 1025") } } // $ go run main.go // 输出如下 /** n = 1024 */
package main import "fmt" func main() { n := 1024 switch n * 2 { case 1024: fmt.Println("n = 1024") case 2048: fmt.Println("n = 2048") case 0: fmt.Println("n = 0") } } // $ go run main.go // 输出如下 /** n = 2048 */
package main import "fmt" func main() { n := 1024 switch n * 2 { case 0: fmt.Println("n = 0") case 1: fmt.Println("n = 1") case 2: fmt.Println("n = 2") default: fmt.Println("n = 2048") } } // $ go run main.go // 输出如下 /** n = 2048 */
package main import "fmt" func main() { n := 1024 switch { case n < 1024: fmt.Println("n < 1024") case n > 1024: fmt.Println("n > 1024") case n == 1024: fmt.Println("n == 1024") default: fmt.Println("invalid n") } } // $ go run main.go // 输出如下 /** n = 1024 */
package main import "fmt" func main() { n := 1024 switch n { case 1023, 1024: // 多个 case, 只要一个匹配就 OK fmt.Println("n <= 1024") case 1025: fmt.Println("n > 1024") default: fmt.Println("invalid n") } } // $ go run main.go // 输出如下 /** n <= 1024 */
package main import "fmt" func main() { n := 1024 switch { case n < 1024: fmt.Println("n < 1024") fallthrough // 继续向下执行 case n > 1024: fmt.Println("n > 1024") fallthrough // 继续向下执行 case n == 1024: fmt.Println("n == 1024") fallthrough // 继续向下执行 default: fmt.Println("invalid n") } } // $ go run main.go // 输出如下 /** n = 1024 invalid n */
switch
可以 .(type)
来实现类型断言,判断某个值是否为某个数据类型。
package main func main() { var n interface{} // 值必须为 interface 类型 n = 1024 switch n.(type) { case nil: println("n is a nil") case int: println("n is a integer") case float64: println("n is a float64") case bool: println("n is a bool") case string: println("n is a string") default: println("n is invalid") } } // $ go run main.go // 输出如下 /** n is a integer */
关于上面代码注释中提到的 interface
, 后面会讲到, 读者这里只需知道关键字 interface
代表接口类型即可。