Go 语言基 础入门
Go 语言是一门简单易学的编程语言,由 Goolge 开发,支持多线程,并拥有庞大的社区生态。近期 Go 语言在企业项目中应用的越来越多,那么这个视频将会介绍 Go 的重点语法,方便你快速上手。
本视频适合有其他编程语言基础的开发者观看。
https://go.dev/doc/effective_go
安装与环境配置
下载:https://go.dev/learn/ 双击安装包安装。 验证:
go version
输出:
go version go1.19 darwin/amd64
创建项目
找到合适目录:
mkdir go-get-started
cd go-get-started
初始化:
go mod init github.com/zxuqian/go-get-started
VS Code 配置
安装 Go 插件 golang.Go
Hello World
在 vs code 中 创建 main.go 文 件,代码:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
运行:
go run .
Go 语言代码无需分号
变量
在函数里定义定义变量可以使用 := 符号,在定义 的同时进行赋值,Go 会自动推断变量类型:
func main() {
a := 1
fmt.Println(a)
}
也可以使用 var 关键字,使用 = 赋初始值:
func main() {
var b = 2
fmt.Println(b)
}
如果不赋初始值,需要给变量指定类型:
func main() {
var b int
b = 2
}
如果在函数外,也就是顶级作用域,定义变量,必须使用 var 关键字
var b = 2
func main() {
fmt.Println(b)
}
基本类型
Go 语言提供了这样一组基本类型:
- int 整数类型,以及相关位数的变体,其中 byte 是 unit 8 的别名,rune 是 int32 的别名。一般直接使用 int 类型,它在 32 位和 64 位平台下会分别取对应位数长度。
- float 是浮点数类型
- complex 是复数类型
- bool 是布尔类型
- string 是字符串类型
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 别名
rune // int32 别名
float32 float64
complex64 complex128
bool
string
我们可以利用 fmt.Printf() 来获取变量类型。Printf() 函数第一个参数接收字符串模板,我们可以利用 %T 来占位,后面的参数按顺序给前面的占位传递实际的值:
func main() {
a := 1
fmt.Printf("a 的类型为: %T\n", a) // a 的类型为: int
b := 3.2
fmt.Printf("b 的类型为: %T\n", b) // b 的类型为: float64
c := false
fmt.Printf("c 的类型为: %T\n", c) // c 的类型为: bool
d := "str"
fmt.Printf("d 的类型为: %T\n", d) // d 的类型为: string
}
运算符
Go 的运算符与流行的编程语言基本保持一致,有数学运算符 +、-、\*、/、%
,比较运算符 <、>、<=、>=、==
,位运算符 &、|、^
, 逻辑运算符 &&、||、!
等这些。
func main() {
a := 5;
b := 10;
fmt.Println(a + 5) // 10
fmt.Println(b % 3) // 1
fmt.Println(a <= b) // true
fmt.Println(a & b) // 0
fmt.Println(true && !false) // true
}
分支
Go 语言的分支结构与流行的编程语言基本类似,只是 if 条件后,不需要加小括号:
func main() {
a := 10
if a > 10 {
fmt.Println("a 大于 10")
} else if a > 5 {
fmt.Println("a 大于 5") // 会执行这里
} else {
fmt.Println("a 不大于 5")
}
}
if 中也可以初始化变量,这个变量只能在 if/else if/else 语句块中使用,初始化变量和条件判断的代码使用 ; 分号隔开:
func main() {
a := 10
if b := 3; a > 10 {
fmt.Println("a 大于 10")
} else if a > 5 {
fmt.Println("a 大于 5") // 会执行这里
fmt.Println(b) // 3
} else {
fmt.Println("a 不大于 5")
}
}
Go 也支持 switch case 语句,不过在一个 case 匹配之后,不会执行后续的 case,可以省略 break:
func main() {
a := 10
switch a {
case 1:
fmt.Println("a 等于 1")
case 5:
fmt.Println("a 等于 5")
case 10:
fmt.Println("a 等于 10")
default:
fmt.Println(a)
}
}