国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

go語言枚舉類型怎么用

馬哥Linux運維 ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2021-09-02 09:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

go 語言枚舉類型是這么用的?在什么場景下會用到枚舉?本文對 go 語言枚舉做了詳細講解。

枚舉,是一種重要的數(shù)據(jù)類型,由一組鍵值對組成,通常用來在編程語言中充當(dāng)常量的標(biāo)識符。在主流行編程語言如 c、 java 等,都有原生支持。在 go 中,大家卻找不到 enum 或者其它直接用來聲明枚舉類型的關(guān)鍵字。從熟悉其它編程語言的開發(fā)者轉(zhuǎn)用 go 編程,剛開始會比較難接受這種情況。其實,如果你看到如何在 go 中表示枚舉類型時,可能會感受到 go 語言設(shè)計者對簡潔性、問題考慮的深度,是一般資淺工程師無法比擬的。

其實,在 go 語言設(shè)計者的眼里,enum 本質(zhì)是常量,為什么要多余一個關(guān)鍵字呢?在 go 只是沒有 enum 關(guān)鍵字而已,其表現(xiàn)枚舉的形式,與其它語言別無太大區(qū)別。下面來看看如果在 go 中表示枚舉。

學(xué)習(xí)、使用一門語言,是學(xué)習(xí)、理解語言本身的設(shè)計哲學(xué),同時也會感受到設(shè)計者的性格特點。

基礎(chǔ)工作

為了下面講解方便,這里使用 go modules 的方式先建立一個簡單工程。

~/Projects/go/examples

? mkdir enum

~/Projects/go/examples

? cd enum

~/Projects/go/examples/enum

? go mod init enum

go: creating new go.mod: module enum

~/Projects/go/examples/enum

? touch enum.go

const + iota

以 啟動、運行中、停止 這三個狀態(tài)為例,使用 const 關(guān)鍵來聲明一系列的常量值。在 enum.go 中寫上以下內(nèi)容:

package main

