天天看點

Go 語言結構 – 基礎篇(文法、資料類型、變量、常量、運算符)

作者:不凡的Golang
  • 1、Go 語言結構
  • Go Hello World 執行個體
  • 執行 Go 程式
  • 2、Go 語言基礎文法
  • Go 标記
  • 行分隔符
  • 注釋
  • 辨別符
  • 字元串連接配接
  • Go 語言的空格
  • 格式化字元串
  • 3、Go 語言資料類型
  • 數字類型
  • 浮點型
  • 其他數字類型
  • 4、Go 語言變量
  • 變量聲明
  • 多變量聲明
  • 值類型和引用類型簡短形式,使用 := 指派操作符
  • 5、Go 語言常量
  • const
  • iota
  • 6、Go 語言運算符
  • 算術運算符
  • 關系運算符
  • 邏輯運算符
  • 位運算符
  • 指派運算符
  • 其他運算符
  • 運算符優先級
  • 7、Go 語言條件語句
  • Go 語言循環語句
  • 循環控制語句
  • 無限循環

1、Go 語言結構

1.1、Go Hello World 執行個體

Go 語言的基礎組成有以下幾個部分:

  • 包聲明
  • 引入包
  • 函數
  • 變量
  • 語句 & 表達式
  • 注釋

接下來讓我們來看下簡單的代碼,該代碼輸出了”Hello World!”:

package main

import "fmt"

func main() {
   /* 這是我的第一個簡單的程式 */
   fmt.Println("Hello, World!")
}           

讓我們來看下以上程式的各個部分:

  1. 第一行代碼 package main 定義了包名。你必須在源檔案中非注釋的第一行指明這個檔案屬于哪個包,如:package main。package main表示一個可獨立執行的程式,每個 Go 應用程式都包含一個名為 main 的包。
  2. 下一行 import “fmt” 告訴 Go 編譯器這個程式需要使用 fmt 包(的函數,或其他元素),fmt 包實作了格式化 IO(輸入/輸出)的函數。
  3. 下一行 func main() 是程式開始執行的函數。main 函數是每一個可執行程式所必須包含的,一般來說都是在啟動後第一個執行的函數(如果有 init() 函數則會先執行該函數)。
  4. 下一行 /*…*/ 是注釋,在程式執行時将被忽略。單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開頭,并以 */ 結尾,且不可以嵌套使用,多行注釋一般用于包的文檔描述或注釋成塊的代碼片段。
  5. 下一行 fmt.Println(…) 可以将字元串輸出到控制台,并在最後自動增加換行字元 \n。

    使用 fmt.Print(“hello, world\n”) 可以得到相同的結果。Print 和 Println 這兩個函數也支援使用變量,如:fmt.Println(arr)。如果沒有特别指定,它們會以預設的列印格式将變量 arr 輸出到控制台。

  6. 當辨別符(包括常量、變量、類型、函數名、結構字段等等)以一個大寫字母開頭,如:Group1,那麼使用這種形式的辨別符的對象就可以被外部包的代碼所使用(用戶端程式需要先導入這個包),這被稱為導出(像面向對象語言中的 public);辨別符如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的内部是可見并且可用的(像面向對象語言中的 protected )。

