日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Go 学习笔记(7)— 常量定义、常量使用、枚举用法、iota 常量、不设置初始值常量

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 学习笔记(7)— 常量定义、常量使用、枚举用法、iota 常量、不设置初始值常量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 常量定義及分類

1.1 定義

常量是指在程序運行時,不會被修改的量。

常量中的數據類型只可以是布爾型、數字型(整數型、浮點型和復數)和字符串型。

常量的定義格式:

const identifier [type] = value

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

  • 顯式類型定義
const b string = "abc"
  • 隱式類型定義
const b = "abc"

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

const name1, name2 = value1, value2

1.2 分類

2. 常量使用

package mainimport "fmt"func main() {const LENGTH int = 10const WIDTH int = 5   var area intconst a, b, c = 1, false, "str" //多重賦值area = LENGTH * WIDTHfmt.Printf("面積為 : %d", area)println()println(a, b, c)   
}

輸出結果為:

面積為 : 50
1 false str

3. 常量作為枚舉

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

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

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

在包一級聲明語句聲明的名字可在整個包對應的每個源文件中訪問,而不是僅僅在其聲明語句所在的源文件中訪問。如下代碼中的 a 、 b 、 c 。

package mainimport "unsafe"
const (a = "abc"b = len(a)c = unsafe.Sizeof(a)
)func main(){println(a, b, c)
}

運行結果為:

abc 3 16

注意:字符串類型在 go 里是個結構, 包含指向底層數組的指針和長度,這兩部分每部分都是 8 個字節,所以字符串類型大小為 16 個字節。

4. iota 常量

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

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

iota 可以被用作枚舉值:

const (a = iotab = iotac = iota
)

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

const (a = iotabc
)

使用示例

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

輸出結果為:

0 1 2 ha ha 100 100 7 8

4.1 const 作用域只在當前的括號范圍內

iota 的含義是初始化一個計數器,這個計數器的影響范圍只能是 const 后括號作用域范圍內的常量。

package mainimport ("fmt"
)func main() {const (a = iotabcde)const (A = iotaBCD)fmt.Println(a, b, c, d, e)fmt.Println(A, B, C)
}

輸出結果如下:

0 1 2 3 4
0 1 2

iota 把初始值 0 賦給 a 后,自增 1,此時 iota 等于1,隨后將 1 賦值給常量 b,賦值完成后,iota 又自增 1,此時 iota 等于2,這個自增過程,只會出現在 const 后括號范圍內,超過這個括號作為域。再次使用 iota 時,其初始值為 0。從輸出結果可知,常量 A 從 0 開始,可以證實這個觀點。

4.2 const 作用域內,iota 自增 1

package mainimport ("fmt"
)func main() {const (NUM1 = iotaNUM2NUM3 = iotaNUM4NUM5)const (A = iotaBCD)fmt.Println(NUM1, NUM2, NUM3, NUM4, NUM5)fmt.Println(A, B, C)
}

輸出信息是:

0 1 2 3 4
0 1 2

4.3 iota 不會自動初始化括號作用域內 iota 前邊的常量

// 錯誤示例代碼
func main() {const (a bc = iotade)fmt.Println(a, b, c, d, e)
}編譯時產生的錯誤信息:
./hello.go:9:9: missing value in const declaration
./hello.go:10:9: missing value in const declaration
./hello.go:15:17: undefined: a
./hello.go:15:20: undefined: b

從上邊的示例代碼中可以得知,iota 并不會給括號作用域范圍內使用 iota 賦值的那個常量之前的常量賦值,只會給括號作用域內使用 iota 初始化的那個常量后邊的所有常量自增 1 后賦值。

4.4 設定從某個特定初始值開始

iota 默認初始值為 0,我們可以定義的常量初始值從 10 開始,代碼如下:

func main() {const (a = 10 + iotabcde)fmt.Println(a, b, c, d, e)
}

輸出結果:

10 11 12 13 14

當使用帶 iota 的表達式初始化常量時,括號作用域內,后邊的常量在初始化時,也會使用這個表達式進行初始化。相當于初始化表達式是:10+1,b 初始化的值是:10+2,以此類推。整個初始化過程中,依然是 iota 在自增 1。

4.5 const 常量帶有多個 iota 表達式

func main() {const (a = iota + 10b = iotac = iota + 5de)fmt.Println(a, b, c, d, e)
}

輸出信息是:

10 1 7 8 9

從上邊的輸出信息可以得知,在使用表達式初始化常量時,會使用離被初始化常量前邊最近的那個表達式。如初始化 c 時,使用的是 2+5,初始化 b 時,使用的是 iota,此時的 iota 值為 1。

5. 定義常量組不設置初始值

在定義常量組時,如果不提供初始值,則表示將使用上行的表達式值。

package mainimport "fmt"const (a = 1bcd
)func main() {fmt.Println(a)// b、c、d沒有初始化,使用上一行(即a)的值fmt.Println(b)   // 輸出1fmt.Println(c)   // 輸出1fmt.Println(d)   // 輸出1
}

總結

以上是生活随笔為你收集整理的Go 学习笔记(7)— 常量定义、常量使用、枚举用法、iota 常量、不设置初始值常量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。