解讀golang中的const常量和iota
golang中的const常量和iota
golang中通過(guò)var定義變量,通過(guò)const定義常量。
常量只能是基本的簡(jiǎn)單值類(lèi)型,常量一經(jīng)定義其值不可修改(類(lèi)比Java中的final)。
const ( ?? ?MaxInt = int(^uint(0) >> 1) ?? ?MinInt = -MaxInt - 1 ) const PI = 3.14 PI = 3.14159//編譯錯(cuò)誤,Cannot assign to PI
iota是一個(gè)特殊常量,可以認(rèn)為是一個(gè)可以被編譯器修改的常量。iota在const關(guān)鍵字出現(xiàn)時(shí)將被重置為0,const中每新增一行常量聲明將使 iota 計(jì)數(shù)加1,因此iota可作為const 語(yǔ)句塊中的行索引。
const ( ?? ?a ? = 1 ? ? ? ? ? ? ? ? ?//1 (iota=0) ?? ?b ? ? ? ? ? ? ? ? ? ? ? ?//1 (iota=1,同上一行,相當(dāng)于寫(xiě)b=1) ?? ?c ? = b + iota ? ? ? ? ? //3 (iota=2,b=1) ?? ?d ? ? ? ? ? ? ? ? ? ? ? ?//4 (iota=3,同上一行,相當(dāng)于寫(xiě)b+iota,b=1) ?? ?e ? ? ? ? ? ? ? ? ? ? ? ?//5 (iota=4,同上一行,相當(dāng)于寫(xiě)b+iota,b=1) ?? ?f ? = "last one but one" // ?(iota=5) ?? ?end = iota ? ? ? ? ? ? ? //6 (iota=6) ) fmt.Println(a, reflect.TypeOf(a)) fmt.Println(b, reflect.TypeOf(b)) fmt.Println(c, reflect.TypeOf(c)) fmt.Println(d, reflect.TypeOf(d)) fmt.Println(e, reflect.TypeOf(e)) fmt.Println(f, reflect.TypeOf(f)) fmt.Println(end, reflect.TypeOf(end)) /*? 輸出: 1 int 1 int 3 int 4 int 5 int last one but one string 6 int */
golang定義常量
在所有的編程語(yǔ)言當(dāng)中常量都代表一個(gè)固定的值,一旦常量被定義則無(wú)法修改。在Golang中使用const關(guān)鍵字進(jìn)行常量聲明。
定義常量
Golang定義常規(guī)類(lèi)型的常量可以忽略類(lèi)型。
const SUCCESS = true const FAIL = false
定義多個(gè)相同類(lèi)型的常量
const ( CONST1 = 0 CONST2 = 1 CONST3 = 2 )
定義特定類(lèi)型的常量
定義特定類(lèi)型的常量需要根據(jù)實(shí)際情況來(lái)決定。
假如我們現(xiàn)在用常量來(lái)聲明用戶(hù)的三個(gè)基本狀態(tài)(正常,禁止登錄,刪除),一般這種情況我們會(huì)首先聲明一個(gè)用戶(hù)狀態(tài)的類(lèi)型。
聲明用戶(hù)狀態(tài)類(lèi)型:
type UserStatus int
定義用戶(hù)狀態(tài)常量:
const ( USER_STATUS_NORMAL UserStatus = iota USER_STATUS_DISABLED_LOGIN USER_STATUS_DELETE )
完整示例:
package user //Status 用戶(hù)類(lèi)型. type Status int const ( //STATUS_NORMAL 狀態(tài)正常 STATUS_NORMAL Status = iota //STATUS_DISABLED_LOGIN 禁止登錄. STATUS_DISABLED_LOGIN //STATUS_DELETE 已刪除. STATUS_DELETE )
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Golang設(shè)計(jì)一套可控的定時(shí)任務(wù)系統(tǒng)
這篇文章主要為大家學(xué)習(xí)介紹了如何基于Golang設(shè)計(jì)一套可控的定時(shí)任務(wù)系統(tǒng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07
Golang實(shí)現(xiàn)將中文轉(zhuǎn)化為拼音
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Golang實(shí)現(xiàn)將中文轉(zhuǎn)化為拼音功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02
Golang使用Zookeeper實(shí)現(xiàn)分布式鎖
分布式鎖是一種在分布式系統(tǒng)中用于控制并發(fā)訪(fǎng)問(wèn)的機(jī)制,ZooKeeper?和?Redis?都是常用的實(shí)現(xiàn)分布式鎖的工具,本文就來(lái)使用Zookeeper實(shí)現(xiàn)分布式鎖,希望對(duì)大家有所幫助2024-02-02
一文帶你掌握Go語(yǔ)言并發(fā)模式中的Context的上下文管理
在?Go?的日常開(kāi)發(fā)中,Context?上下文對(duì)象無(wú)處不在,無(wú)論是處理網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)庫(kù)操作還是調(diào)用?RPC?等場(chǎng)景,那你真的熟悉它的正確用法嗎,隨著本文一探究竟吧2023-05-05

