1. 变量
1.1 变量的声明
-
局部变量的声明
// 方法一:声明一个变量 默认的值是0 var a int
// 方法二:声明一个变量,初始化一个值 var b int = 100
// 方法三:在初始化的时候,可以省去数据类型,通过值自动匹配当前变量的数据类型 var c =100
// 方法四:(常用方法)省去var关键字,直接自动匹配 e := 100
-
全局变量的声明
-
方法四不支持全局
-
多变量的声明
// 单行写法 var xx, yy int = 100 var kk, ll = 100, "abc"
// 多行写法 var ( vv int = 100 tt bool = true
)
2. 常量与iota
2.1 常量
// 单行声明
const a int = 10
// 多行声明
const (
a = 10
b = 20
)
2.2 iota
// 与const配合 来定义枚举类型
const (
// 可以在const() 添加一个关键字 iota
BEIJING = 10*iota // iota = 0
SHANGHAI // iota = 1
SHENZHEN // iota = 2
)
3. 函数
3.1 多值返回
// 返回多个返回值,匿名的
func foo2(a string, b int)(int, int) {
fmt.Println("a = ", a)
fmt.Println("b = ", b)
return 666, 777
}
// 返回多个返回值,有形参名称的
func foo3(a string, b int)(r1 int, r2 int) {
fmt.Println("---- foo3 ----")
fmt.Println("a = ", a)
fmt.Println("b = ", b)
// r1 r2 属于foo3的形参,初始化默认的值0
// r1 r2 作用域空间 是foo3 整个函数体{}空间
// 给有名称的返回值变量赋值
r1 = 1000
r2 = 2000
return
}
func foo4(a string, b int)(r1, r2 int) {
fmt.Println("a = ", a)
fmt.Println("b = ", b)
// 给有名称的返回值变量赋值
r1 = 1000
r2 = 2000
return
}
3.2 init函数与import包
import包:
import用于在Go程序中引入其他包(package)。在Go中,代码是组织在包中的,每个文件都属于一个包。通过import语句,你可以让当前包访问其他包中的代码。import语句应该出现在文件的顶部。
例如,假设你想要使用fmt包中的Println函数,你可以这样导入它:
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
init函数:
init函数是Go语言中一个特殊的函数,用于在程序启动时执行初始化操作。每个包可以定义一个或多个init函数,它们会在包被导入时自动调用。init函数没有参数和返回值,也不能手动调用。
init函数的调用顺序是从导入的包的依赖关系决定的,首先是被直接引入的包的init函数,然后是依赖的包的init函数。如果一个包被多次引入,它的init函数只会执行一次。
下面是一个示例,展示了两个包的init函数的调用顺序:
package main
import (
"fmt"
"mypackage"
)
func init() {
fmt.Println("Main package init")
}
func main() {
fmt.Println("Main package main")
mypackage.ShowMessage()
}
package mypackage
import "fmt"
func init() {
fmt.Println("My package init")
}
func ShowMessage() {
fmt.Println("Hello from my package")
}
当执行上述代码时,mypackage包的init函数会在main包的init函数之前调用。输出将会是:
My package init
Main package init
Main package main
Hello from my package