go switch語法


switch語法

在go中,switch可以支持傳入各種類型進行選擇,相當於從第1個case到最后一個case遍歷進行比較,執行最先滿足條件的case

並且go語言還規定必須要顯式寫明fallthrough語句才會接着執行下一個case,不用再寫break了。這樣其實更合理一些,因為絕大部分情況都是這個語義的,何必再在每個case里面寫上break呢。

func main() {
	var weakDay string
	fmt.Scan(&weakDay)
	switch weakDay {
	case "Mon.":
		fmt.Println(1)
	case "Tues.":
		fmt.Println(2)
	case "Wed.":
		fmt.Println(3)
	case "Thurs.":
		fmt.Println(4)
	case "Fri.":
		fmt.Println(5)
	case "Sat.":
		fmt.Println(6)
	case "Sun.":
		fmt.Println(7)
	default:
		panic("wrong day")
	}
}

支持一個case里面多種情況。

func main() {
	var weakDay string
	fmt.Scan(&weakDay)
	switch weakDay {
	case "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.":
		fmt.Println("work day")
	case "Sat.", "Sun.":
		fmt.Println("weakend")
	default:
		panic("wrong day")
	}
}

可以不傳入參數,替代繁瑣的if else寫法。這里每個case挨個判斷,進入最先滿足條件的case執行。

func main() {
	var score int
	fmt.Scan(&score)
	switch {
	case score < 60:
		fmt.Println("不及格")
	case score >= 60 && score < 80:
		fmt.Println("不錯")
	case score >= 80:
		fmt.Println("優秀")
	default:
		panic("wrong number")
	}
}

type switch

type switch是go語言中一種特殊的switch語法,它比較的是類型而不是具體的值。

和普通的類型斷言一樣,要求進行斷言的變量必須是接口類型的。並且在type switch中不允許使用fallthrough語句。

package main

import (
	"fmt"
)

type person struct {
	age  int
	name string
}

func guessType(x interface{}) {
	value := x.(person)
	fmt.Println(value)
	switch x.(type) {
	case int:
		fmt.Println("int")
	case string:
		fmt.Println("string")
	case person:
		fmt.Println("person")
	default:
		fmt.Println("unknown")
	}
}

func main() {
	var n int
	var str string
	var p person
	guessType(n)   // int
	guessType(str) // string
	guessType(p)   // person
}

為了方便進行類型轉換,type switch還可以設定一個值來提前保存轉換之后得到的值。

package main

import (
	"fmt"
)

type person struct {
	age  int
	name string
}

func guessType(x interface{}) {
	switch value := x.(type) {
	case int:
		fmt.Println("int ", value)
	case string:
		fmt.Println("string ", value)
	case person:
		fmt.Println("person ", value)
	default:
		fmt.Println("unknown ", value)
	}
}

func main() {
	var n int
	var str string = "hello"
	var p person
	guessType(n)   // int 0
	guessType(str) // string hello
	guessType(p)   // person {0 }
	guessType(nil) // person <nil>
}

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM