前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Golang 语言的编程技巧之变量

Golang 语言的编程技巧之变量

作者头像
frank.
发布2021-04-16 15:36:22
发布2021-04-16 15:36:22
48100
代码可运行
举报
运行总次数:0
代码可运行

01

介绍

在 Golang 语言中,有多种声明变量的方式,但是每种方式都有它特殊的功能,本文我们介绍一些关于变量的编程技巧。

02

编程技巧

类型推断

类型推断就是在声明一个变量时,不指定变量的数据类型,变量的数据类型由右值推断得到。

Golang 语言是一门静态类型的编程语言,我们声明变量或常量时,需要指定变量或常量的数据类型,我们可以显示指定变量的数据类型,也可以使用 Golang 语言的类型推断。

代码语言:javascript
代码运行次数:0
复制
func main () {
    var name string
    name = "frank"
    fmt.Printf("val:%s type:%T\n", name, name)
}

阅读上面的代码,我们声明变量 name 的数据类型是 string,看上去也没什么问题,那么,我们再来看一段代码。

代码语言:javascript
代码运行次数:0
复制
func main () {
    var name string
    name = getVal()
    fmt.Printf("val:%s type:%T\n", name, name)
}

func getVal () string {
  return "frank"
}

阅读上面这段代码,我们将变量 name 的赋值改为使用函数表达式赋值。目前 getVal() 函数的返回结果的数据类型是 string,如果未来我们需要修改 getVal() 函数的返回结果的数据类型为 int,我们 main 函数中的变量 name 也需要进行对应的修改,这样使得我们的应用程序不灵活,增加了我们维护(重构)代码的难度。

如果我们在声明变量 name 时,不使用指定数据类型的方式,而是通过简短声明的方式(也可以使用 var 变量名 = 表达式 的语法)使用 Golang 语言的类型推断功能,上述的问题就解决了。如果你使用过动态类型(弱类型)的编程语言,比如 Python 或 PHP,是不是感觉这种方式,可能会有所感触。

代码语言:javascript
代码运行次数:0
复制
func main () {
    // var name = getVal()
    name := getVal()
    fmt.Printf("val:%s type:%T\n", name, name)
}

// func getVal () string {
//     return "frank"
// }

func gateVal () int {
    return 1
}

重新声明变量

所谓重新声明变量,就是将已经存在的变量重新定义,使用简短声明变量的方式,将同一代码块中的变量重新声明。

重新声明变量有一些前提条件:

  • 重新声明变量,必须使用简短声明方式。
  • 重新声明变量,不能修改原变量的数据类型。
  • 重新声明变量,左边的变量至少包含一个未声明过的变量。
  • 重新声明变量,只作用于同一代码块中的变量。

我们了解了重新声明变量,不知道有没有体会到它的好处,在我看来,重新声明变量的好处就是可以减少代码量。

未使用重新声明变量:

代码语言:javascript
代码运行次数:0
复制
func main () {
    var name string
    name = "lucy"
    var age uint
    age = 18
    name = "frank"
    fmt.Printf("name:%s age:%d\n", name, age)
}

使用重新声明变量:

代码语言:javascript
代码运行次数:0
复制
func main () {
    var name string
    name = "lucy"
    name, age := "frank", 18
    fmt.Printf("name:%s age:%d\n", name, age)
}

阅读上面这两段代码,我们发现使用简短声明的方式重新声明变量 name,无需关心被赋值的变量中是否已存在,而且可以减少代码量,并且必须使用简短声明的方式,因为如果使用 var 关键字声明已存在的变量会引发编译错误。

同名变量

所谓同名变量,是指在不同代码块,相同变量名的变量,因为在同一代码块,变量名相同会引发编译错误。

代码语言:javascript
代码运行次数:0
复制
package main

import (
    "fmt"
)
var a = 1
func main () {
    a := "golang"
    fmt.Printf("val:%s type:%T\n", a, a)
}

阅读上面这段代码,我们分别在 main 包代码块和 main 函数代码块声明了变量 a,通过打印结果可以看出打印的是 main 函数中的变量 a。该示例代码说明位于不同代码块的同名变量,因为其作用域也不同,所以不会引发编译错误。

03

总结

本文我们介绍了关于变量的一些编程技巧,包括类型推断,重新声明变量和同名变量。如果用好这些关于变量的编程技巧,可以有效提升代码的可维护性和健壮性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Go语言开发栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档