在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

go語言枚舉類型怎么用

馬哥Linux運維 ? 來源:OSC開源社區 ? 作者:OSC開源社區 ? 2021-09-02 09:43 ? 次閱讀

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

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

其實,在 go 語言設計者的眼里,enum 本質是常量,為什么要多余一個關鍵字呢?在 go 只是沒有 enum 關鍵字而已,其表現枚舉的形式,與其它語言別無太大區別。下面來看看如果在 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

以 啟動、運行中、停止 這三個狀態為例,使用 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

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

比如這個例子,

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 個常量數,在 c 和 java 語言中寫出來會是什么情況。

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

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

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

~/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開源社區

責任編輯:haq

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

    關注

    3

    文章

    3405

    瀏覽量

    42712
  • 枚舉
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4622
  • go語言
    +關注

    關注

    1

    文章

    158

    瀏覽量

    9089

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

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

收藏 人收藏

    評論

    相關推薦

    EE-32:語言擴展:內存存儲類型、ASM和內聯構造

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

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

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

    Java 枚舉與策略模式、函數式接口的結合:實現高內聚低耦合的設計

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

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

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

    go語言如何解決并發問題

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

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

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

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

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

    請問STVP+COSMIC環境下的go to definition怎么

    STVP+COSMIC環境下的go to definition怎么? 我現在go to definition在一個宏定義的時候有效果,但是函數什么的沒用,是怎么回事呢,是不是工程里面沒有設置好,求大家幫幫忙?
    發表于 05-11 06:11

    關于go中接口類型的表示方法

    go是一個靜態性語言,每個變量都有靜態的類型,因此每個變量在編譯階段中有明確的變量類型,比如像:int、float32、MyType。
    的頭像 發表于 04-28 10:13 ?411次閱讀

    請問STVD +COSMIC里面不能使用枚舉類型嗎?

    enumeration member 在定義枚舉類型的位置 typedef enum Gpio_Type { ST_TYPE_DI = 0, ST_TYPE_DO, ST_TYPE_AI, }GPIO_TYPE; 使用的是STVD +COSMIC
    發表于 04-28 08:08

    Go語言中的函數、方法與接口詳解

    Go 沒有類,不過可以為結構體類型定義方法。方法就是一類帶特殊的接收者參數的函數。方法接收者在它自己的參數列表內,位于 func 關鍵字和方法名之間。(非結構體類型也可以定義方法)
    的頭像 發表于 04-23 16:21 ?914次閱讀

    C語言數據類型有哪些

    在 C 語言中,數據類型指的是用于聲明不同類型的變量或函數的一個廣泛的系統。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
    發表于 03-20 10:56 ?515次閱讀
    C<b class='flag-5'>語言</b>數據<b class='flag-5'>類型</b>有哪些

    char是有符號類型還是無符號類型

    看一個C語言的筆試題,題目很簡單,問char是有符號類型還是無符號類型
    的頭像 發表于 03-17 10:15 ?1314次閱讀

    fpga的是什么編程語言 fpga什么語言開發

    fpga的是什么編程語言 FPGA(現場可編程邏輯門陣列)主要使用的編程語言是硬件描述語言(HDL)。在眾多的HDL中,Verilog HDL和VHDL是最常用的兩種。 Verilo
    的頭像 發表于 03-14 17:09 ?3635次閱讀

    cyusb3014枚舉的工作原理是什么?如果下載固件后不枚舉,可能會是什么原因,原理是什么?

    3014設計自己的板子,參考開發板kit3的原理圖,插入計算機后可以被識別為Bootloader,采用USB啟動模式,下載實例中的固件后,顯示燒寫成功,但設備在計算機中消失了,不再重新被枚舉。我
    發表于 02-29 07:11
    主站蜘蛛池模板: 一区二区三区四区在线观看视频 | 成人丁香| 男人视频网 | 国产片一级aaa毛片视频 | 久久婷婷丁香七月色综合 | 91高清在线成人免费观看 | 香港日本三级在线播放 | 视色4se视频在线观看 | 天天色影| 色视频在线观看网站 | 狠狠色狠狠色综合日日32 | 午夜视频日本 | 欧美精品网站 | 欧美人成在线观看 | 亚洲成a人不卡在线观看 | 经典三级一区二区三区视频 | 国产传媒在线观看视频免费观看 | 色多多在线观看高清免费 | 国产叼嘿视频网站在线观看 | 亚洲黄页网站 | 欧美又黄又嫩大片a级 | 国产福利在线观看一区二区 | 亚洲精品卡1卡二卡3卡四卡 | 久久综合九色综合98一99久久99久 | 四虎影院最新网址 | 亚洲免费一级片 | 老熟女一级毛片 | 日韩精品视频免费在线观看 | 97精品伊人久久久大香线焦 | 欧美zooz人禽交免费观看 | 高h肉宠文1v1男男 | 人人天天爱天天做天天摸 | 色橹橹| 久久精品美女 | 大尺度视频在线 | 久久国产免费福利永久 | 婷婷射 | 亚洲色图21p | 夜夜爱夜夜操 | 久久久久久国产精品免费 | 亚洲人成电影在线 |