Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
檀越@新空间
Coding Tree
提交
efcf9fc3
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看板
提交
efcf9fc3
编写于
9月 13, 2022
作者:
彭世瑜
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
398615de
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
404 addition
and
3 deletion
+404
-3
blog/golang/golang-array.md
blog/golang/golang-array.md
+177
-0
blog/golang/golang-process.md
blog/golang/golang-process.md
+130
-2
blog/golang/golang-slice.md
blog/golang/golang-slice.md
+92
-0
blog/golang/index.md
blog/golang/index.md
+5
-1
未找到文件。
blog/golang/golang-array.md
0 → 100644
浏览文件 @
efcf9fc3
# 第十二章 Golang 数组
数组:相同数据类型的一组数据的集合
-
数组长度不能修改
-
数组可以通过下标(索引)访问元素
-
数组默认初始化为零值
## 定义
```
go
var
variable_name
[
SIZE
]
variable_type
```
示例
```
go
package
main
import
"fmt"
func
main
()
{
var
arr1
[
2
]
string
var
arr2
[
3
]
int
fmt
.
Printf
(
"arr1: %v
\n
"
,
arr1
)
// arr1: [ ]
fmt
.
Printf
(
"arr1: %T
\n
"
,
arr1
)
// arr1: [2]string
fmt
.
Printf
(
"arr2: %v
\n
"
,
arr2
)
// arr2: [0 0 0]
fmt
.
Printf
(
"arr2: %T
\n
"
,
arr2
)
// arr2: [3]int
}
```
## 初始化
示例
```
go
package
main
import
"fmt"
func
main
()
{
var
arr1
=
[
2
]
string
{
"Tom"
,
"Jack"
}
var
arr2
=
[
3
]
int
{
1
,
2
,
3
}
var
arr3
=
[
2
]
bool
{
true
,
false
}
fmt
.
Printf
(
"arr1: %v
\n
"
,
arr1
)
// arr1: [Tom Jack]
fmt
.
Printf
(
"arr2: %v
\n
"
,
arr2
)
// arr2: [1 2 3]
fmt
.
Printf
(
"arr3: %v
\n
"
,
arr3
)
// arr3: [true false]
}
```
可以省略长度
```
go
var
arr1
=
[
...
]
int
{
1
,
2
,
3
}
// 等价于
// var arr1 = [3]int{1, 2, 3}
fmt
.
Printf
(
"len: %v
\n
"
,
len
(
arr1
))
// len: 3
```
指定索引值
```
go
package
main
import
"fmt"
func
main
()
{
// 未指定的值初始化为零值
var
arr1
=
[
...
]
int
{
0
:
1
,
2
:
3
}
fmt
.
Printf
(
"arr1: %v
\n
"
,
arr1
)
// arr1: [1 0 3]
}
```
## 访问数组元素
示例
```
go
package
main
import
"fmt"
func
main
()
{
var
arr1
[
3
]
int
fmt
.
Printf
(
"arr1: %v
\n
"
,
arr1
)
// arr1: [0 0 0]
// 赋值
arr1
[
0
]
=
1
arr1
[
2
]
=
2
fmt
.
Printf
(
"arr1: %v
\n
"
,
arr1
)
// arr1: [1 0 2]
// 取值
fmt
.
Printf
(
"arr1[0]: %v
\n
"
,
arr1
[
0
])
// arr1[0]: 1
// 获取数组长度
fmt
.
Printf
(
"len(arr1): %v
\n
"
,
len
(
arr1
))
// len(arr1): 3
// 数组长度越界
fmt
.
Printf
(
"arr1[0]: %v
\n
"
,
arr1
[
3
])
// invalid argument: index 3 out of bounds [0:3]
}
```
## 遍历数组
方式一:for
```
go
package
main
import
"fmt"
func
main
()
{
var
arr
=
[
...
]
int
{
100
,
200
,
300
}
// 快捷键for + tab
for
i
:=
0
;
i
<
len
(
arr
);
i
++
{
fmt
.
Printf
(
"arr[%v]=%v
\n
"
,
i
,
arr
[
i
])
}
// arr[0]=100
// arr[1]=200
// arr[2]=300
}
```
方式二:for...range
```
go
package
main
import
"fmt"
func
main
()
{
var
arr
=
[
...
]
int
{
100
,
200
,
300
}
// 快捷键forr + tab
// 索引, 值
for
index
,
value
:=
range
arr
{
fmt
.
Printf
(
"arr[%v]=%v
\n
"
,
index
,
value
)
}
// arr[0]=100
// arr[1]=200
// arr[2]=300
}
```
blog/golang/golang-process.md
浏览文件 @
efcf9fc3
...
...
@@ -243,7 +243,7 @@ func main() {
### for...range
for...range
遍历数组、切片、字符串、map
及通道(channel)
for...range
遍历数组、切片、字符串、map
及通道(channel)
返回值:
...
...
@@ -270,7 +270,7 @@ func main() {
```
遍历map
遍历
map
```
go
package
main
...
...
@@ -295,3 +295,131 @@ func main() {
-
break
-
continue
-
goto
#### break
break 结束 for switch select 的代码块
break 注意事项
-
单独在 select 中使用 break,和不使用 break 没区别
-
单独在表达式 switch 语句,并且没有 falllthough,使用 break 和不使用 break 没区别
-
单独在表达式 switch 语句,并且有 falllthough,使用 break 能够终止 fallthough 后面的 case 语句
-
带标签的 break,可以跳出多层 select/switch 作用域,让 break 更加灵活,写法更加简单灵活,不需要使用控制变量一层一层跳出循环,没有带 break 的只能跳出当前语句块
示例
for
```
go
package
main
import
"fmt"
func
main
()
{
for
i
:=
0
;
i
<
10
;
i
++
{
if
i
>=
3
{
break
}
fmt
.
Printf
(
"%v
\t
"
,
i
)
}
// 0 1 2
}
```
switch
```
go
package
main
import
"fmt"
func
main
()
{
i
:=
1
switch
i
{
case
1
:
fmt
.
Println
(
"1"
)
fallthrough
case
2
:
fmt
.
Println
(
"2"
)
// break
case
3
:
fmt
.
Println
(
"3"
)
// break
}
}
```
标签
```
go
package
main
import
"fmt"
func
main
()
{
LABEL
:
for
i
:=
0
;
i
<
10
;
i
++
{
fmt
.
Printf
(
"%v "
,
i
)
if
i
>=
3
{
break
LABEL
}
}
fmt
.
Println
(
"end"
)
}
// 0 1 2 3 end
```
#### continue
只能用在 for 循环,终止本次循环,进行下次循环
```
go
package
main
import
"fmt"
func
main
()
{
for
i
:=
0
;
i
<
10
;
i
++
{
if
i
%
2
==
0
{
continue
}
else
{
fmt
.
Printf
(
"%v "
,
i
)
}
}
// 1 3 5 7 9
}
```
#### goto
通过标签进行代码之间的无条件跳转
```
go
package
main
import
"fmt"
func
main
()
{
goto
LABEL
fmt
.
Println
(
"label"
)
LABEL
:
fmt
.
Println
(
"end"
)
}
// end
```
blog/golang/golang-slice.md
0 → 100644
浏览文件 @
efcf9fc3
# 第十三章 Golang 切片 slice
切片:可变长度的数组
-
自动扩容
## 切片声明
和数组类似,区别在于不添加长度
```
go
var
identifier
[]
type
```
切片是引用类型,可以使用
`make`
函数创建切片
```
go
// len是数组长度,也是切片的初始长度
var
slice
[]
type
=
make
([]
type
,
len
)
// 简写
slice
:=
make
([]
type
,
len
)
// 指定容量
slice
:=
make
([]
type
,
len
,
capacity
)
```
示例
```
go
package
main
import
"fmt"
func
main
()
{
// 数组 指定长度
var
arr
=
[
...
]
int
{}
// 切片 不指定长度
var
slice
=
[]
int
{}
fmt
.
Printf
(
"arr: %T
\n
"
,
arr
)
// arr: [0]int
fmt
.
Printf
(
"slice: %T
\n
"
,
slice
)
// slice: []int
}
```
使用make声明
```
go
package
main
import
"fmt"
func
main
()
{
var
slice
=
make
([]
int
,
3
)
fmt
.
Printf
(
"slice: %T
\n
"
,
slice
)
// slice: []int
}
```
## 切片的长度和容量
```
go
package
main
import
"fmt"
func
main
()
{
var
slice
=
make
([]
int
,
3
)
// 长度
fmt
.
Printf
(
"len(slice): %v
\n
"
,
len
(
slice
))
// len(slice): 3
// 容量
fmt
.
Printf
(
"cap(slice): %v
\n
"
,
cap
(
slice
))
// cap(slice): 3
}
```
blog/golang/index.md
浏览文件 @
efcf9fc3
...
...
@@ -30,9 +30,13 @@
[
第十一章 Golang 流程控制
](
/blog/golang/golang-process.md
)
[
第十二章 Golang 数组 array
](
/blog/golang/golang-array.md
)
[
第十三章 Golang 切片 slice
](
/blog/golang/golang-slice.md
)
https://www.bilibili.com/video/BV1ME411Y71o?p=27&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=26&spm_id_from=pageDriver&vd_source=efbb4dc944fa761b6e016ce2ca5933da
\ No newline at end of file
https://www.bilibili.com/video/BV1zR4y1t7Wj?p=32&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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录