GO - if判斷,for迴圈,switch語句,陣列的使用
阿新 • • 發佈:2020-03-04
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)
}