前面的文章介绍了 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求索
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
溢价 域名 的续费价格如何?通常来说,因为溢价域名的价值高于普通域名,所以溢...
基本介绍 给定 n 个权值作为 n 个叶子节点,构造一颗二叉树,若该树的带权路径长...
TIOBE 公布了 2021 年 3 月的编程语言排行榜。 本月 TIOBE 指数没有什么有趣的变...
在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多...
本文转载自微信公众号「bugstack虫洞栈」,作者小傅哥 。转载本文请联系bugstack...
本文转载自公众号读芯术(ID:AI_Discovery)。 这一刻你正在应对什么挑战?这位前...
背景 我们知道 如果在Kubernetes中支持GPU设备调度 需要做如下的工作 节点上安装...
近几年,互联网行业蓬勃发展,在互联网浪潮的冲击下,互联网创业已成为一种比较...
前言 统计科学家使用交互式的统计工具(比如R)来回答数据中的问题,获得全景的认...