需要注意的是 { 不能單獨放在一行,是以以下代碼在運作時會産生錯誤:

package main

import "fmt"

func main()  
{  // 錯誤,{ 不能在單獨的行上
    fmt.Println("Hello, World!")
}           

1.2、執行 Go 程式

方式一:輸入指令 go run hello.go 并按回車執行代碼

$ go run hello.go
Hello, World!           

方式二:還可以使用 go build 指令來生成二進制檔案,然後直接執行二進制檔案

$ go build hello.go 
$ ls
hello    hello.go
$ ./hello 
Hello, World!           

2、Go 語言基礎文法

2.1、Go 标記

Go 程式可以由多個标記組成,可以是關鍵字,辨別符,常量,字元串,符号。如以下 GO 語句由 6 個标記組成:

fmt.Println("Hello, World!")           

6 個标記是(每行一個):

1. fmt
2. .
3. Println
4. (
5. "Hello, World!"
6. )           

2.2、行分隔符

在 Go 程式中,一行代表一個語句結束。每個語句不需要像 C 家族中的其它語言一樣以分号 ; 結尾,因為這些工作都将由 Go 編譯器自動完成。

如果你打算将多個語句寫在同一行,它們則必須使用 ; 人為區分,但在實際開發中我們并不鼓勵這種做法。

以下為兩個語句:

fmt.Println("Hello, World!")
fmt.Println("菜鳥教程:runoob.com")           

2.3、注釋

注釋不會被編譯,每一個包應該有相關注釋。

單行注釋是最常見的注釋形式,你可以在任何地方使用以 // 開頭的單行注釋。多行注釋也叫塊注釋,均已以 /* 開頭,并以 */ 結尾。如:

// 單行注釋
/*
 Author by 菜鳥教程
 我是多行注釋
 */           

2.4、辨別符

辨別符用來命名變量、類型等程式實體。一個辨別符實際上就是一個或是多個字母(A~Z和a~z)數字(0~9)、下劃線_組成的序列,但是第一個字元必須是字母或下劃線而不能是數字。

以下是有效的辨別符:

mahesh   kumar   abc   move_name   a_123
myname50   _temp   j   a23b9   retVal           

以下是無效的辨別符:

  • 1ab(以數字開頭)
  • case(Go 語言的關鍵字)
  • a+b(運算符是不允許的)

2.5、字元串連接配接

Go 語言的字元串可以通過 + 實作:

package main
import "fmt"
func main() {
    fmt.Println("Google" + "Runoob")
}           

2.6、Go 語言的空格

Go 語言中變量的聲明必須使用空格隔開,如:

var age int;           

語句中适當使用空格能讓程式更易閱讀。

無空格:

fruit=apples+oranges;           

在變量與運算符間加入空格,程式看起來更加美觀,如:

fruit = apples + oranges;           

2.7、格式化字元串

Go 語言中使用 fmt.Sprintf 格式化字元串并指派給新串:

package main

import (
    "fmt"
)

func main() {
   // %d 表示整型數字,%s 表示字元串
    var stockcode=123
    var enddate="2020-12-31"
    var url="Code=%d&endDate=%s"
    var target_url=fmt.Sprintf(url,stockcode,enddate)
    fmt.Println(target_url)
}           

輸出結果為:

Code=123&endDate=2020-12-31           

3、Go 語言資料類型

在 Go 程式設計語言中,資料類型用于聲明函數和變量。

資料類型的出現是為了把資料分成所需記憶體大小不同的資料,程式設計的時候需要用大資料的時候才需要申請大記憶體,就可以充分利用記憶體。

Go 語言按類别有以下幾種資料類型:

類型 描述
布爾型 布爾型的值隻可以是常量 true 或者 false。一個簡單的例子:var b bool = true。
數字類型 整型 int 和浮點型 float32、float64,Go 語言支援整型和浮點型數字,并且支援複數,其中位的運算采用補碼。
字元串類型 字元串就是一串固定長度的字元連接配接起來的字元序列。Go 的字元串是由單個位元組連接配接起來的。Go 語言的字元串的位元組使用 UTF-8 編碼辨別 Unicode 文本。
派生類型

包括:

(a) 指針類型(Pointer)

(b) 數組類型

(c) 結構化類型(struct)

(d) Channel 類型

(e) 函數類型

(f) 切片類型

(g) 接口類型(interface)

(h) Map 類型

3.1、數字類型

Go 也有基于架構的類型,例如:int、uint 和 uintptr。

序号 類型和描述
1

uint8

無符号 8 位整型 (0 到 255)

2

uint16

無符号 16 位整型 (0 到 65535)

3

uint32

無符号 32 位整型 (0 到 4294967295)

4

uint64

無符号 64 位整型 (0 到 18446744073709551615)

5

int8

有符号 8 位整型 (-128 到 127)

6

int16

有符号 16 位整型 (-32768 到 32767)

7

int32

有符号 32 位整型 (-2147483648 到 2147483647)

8

int64

有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

3.2、浮點型

序号 類型和描述
1

float32

IEEE-754 32位浮點型數

2

float64

IEEE-754 64位浮點型數

3

complex64

32 位實數和虛數

4

complex128

64 位實數和虛數

3.3、其他數字類型

以下列出了其他更多的數字類型:

序号 類型和描述
1

byte

類似 uint8

2

rune

類似 int32

3

uint

32 或 64 位

4

int

與 uint 一樣大小

5

uintptr

無符号整型,用于存放一個指針

4、Go 語言變量

變量來源于數學,是計算機語言中能儲存計算結果或能表示值抽象概念。

變量可以通過變量名通路。

Go 語言變量名由字母、數字、下劃線組成,其中首個字元不能為數字。

聲明變量的一般形式是使用 var 關鍵字:

var identifier type           

可以一次聲明多個變量:

var identifier1, identifier2 type           
package main
import "fmt"
func main() {
    var a string = "Runoob"
    fmt.Println(a) // 輸出:Runoob

    var b, c int = 1, 2
    fmt.Println(b, c) // 輸出:1 2
}           

4.1、變量聲明

第一種,指定變量類型,如果沒有初始化,則變量預設為零值。

var v_name v_type
v_name = value           

零值就是變量沒有做初始化時系統預設設定的值。

package main
import "fmt"
func main() {

    // 聲明一個變量并初始化
    var a = "RUNOOB"
    fmt.Println(a)
    
    // 沒有初始化就為零值
    var b int
    fmt.Println(b)

    // bool 零值為 false
    var c bool
    fmt.Println(c)
}           

以上執行個體執行結果為:

RUNOOB
0
false           
  • 數值類型(包括complex64/128)為 0
  • 布爾類型為 false
  • 字元串為 “”(空字元串)
  • 以下幾種類型為 nil:
  • var a *int var a []int var a map[string] int var a chan int var a func(string) int var a error // error 是接口

第二種,根據值自行判定變量類型。

var v_name = value           
package main
import "fmt"
func main() {
    var d = true
    fmt.Println(d) //輸出:true
}           

第三種,省略 var, 注意 := 左側如果沒有聲明新的變量,就産生編譯錯誤,格式:

v_name := value           

例如:

var intVal int 
intVal := 1 // 這時候會産生編譯錯誤,因為 intVal 已經聲明,不需要重新聲明           

直接使用下面的語句即可:

intVal := 1 // 此時不會産生編譯錯誤,因為有聲明新的變量,因為 := 是一個聲明語句           

intVal := 1 相等于:

var intVal int 
intVal =1           

可以将 var f string = “Runoob” 簡寫為 f := “Runoob”:

package main
import "fmt"
func main() {
    f := "Runoob" // var f string = "Runoob"

    fmt.Println(f) //輸出:Runoob
}           

4.2、多變量聲明

// 類型相同多個變量, 非全局變量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3

var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要顯示聲明類型,自動推斷

vname1, vname2, vname3 := v1, v2, v3 // 出現在 := 左側的變量不應該是已經被聲明過的,否則會導緻編譯錯誤


// 這種因式分解關鍵字的寫法一般用于聲明全局變量
var (
    vname1 v_type1
    vname2 v_type2
)           
package main

var x, y int
var (  // 這種因式分解關鍵字的寫法一般用于聲明全局變量
    a int
    b bool
)

var c, d int = 1, 2
var e, f = 123, "hello"

// 這種不帶聲明格式的隻能在函數體中出現
// g, h := 123, "hello"

func main(){
    g, h := 123, "hello"
    println(x, y, a, b, c, d, e, f, g, h)
}           

4.3、值類型和引用類型

所有像 int、float、bool 和 string 這些基本類型都屬于值類型,使用這些類型的變量直接指向存在記憶體中的值。

  1. golang預設都是采用值傳遞,即拷貝傳遞
  2. 有些值天生就是指針(slice、map、channel)

當使用等号 = 将一個變量的值指派給另一個變量時,如:j = i,實際上是在記憶體中将 i 的值進行了拷貝。

可以通過 &i 來擷取變量 i 的記憶體位址,例如:0xf840000040(每次的位址都可能不一樣)。值類型的變量的值存儲在棧中。

記憶體位址會根據機器的不同而有所不同,甚至相同的程式在不同的機器上執行後也會有不同的記憶體位址。因為每台機器可能有不同的存儲器布局,并且位置配置設定也可能不同。

更複雜的資料通常會需要使用多個字,這些資料一般使用引用類型儲存。

一個引用類型的變量 r1 存儲的是 r1 的值所在的記憶體位址(數字),或記憶體位址中第一個字所在的位置。

這個記憶體位址稱之為指針,這個指針實際上也被存在另外的某一個值中。

同一個引用類型的指針指向的多個字可以是在連續的記憶體位址中(記憶體布局是連續的),這也是計算效率最高的一種存儲形式;也可以将這些字分散存放在記憶體中,每個字都訓示了下一個字所在的記憶體位址。

當使用指派語句 r2 = r1 時,隻有引用(位址)被複制。

如果 r1 的值被改變了,那麼這個值的所有引用都會指向被修改後的内容,在這個例子中,r2 也會受到影響。

4.4、簡短形式,使用 := 指派操作符

我們知道可以在變量的初始化時省略變量的類型而由系統自動推斷,聲明語句寫上 var 關鍵字其實是顯得有些多餘了,是以我們可以将它們簡寫為 a := 50 或 b := false。

a 和 b 的類型(int 和 bool)将由編譯器自動推斷。

這是使用變量的首選形式,但是它隻能被用在函數體内,而不可以用于全局變量的聲明與指派。使用操作符 := 可以高效地建立一個新的變量,稱之為初始化聲明。

注意事項

如果在相同的代碼塊中,我們不可以再次對于相同名稱的變量使用初始化聲明,例如:a := 20 就是不被允許的,編譯器會提示錯誤 no new variables on left side of :=,但是 a = 20 是可以的,因為這是給相同的變量賦予一個新的值。

如果你在定義變量 a 之前使用它,則會得到編譯錯誤 undefined: a。

如果你聲明了一個局部變量卻沒有在相同的代碼塊中使用它,同樣會得到編譯錯誤,例如下面這個例子當中的變量 a:

package main

import "fmt"

func main() {
   var a string = "abc"
   fmt.Println("hello, world")
}           

嘗試編譯這段代碼将得到錯誤 a declared and not used。

此外,單純地給 a 指派也是不夠的,這個值必須被使用,是以使用

fmt.Println("hello, world", a)           

會移除錯誤。

但是全局變量是允許聲明但不使用的。 同一類型的多個變量可以聲明在同一行:

var a, b, c int           

多變量可以在同一行進行指派,如:

var a, b int
var c string
a, b, c = 5, 7, "abc"           

上面這行假設了變量 a,b 和 c 都已經被聲明,否則的話應該這樣使用:

a, b, c := 5, 7, "abc"           

右邊的這些值以相同的順序指派給左邊的變量,是以 a 的值是 5, b 的值是 7,c 的值是 “abc”。

這被稱為 并行 或 同時 指派。

如果你想要交換兩個變量的值,則可以簡單地使用 a, b = b, a,兩個變量的類型必須是相同。

空白辨別符 _ 也被用于抛棄值,如值 5 在:_, b = 5, 7 中被抛棄。

_ 實際上是一個隻寫變量,你不能得到它的值。這樣做是因為 Go 語言中你必須使用所有被聲明的變量,但有時你并不需要使用從一個函數得到的所有傳回值。

并行指派也被用于當一個函數傳回多個傳回值時,比如這裡的 val 和錯誤 err 是通過調用 Func1 函數同時得到:val, err = Func1(var1)。

空白辨別符在函數傳回值時的使用:

package main

import "fmt"

func main() {
  _,numb,strs := numbers() //隻擷取函數傳回值的後兩個
  fmt.Println(numb,strs)
}

//一個可以傳回多個值的函數
func numbers()(int,int,string){
  a , b , c := 1 , 2 , "str"
  return a,b,c
}           

輸出結果:2 str

5、Go 語言常量

常量是一個簡單值的辨別符,在程式運作時,不會被修改的量。

常量中的資料類型隻可以是布爾型、數字型(整數型、浮點型和複數)和字元串型。

5.1、const

常量的定義格式:

const identifier [type] = value           

你可以省略類型說明符 [type],因為編譯器可以根據變量的值來推斷其類型。

  • 顯式類型定義: const b string = “abc”
  • 隐式類型定義: const b = “abc”

多個相同類型的聲明可以簡寫為:

const c_name1, c_name2 = value1, value2           

常量還可以用作枚舉:

const (
    Unknown = 0
    Female = 1
    Male = 2
)           

數字 0、1 和 2 分别代表未知性别、女性和男性。

常量可以用len(), cap(), unsafe.Sizeof()函數計算表達式的值。常量表達式中,函數必須是内置函數,否則編譯不過:

package main

import "unsafe"
const (
    a = "abc"
    b = len(a)
    c = unsafe.Sizeof(a)
)

func main(){
    println(a, b, c)
}           

以上執行個體運作結果為:

abc 3 16           

5.2、iota

iota,特殊常量,可以認為是一個可以被編譯器修改的常量。

iota 在 const關鍵字出現時将被重置為 0(const 内部的第一行之前),const 中每新增一行常量聲明将使 iota 計數一次(iota 可了解為 const 語句塊中的行索引)。

iota 可以被用作枚舉值:

const (
    a = iota
    b = iota
    c = iota
)           

第一個 iota 等于 0,每當 iota 在新的一行被使用時,它的值都會自動加 1;是以 a=0, b=1, c=2 可以簡寫為如下形式:

const (
    a = iota
    b
    c
)           

iota 用法

package main

import "fmt"

func main() {
    const (
            a = iota    //0
            b             //1
            c             //2
            d = "ha"   //獨立值,iota += 1
            e             //"ha"   iota += 1
            f = 100     //iota +=1
            g             //100  iota +=1
            h = iota    //7,恢複計數
            i              //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)
}           

以上執行個體運作結果為:

0 1 2 ha ha 100 100 7 8           

再看個有趣的的 iota 執行個體:

package main

import "fmt"
const (
    i=1<<iota
    j=3<<iota
    k
    l
)

func main() {
    fmt.Println("i=",i)
    fmt.Println("j=",j)
    fmt.Println("k=",k)
    fmt.Println("l=",l)
}           

以上執行個體運作結果為:

i= 1
j= 6
k= 12
l= 24           

iota 表示從 0 開始自動加 1,是以 i=1<<0, j=3<<1(<< 表示左移的意思),即:i=1, j=6,這沒問題,關鍵在 k 和 l,從輸出結果看 k=3<<2,l=3<<3。

簡單表述:

  • i=1:左移 0 位,不變仍為 1。
  • j=3:左移 1 位,變為二進制 110,即 6。
  • k=3:左移 2 位,變為二進制 1100,即 12。
  • l=3:左移 3 位,變為二進制 11000,即 24。

6、Go 語言運算符

運算符用于在程式運作時執行數學或邏輯運算。

Go 語言内置的運算符有:

  • 算術運算符
  • 關系運算符
  • 邏輯運算符
  • 位運算符
  • 指派運算符
  • 其他運算符

6.1、算術運算符

假定 A 值為 10,B 值為 20。

運算符 描述 執行個體
+ 相加 A + B 輸出結果 30
相減 A – B 輸出結果 -10
* 相乘 A * B 輸出結果 200
/ 相除 B / A 輸出結果 2
% 求餘 B % A 輸出結果 0
++ 自增 A++ 輸出結果 11
自減 A– 輸出結果 9

6.2、關系運算符

假定 A 值為 10,B 值為 20。

運算符 描述 執行個體
== 檢查兩個值是否相等,如果相等傳回 True 否則傳回 False。 (A == B) 為 False
!= 檢查兩個值是否不相等,如果不相等傳回 True 否則傳回 False。 (A != B) 為 True
> 檢查左邊值是否大于右邊值,如果是傳回 True 否則傳回 False。 (A > B) 為 False
< 檢查左邊值是否小于右邊值,如果是傳回 True 否則傳回 False。 (A < B) 為 True
>= 檢查左邊值是否大于等于右邊值,如果是傳回 True 否則傳回 False。 (A >= B) 為 False
<= 檢查左邊值是否小于等于右邊值,如果是傳回 True 否則傳回 False。 (A <= B) 為 True

6.3、邏輯運算符

假定 A 值為 True,B 值為 False。

運算符 描述 執行個體
&& 邏輯 AND 運算符。 如果兩邊的操作數都是 True,則條件 True,否則為 False。 (A && B) 為 False
|| 邏輯 OR 運算符。 如果兩邊的操作數有一個 True,則條件 True,否則為 False。 (A || B) 為 True
! 邏輯 NOT 運算符。 如果條件為 True,則邏輯 NOT 條件 False,否則為 True。 !(A && B) 為 True

6.4、位運算符

位運算符對整數在記憶體中的二進制位進行操作。

假定 A 為60,B 為13:

運算符 描述 執行個體
& 按位與運算符”&”是雙目運算符。 其功能是參與運算的兩數各對應的二進位相與。 (A & B) 結果為 12, 二進制為 0000 1100
| 按位或運算符”|”是雙目運算符。 其功能是參與運算的兩數各對應的二進位相或 (A | B) 結果為 61, 二進制為 0011 1101
^ 按位異或運算符”^”是雙目運算符。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。 (A ^ B) 結果為 49, 二進制為 0011 0001
<< 左移運算符”<<“是雙目運算符。左移n位就是乘以2的n次方。 其功能把”<<“左邊的運算數的各二進位全部左移若幹位,由”<<“右邊的數指定移動的位數,高位丢棄,低位補0。 A << 2 結果為 240 ,二進制為 1111 0000
>> 右移運算符”>>”是雙目運算符。右移n位就是除以2的n次方。 其功能是把”>>”左邊的運算數的各二進位全部右移若幹位,”>>”右邊的數指定移動的位數。 A >> 2 結果為 15 ,二進制為 0000 1111

6.5、指派運算符

運算符 描述 執行個體
= 簡單的指派運算符,将一個表達式的值賦給一個左值 C = A + B 将 A + B 表達式結果指派給 C
+= 相加後再指派 C += A 等于 C = C + A
-= 相減後再指派 C -= A 等于 C = C – A
*= 相乘後再指派 C *= A 等于 C = C * A
/= 相除後再指派 C /= A 等于 C = C / A
%= 求餘後再指派 C %= A 等于 C = C % A
<<= 左移後指派 C <<= 2 等于 C = C << 2
>>= 右移後指派 C >>= 2 等于 C = C >> 2
&= 按位與後指派 C &= 2 等于 C = C & 2
^= 按位異或後指派 C ^= 2 等于 C = C ^ 2
|= 按位或後指派 C |= 2 等于 C = C | 2

6.6、其他運算符

運算符 描述 執行個體
& 傳回變量存儲位址 &a; 将給出變量的實際位址。
* 指針變量。 *a; 是一個指針變量

6.7、運算符優先級

有些運算符擁有較高的優先級,二進制運算符的運算方向均是從左至右。下表列出了所有運算符以及它們的優先級,由上至下代表優先級由高到低:

優先級 運算符
5 * / % << >> & &^
4 + – | ^
3 == != < <= > >=
2 &&
1 ||

當然,你可以通過使用括号來臨時提升某個表達式的整體運算優先級。

7、Go 語言條件語句

條件語句需要開發者通過指定一個或多個條件,并通過測試條件是否為 true 來決定是否執行指定語句,并在條件為 false 的情況在執行另外的語句。

下圖展示了程式語言中條件語句的結構:

Go 語言結構 – 基礎篇(文法、資料類型、變量、常量、運算符)

Go 語言提供了以下幾種條件判斷語句:

語句 描述
if 語句 if 語句 由一個布爾表達式後緊跟一個或多個語句組成。
if…else 語句 if 語句 後可以使用可選的 else 語句, else 語句中的表達式在布爾表達式為 false 時執行。
if 嵌套語句 你可以在 if 或 else if 語句中嵌入一個或多個 if 或 else if 語句。
switch 語句 switch 語句用于基于不同條件執行不同動作。
select 語句 select 語句類似于 switch 語句,但是select會随機執行一個可運作的case。如果沒有case可運作,它将阻塞,直到有case可運作。

注意:Go 沒有三目運算符,是以不支援 ?: 形式的條件判斷。

7.1、Go 語言循環語句

在不少實際問題中有許多具有規律性的重複操作,是以在程式中就需要重複執行某些語句。

以下為大多程式設計語言循環程式的流程圖:

Go 語言結構 – 基礎篇(文法、資料類型、變量、常量、運算符)

Go 語言提供了以下幾種類型循環處理語句:

循環類型 描述
for 循環 重複執行語句塊
循環嵌套 在 for 循環中嵌套一個或多個 for 循環

7.2、循環控制語句

循環控制語句可以控制循環體内語句的執行過程。

GO 語言支援以下幾種循環控制語句:

控制語句 描述
break 語句 經常用于中斷目前 for 循環或跳出 switch 語句
continue 語句 跳過目前循環的剩餘語句,然後繼續進行下一輪循環。
goto 語句 将控制轉移到被标記的語句。

7.3、無限循環

如果循環中條件語句永遠不為 false 則會進行無限循環,我們可以通過 for 循環語句中隻設定一個條件表達式來執行無限循環:

package main

import "fmt"

func main() {
    for true  {
        fmt.Printf("這是無限循環。\n");
    }
}           

繼續閱讀