最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文搞懂Golang中iota的用法和原理

 更新時間:2022年08月30日 08:18:12   作者:yi個俗人  
我們知道iota是go語言的常量計數(shù)器,本文嘗試全面總結其使用用法以及其實現(xiàn)原理,需要的朋友可以參考以下內容,希望對大家有所幫助

前言

我們知道iota是go語言的常量計數(shù)器,只能在常量的const表達式中使用,在const關鍵字出現(xiàn)的時將被重置為0,const中每新增一行常量聲明iota值自增1(iota可以理解為const語句塊中的行索引),使用iota可以簡化常量的定義,但其規(guī)則必須要牢牢掌握,否則在我們開發(fā)中可能會造成誤解,本文嘗試全面總結其使用用法以及其實現(xiàn)原理,需要的朋友可以參考以下內容,希望對大家有幫助。

iota的使用

iota在const關鍵字出現(xiàn)時將被重置為0

iota只能在常量的表達式中使用,iotaconst關鍵字出現(xiàn)時將被重置為0。不同const定義塊互不干擾。

//const關鍵字出現(xiàn)時將被重置為0
const (
    a = iota  //0
    b         //1
)
//不同const定義塊互不干擾
const (
    c = iota //0
)

按行計數(shù)

const每新增一行常量聲明,iota計數(shù)一次,可以當做const語句中的索引,常用于定義枚舉數(shù)據(jù)。

const (
    n1 = iota //0
    n2 		  //1
    n3 		  //2
    n4 		  //3
)

所有注釋行和空行全部忽略

所有注釋行和空行在編譯時期首先會被清除,所以空行不計數(shù)。

const (
    a = iota  //0
    
    b		  //1
    
    //此行是注釋
    c         //2
)

跳值占位

如果某個值不需要,可以使用占位 “_”,它不是空行,會進行計數(shù),起到跳值作用。

const (
    a = iota //0
    _
    b        //2
)

多個iota

同一const塊出現(xiàn)多個iota,只會按照行數(shù)計數(shù),不會重新計數(shù)。

const (
    a = iota     // a=0
    b = iota     // b=1
    c = iota     // c=2
  )

一行多個iota

一行多個iota,分別計數(shù)。

const (
    a, b = iota, iota // a=0,b=0
    c, d              // c=1,d=1
)

首行插隊

開頭插隊會進行計數(shù)。

const (
    a = 100 //  a=100
    b = iota // b=1
    c = iota // c=2
    d        // d=3
)

中間插隊

中間插隊會進行計數(shù)。

const (
    a = iota // a=0
    b = 100  // b=100
    c = iota // c=2
    d        // d=3
)

沒有表達式的常量定義復用上一行的表達式

const (
   a = iota       //  iota = 0 
   b = 1 + iota  // iota = 1
   c           // iota = 2
)

實現(xiàn)原理

iota定義

iota 源碼在 Go 語言代碼庫中的定義位于內建文件 go/src/builtin/builtin.go 中:

const iota = 0 // Untyped int.iota

在這里聲明了一個常量標識符,它的值是0;iota只是一個簡單的整數(shù)0,為什么能作為常量計數(shù)器進行自增的,我們再看一下const的實現(xiàn)。

const

const 塊中每一行在 Go 中使用 spec 數(shù)據(jù)結構描述, spec 聲明如下:

ValueSpec struct {
 Doc *CommentGroup // associated documentation; or nil
 Names []*Ident // value names (len(Names) > 0)
 Type Expr // value type; or nil
 Values []Expr // initial values; or nil
 Comment *CommentGroup // line comments; or nil
}

在這個結構體中有一個切片 ValueSpec.Names,此切片中保存了一行中定義的常量,如果一行定義N個常量,那么 ValueSpec.Names 切片長度即為N。

const塊實際上是spec類型的切片,用于表示const中的多行。

編譯期間構造常量時的偽算法如下:

