Go101项目深入解析:Go语言常量与变量详解

Go101项目深入解析:Go语言常量与变量详解

go101 An up-to-date (unofficial) knowledge base for Go programming self learning go101 项目地址: https://gitcode.com/gh_mirrors/go/go101

引言

在Go语言编程中,常量和变量是最基础也是最重要的概念之一。本文将深入探讨Go语言中常量与变量的声明、使用及其背后的原理,帮助读者建立扎实的基础知识。

无类型值与有类型值

Go语言中存在两种类型的值:无类型值(Untyped Values)和有类型值(Typed Values)。

无类型值的特点

  • 类型尚未确定
  • 大多数无类型值都有默认类型
  • 预声明的nil是唯一没有默认类型的无类型值

常见无类型值

  1. 所有字面量常量(未命名常量)
  2. 命名常量(稍后介绍)
  3. nil
  4. 某些操作返回的布尔结果

默认类型规则

| 字面量类型 | 默认类型 | |----------------|----------| | 字符串字面量 | string | | 布尔字面量 | bool | | 整数字面量 | int | | rune字面量 | rune(int32)| | 浮点数字面量 | float64 | | 含虚部的字面量 | complex128|

显式类型转换

Go语言使用T(v)形式进行显式类型转换,其中T是目标类型,v是要转换的值。

合法转换的两种情况

  1. v可以表示为基本类型T的值
  2. v的默认类型是整数类型(int或rune)且T是字符串类型

转换示例

// 合法转换
float32(0.49999999)  // 结果为0.5
string(65)           // 结果为"A"
string('\u68ee')     // 结果为"森"

// 非法转换
int(1.23)            // 1.23不能表示为int
uint8(-1)            // -1不能表示为uint8
string(65.0)         // 65.0默认类型是float64,不是整数类型

类型推导

Go编译器能够在许多情况下自动推导值的类型,这称为类型推导或类型推断。

类型推导场景

  1. 当某处需要特定类型的值,且无类型值可以表示为该类型的值时
  2. 当使用场景对值类型没有要求时,使用无类型值的默认类型

常量声明

常量可以是布尔、数值或字符串值,使用const关键字声明。

基本常量声明

const π = 3.1416
const Pi = π  // 等同于const Pi = 3.1416

const (
    No         = !Yes
    Yes        = true
    MaxDegrees = 360
    Unit       = "radian"
)

有类型常量

const X float32 = 3.14

const (
    A, B int64   = -3, 5
    Y    float32 = 2.718
)

常量声明自动完成

在分组常量声明中,可以省略后续常量的初始化表达式:

const (
    X float32 = 3.14
    Y           // 自动完成为Y float32 = 3.14
    Z           // 自动完成为Z float32 = 3.14
)

iota常量生成器

iota是Go语言中特殊的预声明常量,用于生成一组相关的常量值:

const (
    Readable = 1 << iota  // 1
    Writable              // 2
    Executable            // 4
)

变量声明

变量是存储在内存中的命名值,其值可以在运行时修改。

标准变量声明形式

var lang, website string = "Go", "https://golang.org"
var compiled, dynamic bool = true, false

类型推导形式

var lang, dynamic = "Go", false  // 自动推导为string和bool
var compiled, announceYear = true, 2009  // 自动推导为bool和int

短变量声明(仅限局部变量)

func main() {
    name := "Go"  // 短变量声明
    year := 2009
}

总结

本文详细介绍了Go语言中常量与变量的各种特性和使用方法,包括:

  • 无类型值与有类型值的区别
  • 显式类型转换的规则
  • 类型推导机制
  • 常量的各种声明方式及iota的使用
  • 变量的标准声明和短声明形式

掌握这些基础知识对于编写正确、高效的Go代码至关重要。建议读者在实际编程中多加练习,以加深对这些概念的理解。

go101 An up-to-date (unofficial) knowledge base for Go programming self learning go101 项目地址: https://gitcode.com/gh_mirrors/go/go101

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

富嫱蔷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值