Golang学习笔记_03——匿名函数和闭包
Golang学习笔记_04——递归函数
Golang学习笔记_05——延迟调用
文章目录
- 1. 变量
- 1.1 声明
- 1.2 多变量声明
- 1.3 作用域
- 1.4 生命周期
- 1.5 匿名变量
- 2. 常量
- 源码
1. 变量
Go语言中的变量是存储数据的基本单元,它们允许你为数据命名,从而在程序的不同部分中方便地引用和操作这些数据
1.1 声明
使用var
关键字声明变量
var name type = value
// name 是变量的名称
// type 是变量的类型
// value 是变量的初始值var a int = 10
var b string = "hello world"
var c float64
在Go语言中,编译器可以根据初始值自动推断变量的类型,因此可以省略类型声明
var name = value
// 省略变量类型var d = 42
var e = "hello world"
在函数内部,可以使用 :=
进行简短变量声明,这种方式不仅声明变量,还根据初始值自动推断类型,并且只能用于函数内部。
name := value // 省略了var关键字,省略了类型func main() {f := 20g := "Short declaration"
}
1.2 多变量声明
在Go语言中,可以在一行中声明多个变量。
var a, b, c int = 1, 2, 3
// var age int, name string = 18, "go" // 语法错误
// syntax error: unexpected comma after top level declaration
var x, y string = "foo", "bar"
d, e, f := 4, 5, "baz"
1.3 作用域
变量的作用域决定了变量在程序中的哪些部分可见。Go语言中的变量作用域主要有以下几种:
- 包级作用域:通过
var
在包级别声明的变量,在整个包中都可见。 - 函数级作用域:通过
var
在函数内部声明的变量,或者在函数内部使用:=
声明的变量,其作用域仅限于该函数内部。 - 块级作用域:在
{ }
内部的if
,for
,switch
语句中声明的变量,其作用域仅限于该块内部。
1.4 生命周期
变量的生命周期是指变量从创建到释放的时间段。在Go语言中,局部变量(函数内部声明的变量)在函数被调用时创建,在函数返回时销毁。全局变量(包级别声明的变量)在程序开始时创建,在程序结束时销毁。
1.5 匿名变量
使用 _
可以忽略不需要的返回值或变量。这在处理多返回值函数时特别有用。
func justDemo() (int, string) {return 100, "hello world"
}func anonymousVariableDemo() {_, str := justDemo()age, _ := justDemo()fmt.Println(str)fmt.Println(age)
}
测试方法
func Test_anonymousVariableDemo(t *testing.T) {anonymousVariableDemo()
}
输出结果
=== RUN Test_anonymousVariableDemo
hello world
100
--- PASS: Test_anonymousVariableDemo (0.00s)
PASS
2. 常量
与变量不同,常量在声明时必须初始化,并且在程序运行期间其值不能被改变。使用 const
关键字声明常量。
const Pi = 3.14const Greeting = "Hello, Go!"
源码
// var_demo.go 文件
package var_demoimport "fmt"var num int = 100
var name string = "Go"var a, b, c int = 1, 2, 3
var x, y string = "foo", "bar"var xx, yy string = "100", "hello world"// var age int, name string = 18, "go"
// syntax error: unexpected comma after top level declarationfunc varDemoFunc() {pi_demo := 3.1415926age, name, isBoy := 20, "boy", truefmt.Println(num)fmt.Println(name)fmt.Println(pi_demo)fmt.Println(yy)fmt.Println(age)fmt.Println(isBoy)}func constDemoFunc() {const Pi = 3.1415926const World = "world"fmt.Println(World)fmt.Println(Pi)
}func justDemo() (int, string) {return 100, "hello world"
}func anonymousVariableDemo() {_, str := justDemo()age, _ := justDemo()fmt.Println(str)fmt.Println(age)
}
// var_demo_test.go 文件
package var_demoimport "testing"func Test_varDemoFunc(t *testing.T) {varDemoFunc()
}func Test_constDemoFunc(t *testing.T) {constDemoFunc()
}func Test_anonymousVariableDemo(t *testing.T) {anonymousVariableDemo()
}