import “fmt”const (

Running int = iota

Pending

Stopped

func main() {

fmt.Println(“State running: ”, Running)

fmt.Println(“State pending: ”, Pending)

fmt.Println(“State Stoped: ”, Stopped)

}

保存并運行,可以得到以下結(jié)果,

~/Projects/go/examples/enum

? go run enum.go

State running: 0

State pending: 1

State Stoped: 2

在說明發(fā)生了什么之前,我們先看來一件東西,iota。相比于 c、java,go 中提供了一個常量計數(shù)器,iota,它使用在聲明常量時為常量連續(xù)賦值。

比如這個例子,

const (

a int = iota // a = 0

b int = iota // b = 1

c int = iota // c = 2

const d int = iota // d = 0

在一個 const 聲明塊中,iota 的初始值為 0,每聲明一個變量,自增 1。以上的代碼可以簡化成:

const (

a int = iota // a = 0

b // b = 1

c // c = 2

const d int = iota // d = 0

設(shè)想一下,如果此時有 50 或者 100 個常量數(shù),在 c 和 java 語言中寫出來會是什么情況。

關(guān)于 iota,有更多的具體的技巧(例如跳數(shù)),詳細請看官方定義 iota

通過使用 const 來定義一連串的常量,并借助 iota 常量計數(shù)器,來快速的為數(shù)值類型的常量連續(xù)賦值,非常方便。雖然沒有了 enum 關(guān)鍵字,在這種情況下發(fā)現(xiàn),是多余的,枚舉本質(zhì)上就是常量的組合。

當(dāng)然,你可以使用以下方式,來更接近其它語言的 enum,

// enum.go

...

type State intconst (

Running State = iota

Pending

Stopped

...

把一組常量值,使用一個類型別名包裹起來,是不是更像其它語言中的 enum {} 定義了呢?

你還可以將上面的例子改為:

// enum.go

...

type State intconst (

Running State = iota

Pending

Stopped

func (s State) String() string {

switch s {

case Running:

return “Running”

case Pending:

return “Pending”

case Stopped:

return “Stopped”

default:

return “Unknown”

}

}

...

為定義的枚舉類型加上 String 函數(shù),運行結(jié)果如下:

~/Projects/go/examples/enum

? go run enum.go

State running: Running

State pending: Pending

State Stoped: Stopped

是不是很魔幻,思路一下又開闊一些,長見識了。把實際的值與打印字符分開,一般語言設(shè)計者不會想到。看到這里,有沒有這種的感覺,go 語言的設(shè)計者并不是偷懶,而是為了可以偷懶想了很多、做了很多。

轉(zhuǎn)自:

youwu.today/skill/backend/using-enum-in-golang/

文章轉(zhuǎn)載:OSC開源社區(qū)

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    4203

    瀏覽量

    46120
  • 枚舉
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    4853
  • go語言
    +關(guān)注

    關(guān)注

    1

    文章

    159

    瀏覽量

    9778

原文標(biāo)題:Golang 如何表示枚舉類型

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于凌羽派的OpenHarmony北向應(yīng)用開發(fā):ArkTS語法-數(shù)據(jù)類型和變量聲明

    將創(chuàng)建包含三個元素的數(shù)組: let names: string[] = [\'Alice\', \'Bob\', \'Carol\']; 2.4.7 enum類型 enum類型,即枚舉類型
    發(fā)表于 02-26 14:24

    數(shù)字萬表的類型、原理與應(yīng)用

    功能于一體,具備高精度、高穩(wěn)定性與操作便捷等優(yōu)勢,廣泛應(yīng)用于電路調(diào)試、設(shè)備維護、教學(xué)實驗及工業(yè)自動化等領(lǐng)域。本文將系統(tǒng)介紹數(shù)字萬表的主要類型、工作原理、功能特點及其在實際應(yīng)用中的關(guān)鍵作用。 ? 一、數(shù)字萬表的主要
    的頭像 發(fā)表于 02-24 15:13 ?90次閱讀
    數(shù)字萬<b class='flag-5'>用</b>表的<b class='flag-5'>類型</b>、原理與應(yīng)用

    Go 語言高并發(fā)服務(wù)設(shè)計與性能調(diào)優(yōu)實戰(zhàn):從萬級到百萬級并發(fā)的演進之路

    在2026年的今天,Go 語言已成為高并發(fā)后端服務(wù)的首選語言。根據(jù) Stack Overflow 最新開發(fā)者調(diào)查: 指標(biāo) 數(shù)據(jù) Go 語言
    發(fā)表于 02-18 19:19

    C語言主要特點

    指針類型數(shù)據(jù),使用十分靈活和多樣化,能用來實現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如鏈表、樹、棧等)的運算。 4.具有結(jié)構(gòu)化的控制語句。函數(shù)作為程序的模塊單位,便于實現(xiàn)程序的模塊化。C語言是完全模塊化和結(jié)構(gòu)化的
    發(fā)表于 01-05 07:41

    低成本TLI4971/TLE4971電流傳感器評估套件——MS2Go與S2Go

    低成本TLI4971/TLE4971電流傳感器評估套件——MS2Go與S2Go 在電子工程師的日常工作中,電流傳感器的評估和應(yīng)用是一個重要的環(huán)節(jié)。今天我們要介紹的是英飛凌(Infineon
    的頭像 發(fā)表于 12-19 16:50 ?827次閱讀

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:開啟3D磁傳感器評估之旅

    探索TLE493D-P3XX-MS2GO 3D 2Go套件:開啟3D磁傳感器評估之旅 在電子工程師的日常工作中,評估和開發(fā)磁傳感器是一項常見且重要的任務(wù)。英飛凌(Infineon
    的頭像 發(fā)表于 12-18 17:15 ?810次閱讀

    枚舉類型的講解

    枚舉是一個基本的數(shù)據(jù)類型,它可以讓數(shù)據(jù)更簡潔。 如果寫一個判斷星期的文章,我們當(dāng)然可以使用宏定義來使代碼更加易懂,不過: #define MON 1 #define TUE 2
    發(fā)表于 12-08 08:14

    C語言自動類型轉(zhuǎn)換

    一、自動類型轉(zhuǎn)換 數(shù)據(jù)類型存在自動轉(zhuǎn)換的情況. 自動轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型運算時,在編譯的時候自動完成。 char類型數(shù)據(jù)轉(zhuǎn)換為int類型
    發(fā)表于 11-25 08:04

    C語言強制類型轉(zhuǎn)換

    強制類型轉(zhuǎn)換是通過定義類型轉(zhuǎn)換運算來實現(xiàn)的。其一般形式為: (數(shù)據(jù)類型) (表達式) 其作用是把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型
    發(fā)表于 11-24 06:32

    漢思新材料:光模塊封裝類型及選擇要點

    光模塊封裝類型及選擇要點在光模塊的制造中,膠水的選擇確實關(guān)鍵,它直接影響到產(chǎn)品的性能和長期可靠性。不同工藝環(huán)節(jié)需要使用不同類型的膠水,以下是
    的頭像 發(fā)表于 10-30 15:41 ?759次閱讀
    漢思新材料:光模塊封裝<b class='flag-5'>用</b>膠<b class='flag-5'>類型</b>及選擇要點

    【VisionFive 2單板計算機試用體驗】3、開源大語言模型部署

    github里的build from source指導(dǎo),進行編譯,編譯步驟如下圖所示: 在調(diào)用go run . serve發(fā)現(xiàn)抱錯:go指令不存在,這是因為VisionFive2板卡沒有安裝go,下面我們
    發(fā)表于 07-19 15:45

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據(jù)情況配置它們。因此我們定義一個IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有
    的頭像 發(fā)表于 07-16 16:26 ?1407次閱讀

    自簽名證書工具cfssl詳解

    CFSSL(CloudFlare's PKI and TLS toolkit)由 CloudFlare go語言開發(fā)的一個開源工具,用于證書簽名、驗證和管理。
    的頭像 發(fā)表于 06-11 16:30 ?703次閱讀
    自簽名證書工具cfssl詳解

    如何重新啟動 FX3S 的枚舉過程?

    。 然而,我面臨的一個問題是,如果 FX3S 最初沒有連接到 USB 3.0 電纜和 PC,它就不會重新啟動枚舉過程。 在這種情況下,有人能指導(dǎo)我如何重新啟動 FX3S 的枚舉過程嗎? 或者如果 USB 速度不是超高速,如何在 10 秒后重新啟動
    發(fā)表于 05-19 07:34

    從 Java 到 Go:面向?qū)ο蟮木奕伺c云原生的輕騎兵

    Go 語言在 2009 年被 Google 推出,在創(chuàng)建之初便明確提出了“少即是多(Less is more)”的設(shè)計原則,強調(diào)“以工程效率為核心,極簡規(guī)則解決復(fù)雜問題”。它與 Java
    的頭像 發(fā)表于 04-25 11:13 ?642次閱讀