Go 快速入门指南 - if/else 和 switch
if/else
Go 中的 if/else 语句和其他编程语言中 if/else 规则一致,除了语法上略有差异。
语法规则
if 和 else if 后面的条件表达式是不需要括号的。
单个 if
if condition {
    // do something 
}
例子
package main
func main() {
    n := 1024
    if n > 0 {
        println("n > 0")
    }
}
// $ go run main.go
// 输出如下 
/**
  n > 0
*/
单个 if/else
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
*/
switch
相较于主流编程语言,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
*/
default
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
*/
省略 expr 表达式
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
*/
同时测试多个 case
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
*/
fallthrough
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 代表接口类型即可。
联系我

    博客搬家了:http://dbwu.tech/
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号