现在学Go的,应该都不是刚入门的“新人”,基本概念、思想应该或多或少都知道。所以就快速过一遍语法,不详细讲解了。
输出语句
先来经典 —— Hello World。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Go语言关键字
首先先认识一下Go语言中关键字,心里有个印象,让初学者有个眼熟就行。在这里之所以提出来,就是让你们看一下。
下面列举了 Go 代码中会使用到的 25 个关键字或保留字:
| break | default | func | interface | select |
| case | defer | go | map | struct |
| chan | else | goto | package | switch |
| const | fallthrough | if | range | type |
| continue | for | import | return | var |
除了以上介绍的这些关键字,Go 语言还有 36 个预定义标识符,其中包含了基本类型的名称和一些基本的内置函数。
| append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
| copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
| int32 | int64 | iota | len | make | new | nil | panic | uint64 |
| println | real | recover | string | true | uint | uint8 | uintptr |
类型
数据类型
在 Go 编程语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
Go 语言按类别有以下几种数据类型:
变量定义
在数学概念中,变量表示没有固定值且可改变的数。但从计算机系统实现角度来看,变量是一段或多段用来存储数据的内存。
作为静态类型语言,go变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们只能修改变量值,无法改变类型。
var关键字定义
关键字var用于定义变量,和C不同,类型被放在变量后面。若显式提供初始值,可省略变量类型,由编译器推断。
var X int // 自动初始化为零
var y = false // 自动推断为bool的类型
可一次性定义多个变量,类型可相同也可不相同。
var x,y int
var a,b = 100, "abc"
简短模式
变量定义时,除var关键字外,还可使用更加简短的变量定义和初始化语法。
package main
import "fmt"
func main() {
x := 10 // 使用 := 进行定义并初始化
fmt.Println(x) // 输出语句 10
}
使用简短模式的一些限制:
- 定义变量,同时显式初始化。
- 不能提供数据类型。
- 只能用在函数内部,不能用在全局变量中。
多变量赋值
进行多变量赋值操作时,首先计算出等号右边值,然后再依次完成赋值操作。
package main
import "fmt"
func main(){
x, y := 10, 20
x, y = y+3, x+2 // 先计算等号右边值,然后再对x、y变量赋值
fmt.Println(x, y) // 输出语句 结果为:23 12
}
常量
常量表示运行时恒定不可改变的值,通常是一些字面量。使用常量就可用一个易于阅读理解的标识符号来代替"魔法数字",也使得在调整常量值时,无须修改所有引用代码。
常量值必须是编译期可确定的字符、字符串、数字或布尔值。可指定常量类型,或由编译器通过初始化推断。
在go语言中,使用关键字const来定义常量。
const x, y int = 10, 20
const a,b = "coding", "欢迎"
示例:
package main
import "fmt"
const (
a, b string = "coding", "欢迎"
)
func main() {
fmt.Println(a,b) // coding 欢迎
}
iota关键字
Go中没有明确意思上的enum(枚举)定义,不过可以借用iota标识符实现一组自增常量值来实现枚举类型。
const (
a = iota // 0
b // 1
c // 2
)
变量a、b、c的值分别为0、1、2,原因是因为使用iota进行自增时,后续自增值按照序递增。通俗点是每新增一行,iota值加一。
若在中途中断iota自增,则必须显示恢复,如下所示:
const (
a = iota // 0
b // 1
c = 100 // 100
d // 100 (与上一行常量值表达式一致)
e = iota // 4 (恢复iota自增,计数包括c、d)
f // 5
)
运算符
运算符使用方式和其他语言基本一样,在这里就不一一介绍了。
package main
import "fmt"
func main() {
var a int = 21
var b int = 10
var c int
c = a + b
fmt.Println(c) // 31
c = a - b
fmt.Println(c) // 11
c = a / b
fmt.Println(c) // 2
c = a % b
fmt.Println(c) // 1
a++
fmt.Println(a) // 22
a=21 // 为了方便测试,a 这里重新赋值为 21
a--
fmt.Println(a) // 20
}