前期准备
下载安装 go
https://studygolang.com/dl
配置环境变量
我的电脑 - 属性 - 高级系统设置 - 环境变量
新建 - 系统变量
GOROOT 安装目录
GOPATH 自己新建go的工作目录
修改-用户变量
GOPATH
GOPATH 目录下需要有三个文件夹
D:/GoWorks
----- bin
----- pkg
----- src
检查安装是否成功
go version
go env
go IDE
- golang
- vscode
- 配置:安装汉化包 language
- 插件:
Hello World
package main
import "fmt"
func main(){
fmt.PrintIn("hello world")
}
执行go 文件 hello.go
go run hello.go
- 出错了
go env -w GO111MODULE=off
温馨提示
注意:在 GO 语言里,命名为 main 的包具有特殊的含义。Go 语言的编译程序会试图把这种名字的报编译为二进制可执行文件。所有Go语言编译的可执行程序都必须有一个名叫 main 的包。一个可执行程序有且仅有一个 main 包。
当编译器发现有一个 main 包时候,那么它一定会有一个 main 函数。
基础语法学习
注释
- 单行注释
- 多行注释
package main
import "fmt"
/*
这是一个main函数,
这格式 go 语言启动的入口
*/
func main() {
// 我是单行注释
fmt.PrintIn("hello world")
}
变量
什么是变量
package main
import "fmt"
func main() {
// name 变量
var name string = "变量"
fmt.PrintIn(name)
}
变量的定义
在go语言中,我们声明一个变量一般使用 var
var name type
注意:go语言中变量定义必须使用,否则报错
- 变量声明未初始化,值为空
- 变量的首个字母不能为数字
- Go 语言中变量声明后才可使用,但是同一个作用域变量不能重复声明
package main
import "fmt"
func main() {
// 定义多个变量
var (
name string
age int
addr string
)
// string 的默认值:空
// int 默认值是:0
var age int = 18
var name string = "变量"
fmt.PrintIn(name,age)
}
- 使用关键字 var 和 括号,可以将一组变量定义挡在一起。
- var 形式的声明语句往往是用于需要显示指定变量类型地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方
- 当变量声明没有赋值,系统会自动赋予它该类型的零值:
- 整形和浮点型变量的默认值为 0 和 0.0
- 字符串变量的默认值为空字符串
- 布尔型变量默认为 false
- 切片、函数、指针变量的默认为 nil
- 变量名遵循驼峰命名法。即首个单词小写,每个新单词的首字母大写;如: userFiles 和 systemInfo
变量的初始化
package main
import "fmt"
func main() {
// 定义多个变量
var (
name string
age int
addr string
)
age = 18
name = "变量"
addr = 'fdff'
fmt.PrintIn(name,age)
}
变量初始化语法糖
- 短变量声明并初始化
:=
自动推导- 全局变量不可以使用短变量声明法
name := "hhh"
age := 18
// 查询变量类型 %T=type
fmt.Printf("%T,%T",name,age)
打印内存地址
package main
import "fmt"
func main() {
var num int
num = 100
fmt.Printf("num:%d,内存地址:%p", num, &num)
}
变量交换
package main
import "fmt"
func main() {
var (
a int
b int
)
a = 100
b = 200
b,a = a,b
fmt.Printfln(a, b)
}
匿名变量
匿名变量的特点是一个下划线 "_"," _"
本身就是一个特殊的标识符,被称为空白标识符,它可以像其他标识符那样用于变量声明或赋值(任何类型都可以赋值给它)但任何付给这个标识符的值都将被抛弃
,因此这些值不能在后续代码中使用,也不可以使用这个标识符作为变量对其它变量进行赋值或运算,使用匿名变量时,只需在变量声明的地方使用下划线替换即可。
package main
import "fmt"
func test() (int,int) {
return 100,200
}
func main() {
a, _:= test()
_, b:= test()
fmt.PrintIn(a, b) // 100,200
}
变量作用域
- 局部变量
定义在 函数内部 main - 全局变量
定义在 函数变量的外部 - 局部变量和全局变量可以定义相同的名字
但是函数体内局部变量优先考虑
常量
常量是一个简单的标识符,程序运行时,不会改变
常量中的数据类型只能时 布尔、数字型(整数、浮点和复数)和字符串
const identifier [type] = value
iota
特俗常量,可以认为是一个可以被编译修改的常量,iota是go语言的常量计数器。
iota在const 关键字出现时将被重置为 0(const 内部的第一行之前)const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)
package main
import "fmt"
func main() {
const (
a = iota
b
c
d = "sjdjs"
e
f = 100
g = iota
)
fmt.Println(a, b, c, d, e, f, g) // 0 1 2 sjdjs sjdjs 100 6
}
- 多个 iota定义在一行
package main
import "fmt"
func main() {
const (
n1, n2 = iota +1, iota +2
n3, n4
n5, n6
)
fmt.Println(n1,n2,n3,n4,n5,n6) // 1 2 2 3 3 4
}
Go 语言变量、常量命名规则
- 变量名必须由数字、字母、下划线组成
- 标识符开头不能是数字
- 标识符不能是保留字和关键字
- 变量的名字是区分大小写的如:age 和 Age 是不同的变量。在实际开发中也不要用一个单词的大小写区分变量
- 标识符(变量名称)一定要见名思意:变量名称建议用名称,方法名称建议用动词
- 变量名一般采用驼峰式,当遇到特有名称(缩写或简称,如:DNS)的时候,特有名词根据是否私有全部大写或小写。
Go语言代码风格
- 代码每一行结束后不用写分号(;)
- 运算符左右建议各加一个空格
- Go语言程序员推荐使用驼峰式命名
当名字有几个单词组成的时优先使用大小写分隔 - 强制的代码风格
左括号必须紧接着语句不换行,这个特性刚开始会使开发者不习惯,但随着对 Go 语言的不断熟悉,就会发现风格统一让大家在阅读代码时把注意力集中到了解决问题上,而不是代码风格上。 - go fmt 主要用于格式化文档,让所有人的代码风格保持一致