解讀golang中的const常量和iota
golang中的const常量和iota
golang中通過var定義變量,通過const定義常量。
常量只能是基本的簡單值類型,常量一經(jīng)定義其值不可修改(類比Java中的final)。
const ( ?? ?MaxInt = int(^uint(0) >> 1) ?? ?MinInt = -MaxInt - 1 ) const PI = 3.14 PI = 3.14159//編譯錯誤,Cannot assign to PI
iota
是一個特殊常量,可以認(rèn)為是一個可以被編譯器修改的常量。iota
在const關(guān)鍵字出現(xiàn)時將被重置為0,const中每新增一行常量聲明將使 iota 計數(shù)加1,因此iota可作為const 語句塊中的行索引。
const ( ?? ?a ? = 1 ? ? ? ? ? ? ? ? ?//1 (iota=0) ?? ?b ? ? ? ? ? ? ? ? ? ? ? ?//1 (iota=1,同上一行,相當(dāng)于寫b=1) ?? ?c ? = b + iota ? ? ? ? ? //3 (iota=2,b=1) ?? ?d ? ? ? ? ? ? ? ? ? ? ? ?//4 (iota=3,同上一行,相當(dāng)于寫b+iota,b=1) ?? ?e ? ? ? ? ? ? ? ? ? ? ? ?//5 (iota=4,同上一行,相當(dāng)于寫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定義常量
在所有的編程語言當(dāng)中常量都代表一個固定的值,一旦常量被定義則無法修改。在Golang中使用const關(guān)鍵字進(jìn)行常量聲明。
定義常量
Golang定義常規(guī)類型的常量可以忽略類型。
const SUCCESS = true const FAIL = false
定義多個相同類型的常量
const ( CONST1 = 0 CONST2 = 1 CONST3 = 2 )
定義特定類型的常量
定義特定類型的常量需要根據(jù)實(shí)際情況來決定。
假如我們現(xiàn)在用常量來聲明用戶的三個基本狀態(tài)(正常,禁止登錄,刪除),一般這種情況我們會首先聲明一個用戶狀態(tài)的類型。
聲明用戶狀態(tài)類型:
type UserStatus int
定義用戶狀態(tài)常量:
const ( USER_STATUS_NORMAL UserStatus = iota USER_STATUS_DISABLED_LOGIN USER_STATUS_DELETE )
完整示例:
package user //Status 用戶類型. type Status int const ( //STATUS_NORMAL 狀態(tài)正常 STATUS_NORMAL Status = iota //STATUS_DISABLED_LOGIN 禁止登錄. STATUS_DISABLED_LOGIN //STATUS_DELETE 已刪除. STATUS_DELETE )
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go使用Protocol?Buffers在數(shù)據(jù)序列化的優(yōu)勢示例詳解
這篇文章主要為大家介紹了Go使用Protocol?Buffers在數(shù)據(jù)序列化的優(yōu)勢示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Go?WaitGroup及Cond底層實(shí)現(xiàn)原理
這篇文章主要為大家介紹了Go?WaitGroup及Cond底層實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08分析Go錯誤處理優(yōu)化go?recover機(jī)制缺陷
這篇文章主要為大家介紹了分析Go錯誤處理優(yōu)化go?recover機(jī)制缺陷示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Golang觀察者模式優(yōu)化訂單處理系統(tǒng)實(shí)例探究
當(dāng)涉及到訂單處理系統(tǒng)時,觀察者設(shè)計模式可以用于實(shí)現(xiàn)訂單狀態(tài)的變化和通知,在這篇文章中,我們將介紹如何使用Golang來實(shí)現(xiàn)觀察者設(shè)計模式,并提供一個基于訂單處理系統(tǒng)的代碼示例2024-01-01go語言基礎(chǔ) seek光標(biāo)位置os包的使用
這篇文章主要介紹了go語言基礎(chǔ) seek光標(biāo)位置os包的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05Golang泛型實(shí)現(xiàn)類型轉(zhuǎn)換的方法實(shí)例
將一個值從一種類型轉(zhuǎn)換到另一種類型,便發(fā)生了類型轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Golang泛型實(shí)現(xiàn)類型轉(zhuǎn)換的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12