// 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 是關鍵字---》為了優雅的替換掉過多的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) }