登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  Golang >  Go问答

Go 常量的类型

来源:SegmentFault

时间:2023-02-21 09:24:55 297浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《Go 常量的类型》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

go
package main

import (
    "fmt"
    "reflect"
)

const (
    cmask  = 127
)

func main() {
    var u uint8
    u = 22
    r1 := u + cmask
    fmt.Println(r1)
    fmt.Println(reflect.TypeOf(cmask)) // int
    //------------------
    mask := 0x7f
    //r2 := u + mask
    //fmt.Println(r2)
    fmt.Println(reflect.TypeOf(mask)) // int
}

cmask 和 mask 反射出来的类型都是 int。为什么 cmask 可以和u进行操作,而 mask 不行 ???

正确答案

原因详见 Go 的语法说明:

If the expression values are untyped constants, the declared constants remain untyped and the constant identifiers denote the constant values.

换人话来说就是:使用没指定类型的 const,就相当于直接使用它对应的常量。

所以你写

u + cmask
就相当于写了
u + 127
,于是不会保存。而 mask 是个普通变量,没有这种特殊待遇,类型是在声明时就固定了(
int
),因此会因为
int
和
uint8
不兼容而报错。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>