for iota, spec := range ValueSpecs {
 for i, name := range spec.Names {
 obj := NewConst(name, iota...) //此處將iota傳入,用于構造常量
 ...
 }
}

iota實際上是遍歷const塊的索引,每行中即便多次使用iota,其值也不會遞增。

到此這篇關于一文搞懂Golang中iota的用法和原理的文章就介紹到這了,更多相關Golang iota內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • go panic時如何讓函數(shù)返回數(shù)據(jù)?

    go panic時如何讓函數(shù)返回數(shù)據(jù)?

    今天小編就為大家分享一篇關于go panic時如何讓函數(shù)返回數(shù)據(jù)?,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Go語言執(zhí)行cmd命令庫的方法實現(xiàn)

    Go語言執(zhí)行cmd命令庫的方法實現(xiàn)

    go語言用來執(zhí)行一個系統(tǒng)的命令相對python來說還是有點復雜的,執(zhí)行命令是一個非常常見的需求,本文主要介紹了Go語言執(zhí)行cmd命令庫的方法實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • Go語言實現(xiàn)IP段范圍校驗示例

    Go語言實現(xiàn)IP段范圍校驗示例

    這篇文章主要介紹了Go語言實現(xiàn)IP段范圍校驗示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Go與Redis實現(xiàn)分布式互斥鎖和紅鎖

    Go與Redis實現(xiàn)分布式互斥鎖和紅鎖

    這篇文章主要介紹了Go與Redis實現(xiàn)分布式互斥鎖和紅鎖,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Go 如何批量修改文件名

    Go 如何批量修改文件名

    這篇文章主要介紹了Go 批量修改文件名的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Golang接口的定義與空接口及斷言的使用示例

    Golang接口的定義與空接口及斷言的使用示例

    在?Golang?中,接口是一種類型,它是由一組方法簽名組成的抽象集合。這篇文章主要為大家介紹了Golang接口的具體使用,希望對大家有所幫助,空接口是特殊形式的接口類型,普通的接口都有方法,而空接口沒有定義任何方法口,也因此,我們可以說所有類型都至少實現(xiàn)了空接口
    2023-04-04
  • Go語言題解LeetCode705設計哈希集合

    Go語言題解LeetCode705設計哈希集合

    這篇文章主要為大家介紹了Go語言題解LeetCode705設計哈希集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • vscode插件設置之Golang開發(fā)環(huán)境配置全過程

    vscode插件設置之Golang開發(fā)環(huán)境配置全過程

    go語言開發(fā)選擇vscode作為IDE工具也是一個不錯的選擇,下面這篇文章主要給大家介紹了關于vscode插件設置之Golang開發(fā)環(huán)境配置的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 減少 golang 二進制文件大小操作

    減少 golang 二進制文件大小操作

    這篇文章主要介紹了減少 golang 二進制文件大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言實現(xiàn)AOI區(qū)域視野管理流程詳解

    Go語言實現(xiàn)AOI區(qū)域視野管理流程詳解

    在游戲中,場景里存在大量的物體.如果我們把所有物體的變化都廣播給玩家.那客戶端很難承受這么大的壓力.因此我們肯定會做優(yōu)化.把不必要的信息過濾掉.如只關心玩家視野所看到的.減輕客戶端的壓力,給玩家更流暢的體驗
    2023-03-03

最新評論

泸西县| 襄樊市| 房山区| 雷州市| 新田县| 镇赉县| 色达县| 伽师县| 麻栗坡县| 韩城市| 新邵县| 吉木萨尔县| 专栏| 乌拉特前旗| 当雄县| 河间市| 南靖县| 厦门市| 丹阳市| 奉新县| 锡林浩特市| 涟源市| 马山县| 洪湖市| 东源县| 永福县| 株洲县| 永州市| 泽州县| 连平县| 申扎县| 通榆县| 赤水市| 临安市| 池州市| 科尔| 宁乡县| 台中县| 昌黎县| 嵊州市| 浦江县|