Go语言学习十二 变量和常量

本文详细介绍了Go语言中的变量和常量。在变量部分,讲解了变量的声明、类型以及初始化。常量部分则涵盖了常量声明、无类型常量、常量表达式和求值顺序。此外,还提到了iota常量生成器的用法。通过本文,读者可以深入理解Go语言中变量和常量的使用规则。
摘要由CSDN通过智能技术生成

本文最初发表在我的个人博客,查看原文,获得更好的阅读体验


Go 使用var关键字声明变量;使用关键字const声明常量。变量可以像常量一样初始化。

一 变量

1.1 变量声明

语法:
var 变量名 变量类型 | = 值

var x int
var y string = "hello"
var z = 2
var c, python, java = true, false, "no!"
var r, s int

预声明的值nil不能用于初始化没有显式类型的变量。

var n = nil            // 非法

另外,还可以使用短变量声明运算符:=来声明变量,以下声明是等价的:

a := 2
var a = 2

短变量声明可能仅出现在函数内部。在某些上下文中,例如ifforswitch语句的初始化程序,它们可用于声明本地临时变量。

实现限制:如果在函数体内声明了变量却未使用,编译器可能认为是非法的。

初始值也可以是一个在运行时计算的一般表达式

var (
    home   = os.Getenv("HOME")
    user   = os.Getenv("USER")
    gopath = os.Getenv("GOPATH")
)

调用内置函数new或获取复合字面量的地址,会在运行时为变量分配存储空间。这种匿名变量通过指针重定向来引用(可能是隐式的)。

数组,切片和结构类型的结构化变量具有可单独寻址的元素和字段。每个这样的元素就像一个变量。

1.2 变量的类型

声明时给出的类型、调用new函数或在复合字面量中提供的类型,或结构化变量的元素类型,称为变量的静态类型(或仅仅类型)。
接口类型的变量甚至具有不同的动态类型,它是在运行时分配给变量的值的具体类型(除非该值是预先声明的标识符nil,它没有类型)。动态类型在执行期间可能会有所不同,但存储在接口变量中的值始终可分配给变量的静态类型。

var x interface{
   }  // x is nil and has static type interface{}
var v *T           // v has value nil, static type *T
x = 42             // x has value 42 and dynamic type int
x = v              // x has value (*T)(nil) and dynamic type *T

如果尚未为变量赋值,则其值为其类型的零值。

二 常量

Go中的常量有:布尔常量,符文常量,整数常量,浮点常数,复数常量和字符串常量。符文,整数,浮点和复数常量统称为数字常量。常量就是不变量。它们在编译期间创建。即使在函数中定义为局部常量,也是如此。

由于编译时限制,定义它们的表达式必须是可被编译器求值的常量表达式。例如,1<<3是常量表达式,而math.Sin(math.Pi/4)不是,因为函数调用math.Sin需要在运行时发生。

2.1 常量声明

常量的声明与变量类似,只不过是使用const关键字。常量声明将标识符列表(常量的名称)绑定到常量表达式列表的值。标识符的数量必须等于表达式的数量,左侧的第n个标识符绑定到右侧的第n个表达式的值。

如果存在类型,则所有常量都采用指定的类型,并且表达式必须可分配给该类型。如果省略该类型,则常量将采用相应表达式的各个类型。

const Pi float64 = 3.14159265358979323846
const zero = 0.0         // untyped floating-point constant
const (
	size int64 = 1024
	eof        = -1  // untyped integer constant
)
const a, b, c = 3, 4, "foo"  // a = 3, b = 4, c = "foo", untyped integer and string constants
const u, v float32 = 0, 3    // u = 0.0, v = 3.0

在带括号的const声明列表中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值