Go 语言的变量与常量

开发 后端
go 语言的变量声明和大多数语言类似,通过 var 关键字声明变量,只是 go 语言作为静态类型语言,声明变量时需要指定其类型。

[[391525]]

变量

go 语言的变量声明和大多数语言类似,通过 var 关键字声明变量,只是 go 语言作为静态类型语言,声明变量时需要指定其类型。

下面的代码表示声明一个『name』变量,类型为『string』,并给其赋值『"Shenfq"』。

  1. var name string = "Shenfq" 

如果我们不进行赋值,这变量会获得一个默认值,下面列举一些 go 语言中的基础类型及其默认值。

多变量声明

上面介绍 go 语言通过 var 关键字进行单个变量声明,我们还可以通过 var 关键字进行多个变量的声明:

  1. // 声明两个变量为同一类型 
  2. var firstName, lastName string 
  3. // 给两个变量同时赋值 
  4. firstName, lastName = "frank""shen" 

  1. // 声明两个变量为不同类型 
  2. var ( 
  3.   age int 
  4.  name string 
  5. // 给两个变量同时赋值 
  6. age, name = 25, "Shenfq" 

类型推导

如果我们在变量声明阶段,对变量进行了赋值操作,这时候我们是可以直接省略变量类型的,因为 go 在编译过程中会依据所赋予的初始值推导出其类型。

  1. var age = 25 
  2.  
  3. fmt.Printf("age 类型为:%T", age) // age 类型为:int 

  1. var ( 
  2.   age = 18 
  3.   name = "Shenfq" 
  4. fmt.Printf("age 类型为:%T", age) // age 类型为:int 
  5. fmt.Printf("name 类型为:%T"name) // name 类型为:string 

简短格式

前面介绍了变量声明的时候,如果给定了初始值,go 在编译阶段可以进行类型推导。这种情况,go 提供了一种更简单的声明方式,通过 := 的方式进行变量声明,可以省略 var 关键字。

  1. func main() { 
  2.   age := 25 
  3.  name := "Shenfq" 

  1. // 也可以进行多个变量同时赋值 
  2. func main() { 
  3.   age, name := 25, "Shenfq" 

⚠️注意事项一

这种声明方式只能用于函数体内,不能用于全局变量的声明。

  1. // ⚠️ 不能在全局使用这种方式声明变量 
  2. age, name := 25, "Shenfq" 
  3.  
  4. // 只能在函数体内使用该方式 
  5. func main() { 
  6.  age, name := 25, "Shenfq" 
  7.  fmt.Printf("age 类型为:%T", age) 
  8.  fmt.Printf("name 类型为:%T"name

 

warning

⚠️注意事项二

已经声明过的变量,不能使用 := 的方式进行赋值。

  1. func main() { 
  2.   var age int 
  3.  age := 25 

 

已经声明过的变量,只能通过 = 的方式进行赋值。

  1. func main() { 
  2.   var age int 
  3.  age = 25 

全局变量与局部变量

简单来说,声明在函数体外的变量为全局变量,声明在函数体内的变量为局部变量。

局部变量如果有声明,没有进行使用,则不会通过编译。

  1. func main() { 
  2.   var age int 

 

但是,全局变量是可以声明而不使用的。

  1. var age int 
  2. func main() { 
  3.  name := "Shenfq" 
  4.  //fmt.Printf("age 类型为:%T", age) 
  5.  fmt.Printf("name 类型为:%T"name

上面的代码中,我们声明了 age 全局变量,但是并未使用,可以正常编译。

空白标识符

前面介绍过,go 在变量赋值的时候,可以一次性对多个变量赋值。同时,go 的函数在 return 的时候,也能一次返回多个结果。

  1. func double(num int) (string, int) { 
  2.  var err string 
  3.  if num < 0 { 
  4.   err = "num 不能为负数" 
  5.   return err, -1 
  6.  } 
  7.  result := num * 2 
  8.  return err, result 

上面我们实现了一个 double 函数,该函数接受一个 int 类型的变量(num),返回两个值,一个为异常提示(string 类型),一个为 num * 2 的结果。如果 num < 0 , 则提示 num 不能负数。

  1. func main() { 
  2.  err, res := double(10) 
  3.  if err != "" { 
  4.   fmt.Printf(err) 
  5.  } else { 
  6.   fmt.Printf("结果为:%v", res) 
  7.  } 

如果,我们并不关心 err ,只想执行 double 之后,输出其结果。

  1. func main() { 
  2.  err, res := double(10) 
  3.  fmt.Printf("结果为:%v", res) 

 

运行后,我们会收到一个编译错误,err 变量并未使用。这时候,就需要用到空白标识符(_)。

  1. func main() { 
  2.  _, res := double(10) 
  3.  fmt.Printf("结果为:%v", res) 

我们可以通过 _ 来接受 err 值,这个地方的值就会被抛弃掉,就能顺利通过编译。

常量

常量就是不会发生变化的变量,一旦声明就不会改变。go 语言中,常量的声明只需要将变量声明时的 var 关键字替换为 const 关键字。

  1. // 隐式类型定义 
  2. const PI = 3.14 
  3. // 显式类型定义 
  4. const PI2 float  = 3.14 

多常量声明

与变量类似,常量也支持一次性声明多个。

  1. func main() { 
  2.  const ( 
  3.   PI = 3.14 
  4.   PI2 = 3.14 
  5.  ) 
  6.  fmt.Printf("结果为:%v\n", PI) 
  7.  fmt.Printf("结果为:%v\n", PI2) 

 

如果一次声明多个常量时,某个常量如果为进行赋值,默认会与上一个常量的值进行同步。下面代码的运行结果,与上面的代码一致。

  1. func main() { 
  2.  const ( 
  3.   PI = 3.14 
  4.   PI2 
  5.  ) 
  6.  fmt.Printf("结果为:%v\n", PI) 
  7.  fmt.Printf("结果为:%v\n", PI2) 

特殊常量

有个叫做 iota 的特殊常量,在常量的赋值过程中,会进行累加。

  1. func main() { 
  2.  const ( 
  3.   A = iota 
  4.   B 
  5.   C 
  6.  ) 
  7.  fmt.Println(A, B, C) // 0 1 2 

在 iota 累加的过程中,可以对其进行打断。

  1. func main() { 
  2.  const ( 
  3.   A = iota 
  4.   B 
  5.   C = "Shenfq" 
  6.     D 
  7.     E 
  8.  ) 
  9.  fmt.Println(A, B, C, D, E) 

这时候输出的结果为:

这是由于我们将常量 C 修改为了字符串 "Shenfq",常量 D、E 会默认与上一条常量保持同步,所以会得到上述结果。但是, iota 是支持重新恢复累加,只需要在指定位置重新赋值一次 iota 即可。

  1. func main() { 
  2.  const ( 
  3.   A = iota 
  4.   B 
  5.   C = "Shenfq" 
  6.   D = iota // 恢复累加状态 
  7.   E 
  8.  ) 
  9.  fmt.Println(A, B, C, D, E) 

由于 C 占用了原本 2 的位置,所以 D 恢复后,也是从 3 开始的。

iota 这种累加的特性,特别像我们在其他语言中使用的枚举,所以在 go 语言中,我们可以直接将 iota 当做枚举来使用。

  1. type ButtonType int 
  2. const ( 
  3.   Default ButtonType = iota 
  4.   Primary 
  5.   Warning 
  6.   Error 

 

责任编辑:姜华 来源: 自然醒的笔记本
相关推荐

2022-07-31 23:05:55

Go语言短变量

2021-03-25 12:00:18

Python变量常量

2024-01-04 07:49:00

Go语言方法

2021-04-13 07:58:42

Go语言函数

2021-07-30 07:28:15

WorkerPoolGo语言

2021-04-20 09:00:48

Go 语言结构体type

2021-04-25 08:11:57

C语言常量与变量标识符命名规范

2021-07-13 06:44:04

Go语言数组

2020-07-07 07:00:00

RustGo语言编程语言

2010-03-22 13:49:20

2021-11-06 10:18:30

Python变量常量

2023-12-15 14:38:00

GoRust编程语言

2022-06-22 09:24:30

云原生Go 语言

2023-09-21 22:02:22

Go语言高级特性

2024-03-01 20:16:03

GoRust语言

2012-10-08 09:25:59

GoGo语言开发语言

2018-03-12 22:13:46

GO语言编程软件

2011-12-15 09:00:51

PHP 7

2011-06-15 15:36:19

PHP变量常量

2022-06-02 08:48:39

Go枚举器Iota
点赞
收藏

51CTO技术栈公众号