目錄
一、變量
1. 相同的部分
- 都只能由數字、字母、下划線組成變量名
2. 不同的部分
(1)python
- python中的常量只是一種習慣,可以改變
- python的變量名不能只是以數字開頭就行
- python的變量聲明直接是:
變量名 = 變量值
(2)golang
- golang中的常量不能改變,定義常量:
const pi = 3.1415
- golang的變量名叫做標識符,只能以字母或下划線開頭
- golang的變量聲明要以
var
開頭並且指定變量的類型:var 變量名 變量類型
或var 變量名 類型 = 表達式
二、基本數據類型
1. 相同的部分
- 都有整型,浮點型,字符串,布爾類型
- python中的列表就是golang中的一維數組
2. 不同的部分
(1)python
- python中有獨自的列表、元組、字典、集合
- python中布爾值為首字母大寫
(2)golang
- golang中有獨自的復數類型,byte和rune類型,二維、三維數組
- golang中布爾值為全小寫
三、運算符
1. 相同的部分
-
都有算術運算符,邏輯運算符,位運算符,賦值運算符
-
golang中的關系運算符就是python中的python中的比較運算符
2. 不同的部分
- python中多了一個成員運算符,即
in
四、流程控制
1. 相同的部分
- 都有
if
判斷,且都有單分支和多分支結構 - 都有
for
循環 - 都有
break,continue
,他們的作用在python和golang中都是相同,只是用法上有點差別
2. 不同的部分
(1)python
-
python的流程控制中有
if,for,while
,break 和 continue
都可用在for,while
循環中 -
多分支中使用
if...elif...else...
, -
python中直接條件后面跟冒號,換行縮進下寫代碼
-
python中for循環都是用關鍵字
in
一個可迭代對象或迭代器,后面跟冒號,換行縮進下寫代碼
(2)golang
- golang的流程控制中有
if,for,switch,goto
,break
語句可以結束for
、switch
和select
的代碼塊。continue
語句僅限在for
循環內使用 break 和 continue
的后面都可以跟一個標簽。標簽要求必須定義在對應的for
、switch
和select
的代碼塊上break
后面跟標簽表示退出這個標簽對應的代碼塊。continue
后面跟標簽表示結束當前循環開始標簽對應的循環
1. if
判斷
-
多分支中使用
if...else if...else if...else...
-
Go語言規定與
if
匹配的左括號{
必須與if和表達式
放在同一行,{
放在其他位置會觸發編譯錯誤。 同理,與else
匹配的{
也必須與else
寫在同一行,else
也必須與上一個if
或else if
右邊的大括號在同一行- 實例
// 1. 基本if判斷 func ifDemo1() { score := 65 if score >= 90 { fmt.Println("A") } else if score > 75 { fmt.Println("B") } else { fmt.Println("C") } } // 2. if判斷特殊寫法(在 if 表達式之前添加一個執行語句,再根據變量值進行判斷) func ifDemo2() { if score := 65; score >= 90 { fmt.Println("A") } else if score > 75 { fmt.Println("B") } else { fmt.Println("C") } }
2. for
循環
-
Go 語言中的所有循環類型均可以使用
for
關鍵字來完成。 -
for循環可以通過
break
、goto
、return
、panic
語句強制退出循環- 實例
// for循環的基本格式如下: for 初始語句;條件表達式;結束語句{ 循環體語句 } // 1. for循環普通寫法 func forDemo() { for i := 0; i < 10; i++ { fmt.Println(i) } } // 2. for循環的初始語句可以被忽略,但是初始語句后的分號必須要寫 func forDemo2() { i := 0 for ; i < 10; i++ { fmt.Println(i) } } // 3. for循環的初始語句和結束語句都可以省略,例如: func forDemo3() { i := 0 for i < 10 { fmt.Println(i) i++ } } // 4. 無限循環 for { 循環體語句 }
3. for range
鍵值循環
-
for range
的作用和python中的enumerate
方法作用相同。 -
Go語言中可以使用
for range
遍歷數組、切片、字符串、map 及通道(channel)。 通過for range
遍歷的返回值有以下規律:- 組、切片、字符串返回索引和值。
- map返回鍵和值。
- 通道(channel)只返回通道內的值。
-
實例
func main() {
var a = [...]string{"北京", "上海", "深圳"}
for index, value := range a {
fmt.Println(index, value)
}
}
4. switch case
-
使用
switch
語句可方便地對大量的值進行條件判斷 -
Go語言規定每個
switch
只能有一個default
分支 -
實例
// 1. switch case 普通寫法 func switchDemo1() { finger := 3 switch finger { case 1: fmt.Println("大拇指") case 2: fmt.Println("食指") case 3: fmt.Println("中指") case 4: fmt.Println("無名指") case 5: fmt.Println("小拇指") default: fmt.Println("無效的輸入!") } } // 2. switch case 一個分支有多個值 func testSwitch3() { switch n := 7; n { case 1, 3, 5, 7, 9: fmt.Println("奇數") case 2, 4, 6, 8: fmt.Println("偶數") default: fmt.Println(n) } } // 3. 分支還可以使用表達式,這時候switch語句后面不需要再跟判斷變量 func switchDemo4() { age := 30 switch { case age < 25: fmt.Println("好好學習吧") case age > 25 && age < 35: fmt.Println("好好工作吧") case age > 60: fmt.Println("好好享受吧") default: fmt.Println("活着真好") } } // 4. fallthrough語法可以執行滿足條件的case的下一個case,是為了兼容C語言中的case設計的 func switchDemo5() { s := "a" switch { case s == "a": fmt.Println("a") fallthrough case s == "b": fmt.Println("b") case s == "c": fmt.Println("c") default: fmt.Println("...") } } // 輸出: a b
5. goto
-
goto
語句通過標簽進行代碼間的無條件跳轉。 -
goto
語句可以在快速跳出循環、避免重復退出上有一定的幫助 -
Go語言中使用
goto
語句能簡化一些代碼的實現過程 -
實例
// 例如雙層嵌套的for循環要退出時: func gotoDemo1() { 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) } // 外層for循環判斷 if breakFlag { break } } } // 使用goto語句能簡化代碼: func gotoDemo2() { 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("結束for循環") }
6. break 和 continue
實例
// break 實例
func breakDemo1() {
BREAKDEMO1:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 2 {
break BREAKDEMO1
}
fmt.Printf("%v-%v\n", i, j)
}
}
fmt.Println("...")
}
// continue 實例
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)
}
}
}