Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
ecc98233
C
Coding Tree
项目概览
檀越@新空间
/
Coding Tree
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coding Tree
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ecc98233
编写于
9月 20, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
a0e173df
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
184 addition
and
1 deletion
+184
-1
blog/golang/golang-function.md
blog/golang/golang-function.md
+92
-0
blog/golang/golang-pointer.md
blog/golang/golang-pointer.md
+88
-0
blog/golang/index.md
blog/golang/index.md
+4
-1
未找到文件。
blog/golang/golang-function.md
浏览文件 @
ecc98233
...
...
@@ -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
```
blog/golang/golang-pointer.md
0 → 100644
浏览文件 @
ecc98233
# 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
}
```
blog/golang/index.md
浏览文件 @
ecc98233
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录