1. 程式人生 > >GO - if判斷,for迴圈,switch語句,陣列的使用

GO - if判斷,for迴圈,switch語句,陣列的使用

1.if - else if - else的使用

package main

import "fmt"

func main() {
    // 1.簡單使用
    var a=10
    if a==10 {  // 這個位置不能回車,不能換行
        fmt.Println(a)
    }

    //2 if - else
    var b =16
    if b==20 {
        fmt.Println("20")
    }else{
        fmt.Println("15")
    }
    
    //3 if - else if - else
    var c =20
    if c==20 {
        fmt.Println("20")
    }else if c==15 {
        fmt.Println("15")
    }else {
        fmt.Println("10")
    }
}

2.for迴圈

package main

func main() {
    // 基本語法
    for 初始化; 條件; 自增/自減{
        
    }
    
}

2.1簡單使用

    for a:=0; a<10; a++  {
        fmt.Println(a)
    }

2.2省略初始化

    a :=0
    for ;a<10 ; a++ {
        fmt.Println(a)
    }

2.3省略初始化和自增自減

    a :=0
    for ;a<10 ;  {
        fmt.Println(a)
        a++
    }

2.4.省略初始化和自增自減(進階版)

注意:兩個分號省略了,(類似while迴圈)

    a :=0
    for a<10  {
        fmt.Println(a)
        a++
    }

2.5.死迴圈

    // 死迴圈一
    for true{
        fmt.Println("ak47")
    }

    // 死迴圈二(三部分都省略了)
    for {
        fmt.Println("ak47")
        break
    }

3.switch語句

3.1基本使用

package main

import "fmt"

func main() {

    // 1.基本使用
    var a = 10
    switch a {
    case 1:  //相當於if a==1
        fmt.Println("1")
    case 5:
        fmt.Println("5")
    case 10:
        fmt.Println("10")
    }
}

3.2default

    var b = 18
    switch b {
    case 1:
        fmt.Println("1")
    case 5:
        fmt.Println("5")
    case 10:
        fmt.Println("10")
    default:   //相當於else
        fmt.Println("你是蔡徐坤")
    }

3.3多表達式判斷

(只要符合期中一個條件就成立)

    var c = 18
    switch c {
    case 1, 2, 5:
        fmt.Println("1")
    case 6, 7:
        fmt.Println("5")
    case 10, 15, 18:
        fmt.Println("10")
    default:
        fmt.Println("你是蔡徐坤")
    }

3.4無表示式

    var d = 30
    switch {
    case d == 20:
        fmt.Println("1")
    case d == 30:
        fmt.Println("5")
    case d == 40:
        fmt.Println("10")
    default:
        fmt.Println("你是蔡徐坤")
    }

3.5無表示式

and(和)的條件 && 或(or)的條件 ||

    var e = 20
    var d = 30
    switch {
    case d == 30 && e==20:   //同時成立
        fmt.Println("1")
    case d == 30:
        fmt.Println("5")
    case d == 40:
        fmt.Println("10")
    default:
        fmt.Println("你是蔡徐坤")
    }

3.6.fallthrough

無條件執行下一個case(穿透)

    var f = 2
    switch  {
    case f == 1:
        fmt.Println(1)
    case f == 2:
        fmt.Println(2)
        fallthrough   //一旦碰到 fallthrough會無條件執行下面的語句
    case f == 6:
        fmt.Println(250)
        fallthrough   ////只要程式碼讀到fallthrough與他緊挨著的語句,無論是否滿足條件,他都會執行裡面的內容
    case f == 3:
        fmt.Println(666)
    }

4.陣列

4.1定義陣列

package main
import "fmt"
func main() {
    // 同一類元素的集合, 不允許混合不同元素
    // 定義陣列(定義了一個大小為4的int型別陣列)
    var a [4]int  // 四個為0的陣列
    fmt.Println(a)  // int預設值為0
}

4.2使用陣列

(從索引0開始)

package main
import "fmt"
func main() {
    var a [4]int 
    fmt.Println(a) 
     a[0] = 10
    fmt.Println(a[0])
    fmt.Println(a)
}

