当前位置:主页 > 查看内容

从零学 Go:基本语法介绍之变量的声明与初始化

发布时间:2021-06-17 00:00| 位朋友查看

简介:前文回顾 前面的文章介绍了 Go 相关的特性与入门案例 对于一门编程语言 变量和语法是我们首先需要掌握的。Golang 在语法上与 C 语言有很多相似支持 但是比 C 语言更加简约。如果你有一定的 C 语言基础 阅读起来就事半功倍 即时没有也没关系 因为 Golang 的语……
前文回顾

前面的文章介绍了 Go 相关的特性与入门案例 对于一门编程语言 变量和语法是我们首先需要掌握的。Golang 在语法上与 C 语言有很多相似支持 但是比 C 语言更加简约。如果你有一定的 C 语言基础 阅读起来就事半功倍 即时没有也没关系 因为 Golang 的语法非常易于理解。

本系列文章将会介绍 Go 语言基础语法的相关知识 本文将首先从变量的声明与初始化讲起。

变量的声明与初始化

在 HelloGo 中 我们已经声明了不少的变量 样式如下所示

var input string

上述代码中声明了一个 string 类型 变量名为 input 的变量。Golang 在声明变量时 会自动把变量对应的内存区域进行初始化操作 每个变量会被初始化为其类型的默认值。变量声明样式如下所示

var name T

一些常见的变量的声明样式如下

var a int //声明一个 int 类型的变量
var b string //声明一个 string 类型的变量
var c []float //声明一个 float 类型的切片
var d struct{ // 声明一个匿名结构体 该结构体有一个 int 类型的字段
 x int
var e func() bool //声明一个函数变量
var (
 f int
 g string
// 同时声明多组变量

在 Golang 中 每一个声明的变量都必须被使用 否则会编译不通过。

对变量进行声明之后 我们还需要对变量空白的内存区域进行初始化 也就是赋值。与其他的语言一致 通过 赋值符号初始化 如下例子:

var a int 100

上述代码中 声明了一个 int 类型的 a 变量 并将其赋值为 100。变量初始化的样式为

var name T 表达式

当然可以利用 Golang 提供的类型推导语法糖特性 精简为以下的样式

var a 100
b : Hello 

在省略了类型属性后 编译器会尝试根据等号右边的表达式推导出变量的类型。注意在使用 : 短变量声明初始化时 左值中的变量最少有一个变量必须是未定义过的变量 否则会出现编译错误。同时 : 不能出现在全局变量的声明和初始化中。

var a 100
a : 100 //编译报错
a, b : 100, OK //无异常

在上述代码中 a : 100 会在编译过程中抛出 no new variables on left side of : 的报错 而 a, b : 100 不会。

我们可以尝试运行 Variable 中的代码 看一下编译器的类型推导结果。

// Variable.go
package main
import fmt 
func main() {
 var a int 100
 var b 100 
 c : 0.17
 fmt.Printf( a value is %v, type is %T\n , a, a)
 fmt.Printf( b value is %v, type is %T\n , b, b)
 fmt.Printf( c value is %v, type is %T\n , c, c)
}

输出结果如下

a value is 100, type is int
b value is 100, type is string
c value is 0.17, type is float64

从上述表示结果可以看到 变量都被赋予了正确的变量类型。需要注意的是 为了提供精度 浮点数类型会被默认推导为 float64。

与 C 语言相比 除了类型推导的语法糖特性 Golang 还提供了多重赋值和匿名变量的语法糖特性。

在过去的编程语言中 如果我们想要交换变量的值 就需要借助一个第三方临时变量来实现 如下例子所示

var a int 1
var b int 2
var tmp int
tmp a
b tmp

在 Golang 中 我们可以通过多重赋值的特性轻松实现类似的变量交换任务 如下所示

var a int 1
var b int 2
b, a a, b

在多重赋值的过程中 变量的左值和右值按照从左往右的顺序赋值。

在 Golang 中 被声明的变量必须被使用 否则会被编译器抛出异常。Golang 支持函数多返回值和上面所说的多重赋值 但是有些时候我们不需要使用某些左值 可以使用匿名变量处理 具体例子如 Anonymous.go 所示

package main
import fmt 
// 返回一个人的姓和名
func getName() (string, string){
 return 王 , 小二 
func main() {
 surname, _ : getName()
 _, personalName : getName()
 fmt.Printf( My surname is %v and my personal name is %v , surname, personalName)
}

通过在不需要的变量声明的地方使用 _ 代替变量名 我们就可以忽略部分不需要的左值。匿名变量不占用命名空间 不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。

小结

变量一般是指程序运行过程中存储数据的抽象概念 它的值是允许改变的 与之相对的是常量 它的值在程序运行过程中是不允许变化的。下面的文章 我们将会介绍 Go 语言的原生数据类型。


阅读最新文章 关注公众号 aoho求索


本文转自网络,原文链接:https://developer.aliyun.com/article/784768
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