go-05-常量
  TEZNKK3IfmPf 30天前 18 0

一、const

1 常量介绍

常量就是在整个程序中,一个变量的值始终不能被改变或者再次声明。
golang 中使用 const 关键字声明一个常量。

2 声明单个常量

const pi = 3.1415926

3 声明多个常量

const (
    codeOk int = 200
    conde404 = 404
)

4 值的继承

当声明常量时,若果后面的常量没有指定具体的值,就会继承上一个常量的值。

package main

import "fmt"

const (
    a = "hello"  // a -> hello
    b            // b -> hello
)
func main(){
     
       
    fmt.Println(a,b)
}

二、iota

1 介绍

iota 是常量的计数器,也是一个 go 中的关键字。

iota 必须和 const 配合使用。

iota 在每一个 const 中第一次出现时,iota 的值是 0 ,之后在同一个 const 中只要每声明一行常量,iota 的值就会被递增 1。

2 声明单个

package main

import "fmt"

const h = iota

func main(){
     
       
    fmt.Println(h) // h -> 0
}

代码解读:
const h = iota 表示把 iota 的值赋值给了 h 这个常量,那 h 的值也就是 iota 的值
const 中第一次出现了 iota ,此时 iota 的值是 0

3 声明多个

const(
	a1 = iota  // 0
	a2         // 1
	a3         // 2
)

代码解读:
a1 = iota 表示把 iota 的值赋值给了 h 这个常量,那 h 的值也就是 iota 的值, 此时 iota 由于是这个 const 代码块中第一次出现,因此其值是 0,那 a1 的值也是 0。
a2 在 const 中 a2 没有指定具体的值,其值就会继承上一行常量的值,上一行常量 a1 的值是 iota, 但此时 a2 已经是这个 const 代码块中的第二行声明一个常量了,iota 的值就会递增,也就是 1,因此 a2 的值也是 1。
a3a2 是同一个道理。

4 可以使用 _ 来接收那些希望跳过递增的数值

const(
	b1 = iota  // 0
	_          // 1
	b3         // 2
)

5 可以和普通的常量混合使用

const(
	c1 = iota // iota -> 0, c1 -> 0
	c2        // iota -> 1, c2 -> 1
	c3 = 10   // iota -> 2, c3 -> 10
	c4        // c4 的值是 10,iota 的值 3
	_         // _ 的值是 10,iota 的值 4
	c5        // c5 的值是 10,iota 的值 5
	c6 = iota // 此时 c6 的值被赋值为 iota, 而此时 iota 的值是 6,所以 c6的值也是 6
	c7        // 同理 c7
)

6 iota 如果出现在同一行,iota 的值不会递增

const(
	d1,d2 = iota,iota + 1  // iota -> 0, d1 -> 0 d2 -> 1
	d3 = 10            // iota -> 1, d3 -> 10
	d4,d5 = 4,iota     // iota -> 2, d4 -> 4
)

7 iota 总结

iota 是一个常量中的关键字

其值在 const 中第一次出现的时候是 0

之后,在 const 代码块儿中只要每成功声明一行常量,iost 的值就会加 1

8 生产示例

const(
	_ = iota
   
	KB = 1 << (10 * iota) // 1 << 10 * 1 就是 2 的 10 次方
	MB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 20 次方
	GB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 30 次方
	TB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 40 次方
	PB = 1 << (10 * iota) // 1 << 10 * 2 就是 2 的 50 次方
)
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 30天前 0

暂无评论

推荐阅读
TEZNKK3IfmPf