變數宣告
-
// var 變數名 變數型別 var name string
-
// 批量宣告 var ( a string b int )
-
// 初始化 var 變數名 型別 = 運算式 // 一次初始化多個 var a, b = 1, 2
-
// 變數推導,可以省略型別,根據右邊定義的值自動推導型別 var a = 123
-
// 短變數宣告,一般用于函式內部,不能在函式外使用 a := 100
-
// 匿名變數,用 _ 表示 用于獲取多個值時忽略某個值 package main import "fmt" func qwer() (int, string) { return 1, "haha" } func main() { a, _ := qwer() _, b := qwer() fmt.Println("a=", a) fmt.Println("b=", b) }
常量
-
// const 常量名 = xxx const a = 1
-
// 多個常量 const ( b = 12 c = 34 ) // const同時宣告多個常量時,如果省略了值則表示和上面一行的值相同 const ( d = 12 e )
iota
iota是go語言的常量計數器,只能在常量的運算式中使用
-
//
iota在const關鍵字出現時將被重置為0,const中每新增一行常量宣告將使iota計數一次(iota可理解為const陳述句塊中的行索引), 使用iota能簡化定義,在定義列舉時很有用,
const ( a = iota // 0 b // 1 ) const c = iota // 0 -
// demo1 使用 _ 跳過某些值 const ( n1 = iota //0 n2 //1 _ n4 //3 ) // demo2 iota宣告中間插隊 const ( n1 = iota //0 n2 = 100 //100 n3 = iota //2 n4 //3 ) /* demo3 定義數量級 (這里的<<表示左移操作,1<<10表示將1的二進制表示向左移10位,也就是由1變成了10000000000,也就是十進制的1024,同理2<<2表示將2的二進制表示向左移2位,也就是由10變成了1000,也就是十進制的8,) */ const ( _ = iota KB = 1 << (10 * iota) MB = 1 << (10 * iota) GB = 1 << (10 * iota) TB = 1 << (10 * iota) PB = 1 << (10 * iota) ) // demo4 多個iota定義在一起 const ( a, b = iota + 1, iota + 2 //1,2 c, d //2,3 e, f //3,4 )
if
if 運算式1 { 分支1 } else if 運算式2 { 分支2 } else{ 分支3 }
// demo1
func main() { score := 65 if score >= 90 { fmt.Println("A") } else if score > 75 { fmt.Println("B") } else { fmt.Println("C") } }
// demo2
func main () {
if score := 65; score >= 90 {
fmt.Println("A")
} else if score > 75 {
fmt.Println("B")
} else {
fmt.Println("C")
}
}
demo1和demo2的區別在于score變數,demo1的score變數能在if判斷完后繼續使用,demo2的score只有在進行到判斷那一步時才能使用,假如score用完就不需要了,可以使用demo2的寫法,反之,則使用demo1的寫法
for
for回圈在回傳true時,不停的回圈,直到回傳false就自動退出停止
for 初始陳述句;條件運算式;結束陳述句{ 回圈體陳述句 } 寫法一: for i:=0; i<10; i++{ fmt.Println(i) } 寫法二:忽略初始陳述句,但分號(;)還要保留 i := 0 for ; i<10; i++{ fmt.Println(i) } 寫法三: 初始陳述句和結束陳述句都省略,類似于python中的while i := 0 for i < 10 { fmt.Println(i) i++ } 無限回圈 i := 0 for { fmt.Println(i) i++ } for range(鍵值回圈) Go語言中可以使用for range遍歷陣列、切片、字串、map 及通道(channel), 通過for range遍歷的回傳值有以下規律: 陣列、切片、字串回傳索引和值, map回傳鍵和值, 通道(channel)只回傳通道內的值,
for練習題 99乘法表
// demo1 func main() { // 遍歷, 決定處理第幾行 for y := 1; y <= 9; y++ { // 遍歷, 決定這一行有多少列 for x := 1; x <= y; x++ { fmt.Printf("%d*%d=%d ", x, y, x*y) } // 手動生成回車 fmt.Println() } }
// demo2 func main () { var x = 1 for x < 10 { x++ for y :=1; y <= x; y++ { fmt.Printf("%v * %v = %v ", x , y, x*y) } fmt.Println() } }
demo1是正確的,demo2由于先定義了變數x,導致進入for回圈列印時,x已經經過x++,已經等于2了,所以列印有問題,由于x=9時,滿足條件,列印時x=10,所以列印結果會是2開始,10結束,
break
break跳出for回圈
func main() { i := 1 for ; i<10 ; i++ { fmt.Println(i) if i >= 5 { break } } }
continue
continue跳過本次for回圈,繼續下一次, 在 continue陳述句后添加標簽時,表示開始標簽對應的回圈
func main() { i := 1 for ; i<10 ; i++ { if i == 5 { continue } fmt.Println(i) } } func continueDemo() { forloop1: for i := 0; i < 5; i++ { // forloop2: for j := 0; j < 5; j++ { if i == 2 && j == 2 { continue forloop1 } fmt.Printf("%v-%v\n", i, j) } } }
goto
goto 跳轉至指定標簽
func main() { var breakFlag bool for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { breakFlag = true break } fmt.Printf("%v - %v \n", i, j) } if breakFlag { break } } } func main() { for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { goto breakTag } fmt.Printf("%v - %v \n", i, j) } } return breakTag: fmt.Println("finish") }
goto,break,continue三個語法都可以配合標簽使用,區分大小寫,Break與continue配合標簽可用于多層回圈的跳出,goto是調整執行位置,與其它2個陳述句配合標簽的結果并不相同,
break不使用標簽只是跳出上一層回圈,使用標簽則是跳出于標簽同級的回圈,
continue不加標簽是跳過本次for回圈,繼續下一次,加標簽是跳到與標簽平級的for回圈的下一次回圈,
switch
#default每個switch只能有一個 func main() { i := 1 switch i { case 1: fmt.Println("a") case 2: fmt.Println("b") default: fmt.Println("nonono") } } #多個值判斷 func main() { switch n := 7; n { case 1, 3, 5, 7, 9: fmt.Println("奇數") case 2, 4, 6, 8: fmt.Println("偶數") default: fmt.Println(n) } } #使用運算式 func main() { age := 30 switch { case age < 25: fmt.Println("好好學習吧") case age > 25 && age < 35: fmt.Println("好好作業吧") case age > 60: fmt.Println("好好享受吧") default: fmt.Println("活著真好") } } #fallthrough 執行滿足條件的下一個case func main() { i := 1 switch i { case 1: fmt.Println("a") fallthrough case 2: fmt.Println("b") default: fmt.Println("xxxx") } }
參考 https://www.liwenzhou.com/posts/Go/go_menu/ 整理記錄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/30713.html
標籤:Go
