登录
首页 >  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删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>