提交 ecc98233 编写于 作者: 彭世瑜's avatar 彭世瑜

fix

上级 a0e173df
......@@ -551,3 +551,95 @@ func main() {
}
```
## defer语句
defer语句后面的语句延迟处理,在defer归属的函数即将返回时,将延迟处理的语句按照defer定义的逆序进行执行
也就是说,先定义的defer语句最后执行;后定义的defer语句,先执行
defer特性
- 关键字defer用于注册延迟调用
- 这些调用知道return前才被执行,可以用来做资源清理
- 多个defer语句,按照先进后出的顺序执行
- defer语句中的变量,defer声明时就决定了
defer用途
- 关闭文件句柄
- 锁资源释放
- 数据库连接释放
示例
```go
package main
import "fmt"
func main() {
fmt.Println("start")
defer fmt.Println("defer1")
defer fmt.Println("defer2")
defer fmt.Println("defer3")
fmt.Println("end")
// start
// end
// defer3
// defer2
// defer1
}
```
## init函数
init函数是特殊函数,会先于main函数执行,实现包级别的`初始化操作`
init函数特点
- init函数先于main函数`自动执行`,不能被其他函数调用
- init函数没有输入参数,没有返回值
- 每个包可以有多个init函数
- 包的每个源文件也可以有多个init函数
- 同一个包的init执行顺序,golang没有明确意义
- 不同胞的init函数按照包导入的依赖关系决定执行顺序
golang初始化顺序
```
变量初始化 -> init() -> main()
```
示例
```go
package main
import "fmt"
var i int = initVar()
func initVar() int {
fmt.Println("initVar")
return 100
}
func init() {
fmt.Println("init")
}
func main() {
fmt.Println("main")
}
// initVar
// init
// main
```
# Golang 指针
## 指针
- 取地址:`&`
- 取值:`*`
指针地址:每一个变量都有一个地址,地址代表变量在内存中的位置
Go语言中的值类型(int、float、bool、string、array、struct)
对应的指针类型(*int、*int64、*string)
指针变量定义语法
```go
// 指针变量名 指针类型
var var_name *var_type
```
示例
```go
package main
import "fmt"
func main() {
// 声明指针变量
var ip *int
fmt.Printf("%v\n", ip) // <nil>
fmt.Printf("%T\n", ip) // *int
// 声明int变量
var i int = 10
// 取地址
ip = &i
fmt.Printf("%v\n", ip)
// 0xc0000ae010
// 取值
fmt.Printf("%v\n", *ip)
// 10
}
```
## 指向数组的指针
定义语法
```go
// 表示数组里面的元素类型是指针类型
var ptr [MAX]*int;
```
示例
```go
package main
import "fmt"
func main() {
arr := [...]int{1, 2, 3}
var ptr [len(arr)]*int
fmt.Printf("%v\n", ptr)
// [<nil> <nil> <nil>]
for i := 0; i < len(arr); i++ {
ptr[i] = &arr[i]
}
fmt.Printf("%v\n", ptr)
// [0xc000022090 0xc000022098 0xc0000220a0]
for i := 0; i < len(ptr); i++ {
fmt.Printf("%v\t", *ptr[i])
}
// 1 2 3
}
```
......@@ -38,9 +38,12 @@
[第十五章 Golang 函数](/blog/golang/golang-function.md)
[第十六章 Golang 指针](/blog/golang/golang-pointer.md)
https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=45&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
https://www.bilibili.com/video/BV1zR4y1t7Wj/?p=49&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册