请选择 进入手机版 | 继续访问电脑版

[Golang] Golang表示摆列 范例 的具体 讲解

[复制链接]
查看76 | 回复17 | 2021-9-15 03:06:47 | 显示全部楼层 |阅读模式

Golang表示摆列

范例
的具体
讲解

摆列 ,是一种告急 的数据范例 ,由一组键值对构成 ,通常用来在编程语言中充当常量的标识符。在主盛行 编程语言如 c、 java 等,都有原生支持。在 go 中,大家却找不到 enum 或者别的 直接用来声明摆列 范例 的关键字。从认识 别的 编程语言的开发 者转用 go 编程,刚开始会比较难担当 这种环境 。实在 ,假如 你看到怎样 在 go 中表示摆列 范例 时,大概 会感受到 go 语言计划 者对简洁性、标题 思量 的深度,是一样平常 资浅工程师无法比拟的。

实在 ,在 go 语言计划 者的眼里,enum 本质是常量,为什么要多余一个关键字呢?在 go 只是没有 enum 关键字而已,其表现摆列 的情势 ,与别的 语言别无太大区别。下面来看看假如 在 go 中表示摆列 。

学习、使用 一门语言,是学习、明确 语言本身的计划 哲学,同时也会感受到计划 者的性格特点。

基础工作 

为了下面讲解方便,这里使用 go modules 的方式先建立一个简单工程。

  1. ~/Projects/go/examples
  2. ➜ mkdir enum
  3. ~/Projects/go/examples
  4. ➜ cd enum
  5. ~/Projects/go/examples/enum
  6. ➜ go mod init enum
  7. go: creating new go.mod: module enum
  8. ~/Projects/go/examples/enum
  9. ➜ touch enum.go
复制代码

const + iota

以 启动、运行中、制止 这三个状态为例,使用 const 关键来声明一系列的常量值。在 enum.go 中写上以下内容:

  1. package main
  2. import "fmt"
  3. const (
  4. Running int = iota
  5. Pending
  6. Stopped
  7. )
  8. func main() {
  9. fmt.Println("State running: ", Running)
  10. fmt.Println("State pending: ", Pending)
  11. fmt.Println("State Stoped: ", Stopped)
  12. }
复制代码

保存并运行,可以得到以下效果 ,

  1. ~/Projects/go/examples/enum
  2. ➜ go run enum.go
  3. State running: 0
  4. State pending: 1
  5. State Stoped: 2
复制代码

在阐明 发生了什么之前,我们先看来一件东西,iota。相比于 c、java,go 中提供了一个常量计数器,iota,它使用 在声明常量时为常量连续 赋值。

比如这个例子,

  1. const (
  2. a int = iota // a = 0
  3. b int = iota // b = 1
  4. c int = iota // c = 2
  5. )
  6. const d int = iota // d = 0
复制代码

在一个 const 声明块中,iota 的初始值为 0,每声明一个变量,自增 1。以上的代码可以简化成:

  1. const (
  2. a int = iota // a = 0
  3. b // b = 1
  4. c // c = 2
  5. )
  6. const d int = iota // d = 0
复制代码

假想 一下,假如 此时有 50 或者 100 个常量数,在 c 和 java 语言中写出来会是什么环境 。

关于 iota,有更多的详细 的技巧(比方 跳数),详细 请看官方定义 iota。

通过使用 const 来定义连续 串的常量,并借助 iota 常量计数器,来快速的为数值范例 的常量连续 赋值,非常方便。固然 没有了 enum 关键字,在这种环境 下发现,是多余的,摆列 本质上就是常量的组合。

当然,你可以使用 以下方式,来更靠近 别的 语言的 enum,

  1. // enum.go
  2. ...
  3. type State int
  4. const (
  5. Running State = iota
  6. Pending
  7. Stopped
  8. )
  9. ...
复制代码

把一组常量值,使用 一个范例 别名包裹起来,是不是更像别的 语言中的 enum {} 定义了呢?

你还可以将上面的例子改为:

  1. // enum.go
  2. ...
  3. type State int
  4. const (
  5. Running State = iota
  6. Pending
  7. Stopped
  8. )
  9. func (s State) String() string {
  10. switch s {
  11. case Running:
  12. return "Running"
  13. case Pending:
  14. return "Pending"
  15. case Stopped:
  16. return "Stopped"
  17. default:
  18. return "Unknown"
  19. }
  20. }
  21. ...
复制代码

为定义的摆列 范例 加上 String 函数,运行效果 如下:

  1. ~/Projects/go/examples/enum
  2. ➜ go run enum.go
  3. State running: Running
  4. State pending: Pending
  5. State Stoped: Stopped
复制代码

是不是很魔幻,思绪 一下又开阔一些,长见识了。把实际 的值与打印字符分开,一样平常 语言计划 者不会想到。看到这里,有没有这种的感觉,go 语言的计划 者并不是偷懒,而是为了可以偷懒想了很多、做了很多。

到此这篇关于Golang表示摆列 范例 的详细 讲解的文章就先容 到这了,更多干系 Golang 摆列 范例 内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章盼望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar XY890 | 2021-9-15 05:31:13 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,影视频道的网站所有电影和连续剧都可以免费看的。访问地址:http://tv.mxswl.com
回复

使用道具 举报

avatar Mionsterv | 2021-9-21 01:26:15 | 显示全部楼层
灌水不是我的目的!
回复

使用道具 举报

avatar 二级传播盅 | 2021-9-21 19:12:44 | 显示全部楼层
收藏了,以后可能会用到!
回复

使用道具 举报

avatar 小饱1 | 2021-9-22 12:24:31 | 显示全部楼层
坚持回帖!
回复

使用道具 举报

avatar 123457265 | 2021-9-26 05:29:12 | 显示全部楼层
视死如归的架势啊!
回复

使用道具 举报

avatar 天蝎孤星等 | 2021-10-6 03:41:13 | 显示全部楼层
看在admin楼主的面子上,认真回帖!
回复

使用道具 举报

avatar 李悔之2015 | 2021-10-6 05:05:11 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

青春不在了,青春痘还在!
回复

使用道具 举报

admin楼主很有艺术范!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则