Go 语言短变量声明的“坑”

开发 前端
本文我们主要介绍一个使用 Go 语言短变量声明方式进行变量声明时,我们非常容易踩的“坑”。

1.介绍

在使用 Go 语言进行项目开发时,我们经常会在定义变量时使用 Go 语言的一个语法糖 - 短变量声明,它虽然好用,但是也会有让我们不小心就会掉进的“坑”。

本文我们介绍一个 Go 语言短变量声明最容易让程序员掉进的“坑”。

2.短变量声明的“坑”

Go 语言提供了短变量声明的语法糖,短变量声明让 Go 语言的变量声明更加方便,代码更加简洁。但是,它真的百利无一害吗?

我们先阅读一段示例代码:

func main() {
var name string = "frank"
fmt.Printf("val:%s || ptr:%p\n", name, &name)
name, age := "lucy", 18
fmt.Printf("val:%s || ptr:%p\n", name, &name)
fmt.Println(age)
if name != "lily" {
name := "lily"
fmt.Printf("val:%s || ptr:%p\n", name, &name)
}
}

输出结果:

val:frank || ptr:0xc000010200
val:lucy || ptr:0xc000010200
18
val:lily || ptr:0xc000010230

阅读上面这段代码,我们先使用通用的 Go 语言变量声明方式声明变量 name​,然后再使用 Go 语言语法糖 - 短变量声明方式,分别在同一作用域和不同作用域声明变量 name。

首先,我们忽略在同一作用域使用短变量声明时的变量 age,仅是为了跳过 Go 编译器的检查。

根据三次声明变量 name​ 的打印结果可以看出,使用短变量声明方式在同一作用域声明变量 name​,仅是对变量 name 重新赋值,而不是声明一个新变量。

所以,我们得出一个结论:在同一作用域使用短变量声明方式进行变量声明时,针对重名变量,不会重新生成一个新变量,而是对重名变量进行重新赋值。

3.总结

本文我们主要介绍一个使用 Go 语言短变量声明方式进行变量声明时,我们非常容易踩的“坑”。

虽然问题比较简单,但是越是简单的问题越不容易排查,这就要求提升程序员对 Go 语言相关知识的掌握水平,尽量避免在开发时出现此类问题,导致可能会花费大量时间排查问题。

最后,我们牢记 Go 语言的短变量声明语法糖在相同作用域和不同作用域的含义可能会不同,要注意区分声明新变量和重新赋值变量。​

责任编辑:武晓燕 来源: Golang语言开发栈
相关推荐

2021-10-28 19:10:02

Go语言编码

2021-04-07 09:02:49

Go 语言变量与常量

2022-01-03 20:13:08

Gointerface 面试

2022-08-08 08:31:55

Go 语言闭包匿名函数

2022-08-08 06:50:06

Go语言闭包

2024-01-04 07:49:00

Go语言方法

2022-02-13 23:10:46

Golang语言变量

2024-01-05 08:31:08

C语言

2010-09-10 10:39:00

SQL变量声明

2016-03-30 09:56:07

c语言变量声明objectivec

2012-10-08 09:25:59

GoGo语言开发语言

2018-03-12 22:13:46

GO语言编程软件

2021-07-07 12:02:25

Go 服务进程

2022-01-12 09:31:18

Go 变量方式

2023-12-30 10:22:57

Go语言函数开发

2014-10-31 09:48:36

Go语言

2011-05-20 16:34:35

VB.NET

2011-02-25 10:12:09

GoWeb

2022-02-09 16:02:26

Go 语言ArraySlice

2013-05-28 09:43:38

GoGo语言并发模式
点赞
收藏

51CTO技术栈公众号