Go 语言自学
- 编译器
- 第一个 Go 程序
- 变量的基本概念
- 变量的声明及初始化
- 自动推导赋值
- 多重赋值和匿名变量
- 常量
- 变量块和常量块的定义
- iota 枚举
对比其它语言的不同之处:自动推导赋值,数据置换,iota 枚举,变量块及常量块,匿名变量
编译器
我使用的编译器是:Visual Studio Code,使用之前需要进行多处配置
第一处
下载插件 Go
第二处
在命令行(win + R)输入命令
go env -w GOPROXY=https://goproxy.cn,direct
然后在编译器中通过 ctrl + shift + p
打开命令面板,输入 GO:install
全选所有下载,下载完成后即可以进行 Go 语言的编写
第一个 Go 程序
注意:在程序之前声明 main 包
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
// 输出打印并且换行
fmt.Println("Hello Go!")
// 输出打印但不换行
fmt.Print("Hello Go!")
fmt.Print("Hello Go!")
}
变量的基本概念
变量本质
变量其本质是一段内存地址
变量类型
为不同的数据创建的不同的类型也就是变量的类型,
变量的命名
- 允许使用数字,字母,下划线,不能使用 %@
- 不允许使用数字开头,要注意区分大小写,且要做到见名知意
- 其中有些保留字和关键字不能作为变量的名字
变量的声明及初始化
变量的声明 – 声明一个变量
语法:var 变量名 类型
注意事项:变量声明后必须使用;如果只是声明了变量却没有赋值,默认为 0;在同一个函数内,声明的变量是唯一的
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
var num int
fmt.Println(num) // 0
num = 100
fmt.Println(num) // 100
}
变量的声明 – 声明多个变量
语法:var 变量名1, 变量名2 类型
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
var num1, num2 int
num1 = 1
num2 = 2
fmt.Println(num1) // 1
fmt.Println(num2) // 2
}
变量的初始化 – 声明的同时赋值
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
var num1, num2 int = 1, 2
fmt.Println(num1, num2) // 1 2
}
注意:能将表达式的值赋值给变量
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
var ji float64 = 13 * 14
fmt.Println(ji)
}
自动推导赋值
语法1:var 变量名 = 值
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
var ch = 'a'
var str = "love"
// 换行打印变量的值
fmt.Println(ch) // 97
fmt.Println(str) // love
// 换行打印变量的类型
fmt.Printf("%T\n", ch) // int32
fmt.Printf("%T\n", str) // string
}
语法2:变量名 := 值
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
num1 := 100
// 换行打印变量的值
fmt.Println(num1) // 100
// 换行打印变量的类型
fmt.Printf("%T\n", num1) // int
}
多重赋值和匿名变量
多重赋值:同时给多个变量赋值(采用常见的自动推导类型)
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
num1, num2 := 100, 200
// 换行打印变量的值
fmt.Println(num1) // 100
fmt.Println(num2) // 200
// 换行打印变量的类型
fmt.Printf("%T\n", num1) // int
fmt.Printf("%T\n", num2) // int
}
数据置换:相当于于其它语言更加简洁
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
num1, num2 := 100, 200
// 换行打印变量的值
fmt.Println(num1) // 100
fmt.Println(num2) // 200
// 数据置换
num2, num1 = num1, num2
fmt.Println(num1) // 200
fmt.Println(num2) // 100
}
匿名变量
注意:" _ " 单个下划线命名的变量就是匿名变量
特点:丢弃数据不处理
例如:tmp, _ := 10, 20
注意:不能打印匿名变量;匿名变量配合函数返回值才有优势
程序举例
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
func three() (a, b, c int) {
return 1, 2, 3
}
// 入口函数
func main() {
// 调用函数
c, d, _ := three()
fmt.Println(c) // 1
fmt.Println(d) // 2
}
常量
常量声明 const
注意:常量初始化后将不能再被修改
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
const num int = 1
// num = 2 // 错误
fmt.Println(num) // 1
}
自动推导定义常量
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
const num1, num2 = 1, 2
fmt.Println(num1) // 1
fmt.Println(num2) // 2
}
变量块和常量块的定义
变量块
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
// 变量块
var (
num1 int = 1
str1 string = "love"
)
// 自动推导形式的变量块
var (
num2 = 2
str2 = "you"
)
fmt.Println(num1) // 1
fmt.Println(str1) // love
fmt.Println(num2) // 2
fmt.Println(str2) // you
}
常量块
package main // 声明 main 包
import "fmt" // 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
// 常量块
const (
num1 int = 1
str1 string = "love"
)
// 自动推导形式的常量块
const (
num2 = 2
str2 = "you"
)
fmt.Println(num1) // 1
fmt.Println(str1) // love
fmt.Println(num2) // 2
fmt.Println(str2) // you
}
iota 枚举
重点1:iota 是常量自动生成器
重点2:iota 给常量赋值使用
重点3:iota 碰见 const 将重置计数 从 0 开始
重点4:iota 在 const 内碰见 = 计数加 1
package main // 声明 main 包
import "fmt"
// 导入系统包 -- 标准输入输出包
// 入口函数
func main() {
const (
a = iota
b = iota
c = iota
d = iota
)
fmt.Println(a, b, c, d) // 0 1 2 3
const (
e = iota
f
g
h
)
fmt.Println(e, f, g, h) // 0 1 2 3
const (
i, j, k, l = iota, iota, iota, iota
m = iota
n
)
fmt.Println(i, j, k, l, m, n) // 0 0 0 0 1 2
}