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!")
}

变量的基本概念

变量本质

变量其本质是一段内存地址


变量类型

为不同的数据创建的不同的类型也就是变量的类型,


变量的命名

  1. 允许使用数字,字母,下划线,不能使用 %@
  2. 不允许使用数字开头,要注意区分大小写,且要做到见名知意
  3. 其中有些保留字和关键字不能作为变量的名字

变量的声明及初始化

变量的声明 – 声明一个变量

语法: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
}