Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
61d56f60
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看板
提交
61d56f60
编写于
9月 19, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
9c2db526
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
487 addition
and
2 deletion
+487
-2
blog/golang/golang-function.md
blog/golang/golang-function.md
+297
-0
blog/golang/golang-map.md
blog/golang/golang-map.md
+183
-0
blog/golang/index.md
blog/golang/index.md
+7
-2
未找到文件。
blog/golang/golang-function.md
0 → 100644
浏览文件 @
61d56f60
# 第十五章 Golang 函数
## Go语言函数特性
1.
函数分类:
-
普通函数
-
匿名函数
-
方法
2.
函数不能重载,即不允许函数同名
3.
函数不能嵌套函数,但可以嵌套匿名函数
4.
函数可以赋值给变量
5.
函数可以作为参数传递给另一个函数
6.
函数的返回值可以是一个函数
7.
函数传参传递是参数的副本
8.
函数参数可以没有名称
## 函数定义
```
go
func
function_name
([
parameter
list
])[
return_type
]
{
// 函数体
}
```
示例
```
go
package
main
import
"fmt"
func
sum
(
a
int
,
b
int
)
(
ret
int
)
{
return
a
+
b
}
func
main
()
{
r
:=
sum
(
1
,
1
)
fmt
.
Printf
(
"%v"
,
r
)
// 2
}
```
## 函数返回值
没有返回值
```
go
func
foo
(){
fmt
.
Println
(
"Hello"
)
}
```
一个返回值
```
go
func
sum
(
a
int
,
b
int
)
(
ret
int
)
{
return
a
+
b
}
```
多个返回值
```
go
func
foo
()
(
name
string
,
age
int
)
{
return
"Tom"
,
23
}
// 省略命名
func
foo
()
(
string
,
int
)
{
return
"Tom"
,
23
}
```
多值返回常用于函数返回错误
```
value, exists
value, ok
value, err
```
返回值过多(4个以上),通常放在容器中返回
```
同类型 slice
不同类型 map
```
返回值不想使用,可以使用
`_`
丢弃
## 函数参数
参数类型:
-
形参 声明函数时的参数列表
-
实参 调用时传递的参数
特点:
-
参数可以0个或者有多个,需要指定数据类型
-
函数是传值的方式进行传参
-
可以使用变长参数
`...`
示例
```
go
package
main
import
"fmt"
// a, b形参
func
sum
(
a
int
,
b
int
)
(
ret
int
)
{
return
a
+
b
}
func
main
()
{
// 1, 1 实参
r
:=
sum
(
1
,
1
)
fmt
.
Printf
(
"%v"
,
r
)
// 2
}
```
注意:
-
map、slice、interface、channel数据类型是指针,拷贝的是指针,有可能会改变原始数据
```
go
package
main
import
"fmt"
func
foo
(
arr
[]
int
)
{
arr
[
0
]
=
100
}
func
main
()
{
a
:=
[]
int
{
1
,
2
,
3
}
foo
(
a
)
fmt
.
Printf
(
"%v"
,
a
)
// [100 2 3]
}
```
变长参数
```
go
package
main
import
"fmt"
func
foo
(
args
...
int
)
{
for
_
,
value
:=
range
args
{
fmt
.
Printf
(
"%v "
,
value
)
}
}
func
main
()
{
foo
(
1
,
2
,
3
)
// 1 2 3
}
```
多种参数混合使用
```
go
package
main
func
foo
(
name
string
,
isMan
bool
,
arr
...
int
)
{
}
func
main
()
{
foo
(
"Tom"
,
true
,
1
,
2
,
3
)
}
```
## 函数类型与函数变量
定义函数类型
```
go
// 示例:接收两个参数,返回一个参数
type
function_name
func
(
int
,
int
)
int
```
示例
```
go
package
main
import
"fmt"
// 定义函数类型
type
foo
func
(
int
,
int
)
int
func
sum
(
a
int
,
b
int
)
int
{
return
a
+
b
}
func
max
(
a
int
,
b
int
)
int
{
if
a
>
b
{
return
a
}
else
{
return
b
}
}
func
main
()
{
// 声明
var
f
foo
f
=
sum
s
:=
f
(
1
,
2
)
fmt
.
Printf
(
"%v
\n
"
,
s
)
// 3
f
=
max
m
:=
f
(
1
,
2
)
fmt
.
Printf
(
"%v
\n
"
,
m
)
// 2
}
```
## 高阶函数
go语言的函数,可以作为函数的参数,也可以作为函数返回值
函数作为参数
```
go
package
main
import
"fmt"
func
sayHello
(
name
string
)
{
fmt
.
Printf
(
"Hello %s"
,
name
)
}
func
foo
(
name
string
,
fun
func
(
string
))
{
fun
(
name
)
}
func
main
()
{
foo
(
"Tom"
,
sayHello
)
// Hello Tom
}
```
函数作为返回值
```
go
package
main
import
"fmt"
func
sum
(
a
int
,
b
int
)
int
{
return
a
+
b
}
func
sub
(
a
int
,
b
int
)
int
{
return
a
-
b
}
func
calc
(
name
string
)
func
(
a
int
,
b
int
)
int
{
switch
name
{
case
"+"
:
return
sum
case
"-"
:
return
sub
default
:
return
nil
}
}
func
main
()
{
sum
:=
calc
(
"+"
)
r
:=
sum
(
1
,
1
)
fmt
.
Printf
(
"%v"
,
r
)
// 2
}
```
blog/golang/golang-map.md
0 → 100644
浏览文件 @
61d56f60
# 第十四章 Golang map
`key:value`
键值对的数据结构容器
## 语法格式
```
go
// 声明变量,默认是nil
var
map_variable
map
[
key_data_type
]
value_data_type
// 使用make函数
var
map_variable
=
make
(
map
[
key_data_type
]
value_data_type
)
```
示例
```
go
package
main
import
(
"fmt"
)
func
main
()
{
// 声明
var
m
map
[
string
]
string
fmt
.
Printf
(
"%v
\n
"
,
m
)
// map[]
fmt
.
Printf
(
"%T
\n
"
,
m
)
// map[string]string
// 初始化
m
=
make
(
map
[
string
]
string
)
m
[
"name"
]
=
"Steve"
fmt
.
Printf
(
"%v
\n
"
,
m
)
// map[name:Steve]
}
```
声明并初始化
```
go
package
main
import
(
"fmt"
)
func
main
()
{
// 声明并初始化
m1
:=
make
(
map
[
string
]
string
)
m1
[
"name"
]
=
"Tom"
m1
[
"age"
]
=
"12"
fmt
.
Printf
(
"%v
\n
"
,
m1
)
// map[age:12 name:Tom]
// 声明并直接赋初始值
m2
:=
map
[
string
]
string
{
"name"
:
"Jack"
,
"age"
:
"21"
,
}
fmt
.
Printf
(
"%v
\n
"
,
m2
)
// map[age:21 name:Jack]
}
```
## 访问数据
通过键key 获取值value
```
go
package
main
import
(
"fmt"
)
func
main
()
{
m
:=
map
[
string
]
string
{
"name"
:
"Jack"
,
"age"
:
"21"
,
}
// 访问成员
name
:=
m
[
"name"
]
fmt
.
Printf
(
"%v
\n
"
,
name
)
// Jack
}
```
## 成员检查
判断键是否存在
```
go
value
,
ok
=
map
[
key
]
```
示例
```
go
package
main
import
(
"fmt"
)
func
main
()
{
m
:=
map
[
string
]
string
{
"name"
:
"Jack"
,
"age"
:
"21"
,
}
// 访问成员
name
,
ok
:=
m
[
"name"
]
fmt
.
Printf
(
"%v
\n
"
,
name
)
// Jack
fmt
.
Printf
(
"%v
\n
"
,
ok
)
// true
}
```
## 遍历map
示例1
```
go
package
main
import
(
"fmt"
)
func
main
()
{
m
:=
map
[
string
]
string
{
"name"
:
"Jack"
,
"age"
:
"21"
,
}
for
key
,
value
:=
range
m
{
fmt
.
Printf
(
"%v => %v
\n
"
,
key
,
value
)
}
// name => Jack
// age => 21
}
```
示例2
```
go
package
main
import
(
"fmt"
)
func
main
()
{
m
:=
map
[
string
]
string
{
"name"
:
"Jack"
,
"age"
:
"21"
,
}
for
key
:=
range
m
{
fmt
.
Printf
(
"%v => %v
\n
"
,
key
,
m
[
key
])
}
// name => Jack
// age => 21
}
```
blog/golang/index.md
浏览文件 @
61d56f60
...
...
@@ -12,7 +12,7 @@
[
第二章 Golang 环境安装
](
blog/golang/golang-install.md
)
[
第三章 Golang 运行代码
](
blog/golang/golang-run.md
)
[
第三章 Golang 运行代码
](
/
blog/golang/golang-run.md
)
[
第四章 Golang 项目管理
](
blog/golang/golang-project.md
)
...
...
@@ -34,7 +34,12 @@
[
第十三章 Golang 切片 slice
](
/blog/golang/golang-slice.md
)
[
第十四章 Golang map
](
/blog/golang/golang-map.md
)
[
第十五章 Golang 函数
](
/blog/golang/golang-function.md
)
https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=35&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=42&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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录