99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內不再提示

go語言枚舉類型怎么用

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

基礎工作

為了下面講解方便,這里使用 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 關鍵來聲明一系列的常量值。在 enum.go 中寫上以下內容:

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)

}

保存并運行,可以得到以下結果,

~/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

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

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

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

當然,你可以使用以下方式,來更接近其它語言的 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ù),運行結果如下:

~/Projects/go/examples/enum

? go run enum.go

State running: Running

State pending: Pending

State Stoped: Stopped

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

轉自:

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

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

責任編輯:haq

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

    關注

    3

    文章

    3679

    瀏覽量

    43815
  • 枚舉
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4721
  • go語言
    +關注

    關注

    1

    文章

    159

    瀏覽量

    9370

原文標題:Golang 如何表示枚舉類型

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    自簽名證書工具cfssl詳解

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

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

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

    從 Java 到 Go:面向對象的巨人與云原生的輕騎兵

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

    EE-33:C語言對ADSP-21xx定時器進行編程

    電子發(fā)燒友網(wǎng)站提供《EE-33:C語言對ADSP-21xx定時器進行編程.pdf》資料免費下載
    發(fā)表于 01-15 15:46 ?0次下載
    EE-33:<b class='flag-5'>用</b>C<b class='flag-5'>語言</b>對ADSP-21xx定時器進行編程

    EE-32:語言擴展:內存存儲類型、ASM和內聯(lián)構造

    電子發(fā)燒友網(wǎng)站提供《EE-32:語言擴展:內存存儲類型、ASM和內聯(lián)構造.pdf》資料免費下載
    發(fā)表于 01-14 15:03 ?0次下載
    EE-32:<b class='flag-5'>語言</b>擴展:內存存儲<b class='flag-5'>類型</b>、ASM和內聯(lián)構造

    影目科技發(fā)布全球首款同傳翻譯眼鏡INMO GO2

    近日,搭載紫光展銳W517芯片平臺的INMO GO2由影目科技正式推出。作為全球首款專為商務場景設計的智能翻譯眼鏡,INMO GO2 以“快、準、穩(wěn)”三大核心優(yōu)勢,突破傳統(tǒng)翻譯產品局限,為全球商務人士帶來高效、自然、穩(wěn)定的跨語言
    的頭像 發(fā)表于 12-11 10:00 ?1194次閱讀

    Java 枚舉與策略模式、函數(shù)式接口的結合:實現(xiàn)高內聚低耦合的設計

    作者:京東物流 楊唯一 一、Java 枚舉類 Java 枚舉是一個特殊的類,一般表示一組常量,比如一年的 4 個季節(jié),一年的 12 個月份,一個星期的 7 天,方向有東南西北等。 我們在業(yè)務需求開發(fā)
    的頭像 發(fā)表于 11-21 14:06 ?635次閱讀

    對比Python與Java編程語言

    Python與Java都是目前非常流行的編程語言,它們各有其獨特的優(yōu)勢和適用場景。以下是對這兩種編程語言的對比: 一、語法和易用性 Python 語法簡潔,代碼更易讀,非常適合初學者。 動態(tài)類型系統(tǒng)
    的頭像 發(fā)表于 11-15 09:31 ?1081次閱讀

    在學習go語言的過程踩過的坑

    作為一個5年的phper,這兩年公司和個人都在順應技術趨勢,新項目慢慢從php轉向了go語言,從2021年到現(xiàn)在,筆者手上也先后開發(fā)了兩個go項目。在學習go
    的頭像 發(fā)表于 11-11 09:22 ?460次閱讀

    FPGA編程語言的入門教程

    FPGA(現(xiàn)場可編程邏輯門陣列)的編程涉及特定的硬件描述語言(HDL),其中Verilog和VHDL是最常用的兩種。以下是一個FPGA編程語言(以Verilog為例)的入門教程: 一、Verilog
    的頭像 發(fā)表于 10-25 09:21 ?1215次閱讀

    go語言如何解決并發(fā)問題

    作為一個后端開發(fā),日常工作中接觸最多的兩門語言就是PHP和GO了。無可否認,PHP確實是最好的語言(手動狗頭哈哈),寫起來真的很舒爽,沒有任何心智負擔,字符串和整型壓根就不用區(qū)分,開發(fā)速度真的是比
    的頭像 發(fā)表于 10-23 13:38 ?502次閱讀
    <b class='flag-5'>go</b><b class='flag-5'>語言</b>如何解決并發(fā)問題

    鴻蒙原生應用元服務開發(fā)-初識倉頡開發(fā)語言

    、提升開發(fā)效率,例如插值字符串、主構造函數(shù)、Flow 表達式、match、if-let、while-let 和重導出等語法,讓開發(fā)者可以較少編碼表達相關邏輯。 多范式編程 :倉頡編程語言支持函數(shù)式、命令
    發(fā)表于 08-15 10:00

    三十分鐘入門基礎Go Java小子版

    前言 Go語言定義 Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發(fā)的一種靜態(tài)、強類型、編譯型
    的頭像 發(fā)表于 08-12 14:32 ?982次閱讀
    三十分鐘入門基礎<b class='flag-5'>Go</b> Java小子版

    鴻蒙原生應用元服務開發(fā)-初識倉頡開發(fā)語言

    、提升開發(fā)效率,例如插值字符串、主構造函數(shù)、Flow 表達式、match、if-let、while-let 和重導出等語法,讓開發(fā)者可以較少編碼表達相關邏輯。 多范式編程 :倉頡編程語言支持函數(shù)式、命令
    發(fā)表于 07-30 17:49

    技術干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)類型和變量

    在C語言中,數(shù)據(jù)類型和變量是編程的基礎,也是理解更復雜概念的關鍵。數(shù)據(jù)類型決定了變量的內存分配、存儲范圍和操作方式,而變量則是存儲數(shù)據(jù)的容器。本篇文章將從基本數(shù)據(jù)類型和變量兩個方面,帶
    的頭像 發(fā)表于 07-26 17:53 ?2748次閱讀
    技術干貨驛站 ▏深入理解C<b class='flag-5'>語言</b>:基本數(shù)據(jù)<b class='flag-5'>類型</b>和變量