Go_ if else語句 ,,迴圈,,switch,,陣列

拆尼斯、帕丁顿發表於2024-04-03

if-else語句

// if 語法
if 定義變數;條件 {
    
}else if 條件{
    
}else{
    
}

// 輸入分數,列印 成績等級
package main

import "fmt"

// if
func main() {
	//1 接收使用者輸入
	var score int = 0
	fmt.Print("請輸入分數:")
	fmt.Scan(&score)  

	showLevel(score)

}

func showLevel(score int) {
	if score >= 90 && score <= 100 {
		fmt.Println("優秀")
	} else if score > 80 && score < 90 {
		fmt.Println("良好")
	} else if score >= 60 && score <= 80 {
		fmt.Println("及格")
	} else {
		fmt.Println("不及格")
	}

}


if res, ok := add(4, 5); ok {
    fmt.Println("計算結果是:", res)
}

迴圈

# go 只有 for迴圈
    -沒有while
    -沒有do while
    -但是透過for迴圈能實現 while迴圈
    
# 基本語法--》基於索引的迴圈
for 定義變數;條件;自增或自減{
    
}


# 基於迭代的迴圈
package main

import "fmt"

// for

func main() {
	// 1 基本使用--》列印0---9
	//for i := 0; i < 10; i++ {
	//	fmt.Println(i)
	//}

	// 2 省略第一部分,變數的定義--->i作用域範圍更大
	//i := 0
	//for ; i < 10; i++ {
	//	fmt.Println(i)
	//}

	// 3 省略第三部分,自增
	//for i := 0; i < 10; {
	//	fmt.Println(i)
	//	i++
	//}

	// 4 省略第一和第三部分  ---》只放條件---》倆分號可以省略---》等同於while迴圈
	//i := 0
	//for i < 10 {
	//	fmt.Println(i)
	//	i++
	//}

	// 5 三部分全省略--》就是死迴圈
	//for {
	//	fmt.Println("死迴圈")
	//}

	// 6 break 和continue 跟所有語言都一樣

	// 7 基於迭代的迴圈====》容器型別:陣列,切片,map
	//var a [3]int = [3]int{99, 88, 77}
	//for _, value := range a {  // range python 內建函式---》go中是關鍵字
	//	//fmt.Println(index)
	//	fmt.Println(value)
	//}

	// 迴圈字元
	s := "lqz is handsome中"
	//for _, value := range s { // go 直接迴圈字串,迴圈的是一個個字元
	//	//fmt.Println(index)
	//	fmt.Printf("valaue的型別是:%T\n", value)
	//	fmt.Println(string(value)) // 	int32--》rune
	//}

	// 迴圈位元組--->len(字串)---位元組長度
	for i := 0; i < len(s); i++ {
		fmt.Println(s[i])
		fmt.Println(string(s[i]))
	}

	// python 迴圈字串迴圈的是字元
	// python 中迴圈位元組---》把字串先encode成 bytes格式--》迴圈bytes格式---》預設以16進位制顯示--》10進位制,二進位制

	/*
		s='lqz is handsome中'
		s_b=s.encode('utf-8)
		for item in s_b:
			print(item)
			print(bin(item))
			print(hex(item))

		[ item for item in s.encode('utf-8)]
	*/

}

switch語句

# switch 是關鍵字---》為了優雅的替換掉過多的if-else
    -python中沒有switch關鍵字---》但是能實現switch的功能或語法
    -java,go,c,js,都有switch關鍵字的支援
    
# 使用者輸入分數,列印成績等級

package main

import "fmt"

func main() {
    var score int = 0
    fmt.Print("請輸入分數:")
    fmt.Scan(&score)
    // 1 用法1 ,基本使用 case中放一個相等值
    //switch score {
    //case 88:
    //    fmt.Println("是88")
    //case 99:
    //    fmt.Println("是99")
    //default:
    //    fmt.Println("不知道")
    //}

    // 1.1 基本使用,case中放多個相等值
    //switch score {
    //case 88, 99, 77:
    //    fmt.Println("是88")
    //case 55, 66, 44:
    //    fmt.Println("是99")
    //default:
    //    fmt.Println("不知道")
    //}

    // 2 用法2, case中放條件

    showLevelSwitch(score)

    // 3 default 使用---》所有不符合執行它

    // 4 fallthrough -->無條件執行下一個case

}

// 2 用法2, case中放條件
func showLevelSwitch(score int) {
    switch {
    case score >= 90 && score <= 100:
        fmt.Println("優秀")

    case score > 80 && score < 90:

        fmt.Println("良好")
        fallthrough

    case score >= 60 && score <= 80:
        fmt.Println("及格")
        fallthrough
    default:
        fmt.Println("不及格")

    }

}

陣列

# 陣列是同一型別元素的集合。例如,整數集合 5,8,9,79,76 形成一個陣列。
Go 語言中不允許混合不同型別的元素,例如包含字串和整數的陣列。(當然,如果是 interface{} 型別陣列,可以包含任意型別)


package main

import "fmt"

// 陣列的定義和使用
func main() {
    //1 定義
    //var a [3]int // 陣列中的所有元素都被自動賦值為陣列型別的零值
    ////var a1 [4]string = [4]string{"lqz", "zhangsan"} // 內容可以小於,但不能大於
    ////var a1  = [4]string{"lqz", "zhangsan"} // 內容可以小於,但不能大於
    //a1 := [4]string{"lqz", "zhangsan"} // 內容可以小於,但不能大於
    //fmt.Println(a)
    //fmt.Println(a1)

    //2 根據下標,使用---》改值,賦值
    //a1[0] = "xxx"
    //a1[3] = "asfasd"
    //fmt.Println(a1)

    // 3 陣列的大小是型別的一部分
    //var a3 [3]int = [3]int{1, 2, 3}
    //var a4 [3]int = [3]int{1, 2, 4}
    //var a5 [4]int = [4]int{1, 2, 4}
    //fmt.Println(a3 == a4)
    //fmt.Println(a4 == a5)
    //addA(a3)
    //addA(a5)

    // 4 陣列是值型別--->當引數傳遞到函式中,在函式中修改---》會不會影響原來的
    //var a3 [3]int = [3]int{1, 2, 3}
    //changeA(a3)
    //fmt.Println("外部:", a3)

    // 5 陣列的長度 內建函式len
    //fmt.Println(len(a3))

    var a4 = [...]int{1, 2, 33, 4, 5, 6} // 陣列長度由值個數決定
    fmt.Println(len(a4))

    // 6 使用 range 迭代陣列  fori  forr
    for i := 0; i < len(a4); i++ {
        fmt.Println(a4[i])
    }
    for _, value := range a4 {
        fmt.Println(value)
    }

    // 7 多維陣列
    var a5 [5][2]int
    fmt.Println(a5) // [[0 0],[0 0],[],[],[]]
    a5[1][1] = 99
    fmt.Println(a5)
    var a6 [5][2]int = [5][2]int{{11, 33}, {66, 77}}
    fmt.Println(a6)

    // 8 定義並賦值
    var a7 [100]int = [100]int{98: 999}
    fmt.Println(a7)
}

func addA(a [3]int) (total int) {
    for _, value := range a {
        total += value
    }
    return
}

func changeA(a [3]int) {
    a[0] = 99
    fmt.Println("內部", a)
}

  

  

相關文章