4.3定義並賦初始值(三種方式)

package main
import "fmt"
func main() {
    // 1.
    //var b [4]int = [4]int{1,2,3,4}
    // 2.
    //var b = [4]int{1,2,3,4}
    // 3.
    b := [4]int{1,2,3,4}
    fmt.Println(b)
}

4.4定義並賦初值(其他方式)

package main
import "fmt"
func main() {
    //var c [4]int = [4]int{1,2}  // 只給前兩個賦值
    //var c [4]int = [4]int{1:2}  // 只給第二個賦值,前面是索引,後面是值
    //var c [4]int = [4]int{1:2,2:3}  // 只給第二,三個個賦值
    var c [4]int = [4]int{2:3,1:2}  // 只給第二,三個個賦值
    c[3] = 100
    fmt.Println(c)
}

4.5陣列大小固定(大小一旦定義,不能改變)

package main
import "fmt"
func main() {
    //var c [4]int = [5]int{1,2}   // 錯的
    //var c [4]int = [4]int{1,2,3,4,5}   // 錯的

    //var c [4]int = [4]int{1,2,3,4}
    //a[4] = 10  //錯的,最大索引為3
    //fmt.Println(a[4])  //錯的
}

4.6.陣列的大小是型別的一部分

package main
import "fmt"
func main() {
    // 下面兩個不是同一種類型(不能比較和加減)
    var a [3] int
    var b [4] int
}

4.7.陣列的值型別(引用型別)

// 說法不準確 (因為py中一切皆物件,不可變資料型別也是物件,物件就是地址)

// py中的不可變型別(值型別)當做引數傳遞到函式中,如果在函式中改變該值,原值不會變

// py中的可變型別(引用型別:地址)當做引數傳遞到函式中,如果在函式中改變該值,原值會改變

// go中值型別,當做引數傳遞時,copy一份過去,值被copy是相當於複製了一份過去

package main
import "fmt"
func main() {
    var d = [4]int{1,2,3,4}
    test(d)  // 當做引數傳遞過去
    fmt.Println(d) // 原值沒有改變
}

func test(d [4]int)  {
    d[0] = 100   // 修改值
    fmt.Println(d) // 傳過來的陣列改變了,但原值不變
}

4.8陣列的長度(len)

package main
import "fmt"
func main() {
    var e = [4]int{1,2,3,4}
    fmt.Println(len(e))
}

4.9陣列的迴圈

package main
import "fmt"
func main() {
    // 方法一:
    var a = [4]int{1,2,3,4}
    for i:=0 ;i<len(a) ;i++  {
        fmt.Println(a[i])
    }
    
    //方式二:(range關鍵字,它不是內建函式)把陣列放在range關鍵字後
    var b = [4]int{1,55,3,66}
    for z:=range b{
        //fmt.Println(z)
        fmt.Println(b[z])  //這不是正統的用法
    }
    
    // 當用一個變數來接收時,這個變數就是索引
    // 當用兩個變數來接收時,這兩個變數就是索引和值
    for k,v:=range a {
        fmt.Println(k,v)
    }
    
    // 當你不想取索引的時候也可以用下劃線代替
    for _,v:=range a {
        fmt.Println(v)
    }
}

4.10多維陣列

package main
import "fmt"
func main() {
    var a [4][3]int
    fmt.Println(a)
    a[1][1] =100  // 修改值
    fmt.Println(a)
}

4.11多維陣列定義並賦初值

package main
import "fmt"
func main() {
    var a = [4][3]int{{1,1,1},{2,2,2},{3,3,3},{4,4,4}}
    fmt.Println(a)
    
    // 把陣列第二個位置初值改為[6,6,6]
    var b = [4][3]int{1:{6,6,6}}
    fmt.Println(b)
    
    var c = [4][3]string{1:{"6","6","6"}}
    fmt.Println(c)
    // 字串的空值是空字串  ""
    // int型別空值是  0
    // 陣列的空值,取決於型別的空值
    var d [4][3]string
    fmt.Println(d)
}