chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

go語言枚舉類型怎么用

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

掃碼添加小助手

加入工程師交流群

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

枚舉,是一種重要的數(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ù)),詳細(xì)請看官方定義 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

    文章

    3689

    瀏覽量

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

    關(guān)注

    0

    文章

    16

    瀏覽量

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

    關(guān)注

    1

    文章

    159

    瀏覽量

    9373

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    自簽名證書工具cfssl詳解

    CFSSL(CloudFlare's PKI and TLS toolkit)由 CloudFlare go語言開發(fā)的一個開源工具,用于證書簽名、驗證和管理。
    的頭像 發(fā)表于 06-11 16:30 ?233次閱讀
    自簽名證書工具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 ?234次閱讀

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

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

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

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

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

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

    對比Python與Java編程語言

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

    在學(xué)習(xí)go語言的過程踩過的坑

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

    FPGA編程語言的入門教程

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

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

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

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

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

    三十分鐘入門基礎(chǔ)Go Java小子版

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

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

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

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

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