Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
go开源项目镜像
GolangCodingTime
提交
34fb8ceb
G
GolangCodingTime
项目概览
go开源项目镜像
/
GolangCodingTime
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
GolangCodingTime
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
34fb8ceb
编写于
4月 15, 2021
作者:
写代码的明哥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
9d86c317
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
178 addition
and
48 deletion
+178
-48
source/c01/c01_12.md
source/c01/c01_12.md
+18
-0
source/c01/c01_12.rst
source/c01/c01_12.rst
+20
-0
source/c03/c03_01.md
source/c03/c03_01.md
+36
-1
source/c03/c03_01.rst
source/c03/c03_01.rst
+37
-1
source/c04/c04_01.md
source/c04/c04_01.md
+2
-2
source/c04/c04_01.rst
source/c04/c04_01.rst
+2
-2
source/c07/c07_01.md
source/c07/c07_01.md
+8
-0
source/c07/c07_01.rst
source/c07/c07_01.rst
+41
-28
source/c07/c07_02.md
source/c07/c07_02.md
+7
-7
source/c07/c07_02.rst
source/c07/c07_02.rst
+7
-7
未找到文件。
source/c01/c01_12.md
浏览文件 @
34fb8ceb
...
...
@@ -82,7 +82,25 @@ python
go
```
如果 defer 后面跟的是匿名函数,情况会有所不同, defer 会取到最后的变量值
```
go
package
main
import
"fmt"
func
main
()
{
name
:=
"go"
defer
func
(){
fmt
.
Println
(
name
)
// 输出: python
}()
name
=
"python"
fmt
.
Println
(
name
)
// 输出: python
}
```
非常抱歉,目前以我的水平,暂时还无法解释这种现象,我建议是单独记忆一下这种特殊场景。
## 3. 多个defer 反序调用
...
...
source/c01/c01_12.rst
浏览文件 @
34fb8ceb
...
...
@@ -88,6 +88,26 @@ defer 的用法很简单,只要在后面跟一个函数的调用,就能实
python
go
如果
defer
后面跟的是匿名函数,情况会有所不同,
defer
会取到最后的变量值
..
code
::
go
package
main
import
"fmt"
func
main
()
{
name
:=
"go"
defer
func
(){
fmt
.
Println
(
name
)
//
输出
:
python
}()
name
=
"python"
fmt
.
Println
(
name
)
//
输出
:
python
}
非常抱歉,目前以我的水平,暂时还无法解释这种现象,我建议是单独记忆一下这种特殊场景。
3.
多个
defer
反序调用
---------------------
...
...
source/c03/c03_01.md
浏览文件 @
34fb8ceb
...
...
@@ -79,7 +79,7 @@ func main() {
每个包都允许有一个
`init`
函数,当这个包被导入时,会执行该包的这个
`init`
函数,做一些初始化任务。
对于
`init `
函数的执行有
两
点需要注意
对于
`init `
函数的执行有
几
点需要注意
1.
`init`
函数优先于
`main`
函数执行
...
...
@@ -88,6 +88,41 @@ func main() {
```
C.init→B.init→A.init→main
```
3.
同一个包甚至同一个源文件,可以有多个 init 函数
4.
init 函数不能有入参和返回值
5.
init 函数不能被其他函数调用
6.
同一个包内的多个 init 顺序是不受保证的
7.
在 init 之前,其实会先初始化包作用域的常量和变量(常量优先于变量),具体可参考如下代码
```
go
package
main
import
"fmt"
func
init
()
{
fmt
.
Println
(
"init1:"
,
a
)
}
func
init
()
{
fmt
.
Println
(
"init2:"
,
a
)
}
var
a
=
10
const
b
=
100
func
main
()
{
fmt
.
Println
(
"main:"
,
a
)
}
// 执行结果
// init1: 10
// init2: 10
// main: 10
```
...
...
source/c03/c03_01.rst
浏览文件 @
34fb8ceb
...
...
@@ -87,7 +87,7 @@ fmt,那每次使用它的打印函数打印时,都要 包名+方法名。
每个包都允许有一个
``
init
``
函数,当这个包被导入时,会执行该包的这个
``
init
``
函数,做一些初始化任务。
对于
``
init
``
函数的执行有
两
点需要注意
对于
``
init
``
函数的执行有
几
点需要注意
1.
``
init
``
函数优先于
``
main
``
函数执行
...
...
@@ -97,6 +97,42 @@ fmt,那每次使用它的打印函数打印时,都要 包名+方法名。
C
.
init
→
B
.
init
→
A
.
init
→
main
3.
同一个包甚至同一个源文件,可以有多个
init
函数
4.
init
函数不能有入参和返回值
5.
init
函数不能被其他函数调用
6.
同一个包内的多个
init
顺序是不受保证的
7.
在
init
之前,其实会先初始化包作用域的常量和变量(常量优先于变量),具体可参考如下代码
..
code
::
go
package
main
import
"fmt"
func
init
()
{
fmt
.
Println
(
"init1:"
,
a
)
}
func
init
()
{
fmt
.
Println
(
"init2:"
,
a
)
}
var
a
=
10
const
b
=
100
func
main
()
{
fmt
.
Println
(
"main:"
,
a
)
}
//
执行结果
//
init1
:
10
//
init2
:
10
//
main
:
10
5.
包的匿名导入
---------------
...
...
source/c04/c04_01.md
浏览文件 @
34fb8ceb
...
...
@@ -73,7 +73,7 @@ func main() {
// output: 6
```
其中
`...`
是 Go 语言为了方便程序员写代码而实现的语法糖,如果该函数下
会
多个类型的参数,这个语法糖必须得是最后一个参数。
其中
`...`
是 Go 语言为了方便程序员写代码而实现的语法糖,如果该函数下
有
多个类型的参数,这个语法糖必须得是最后一个参数。
同时这个语法糖,只能在定义函数时使用。
...
...
@@ -192,7 +192,7 @@ Go语言中的函数,在你定义的时候,就规定了此函数
## 6. 方法与函数
方法,在
上一节
《
[
2.1 面向对象:结构体与继承
](
http://golang.iswbm.com/en/latest/c02/c02_01.html
)
》里已经介绍过了,它的定义与函数有些不同,你可以点击前面的标题进行交叉学习。
方法,在
之前的
《
[
2.1 面向对象:结构体与继承
](
http://golang.iswbm.com/en/latest/c02/c02_01.html
)
》里已经介绍过了,它的定义与函数有些不同,你可以点击前面的标题进行交叉学习。
那
**方法和函数有什么区别?**
为防会有朋友第一次接触面向对象,这里多嘴一句。
...
...
source/c04/c04_01.rst
浏览文件 @
34fb8ceb
...
...
@@ -86,7 +86,7 @@ a,b,并规定必须返回一个int类型的值 。
// output: 6
其中 ``...`` 是 Go
语言为了方便程序员写代码而实现的语法糖,如果该函数下
会
多个类型的参数,这个语法糖必须得是最后一个参数。
语言为了方便程序员写代码而实现的语法糖,如果该函数下
有
多个类型的参数,这个语法糖必须得是最后一个参数。
同时这个语法糖,只能在定义函数时使用。
...
...
@@ -204,7 +204,7 @@ Go语言中的函数,在你定义的时候,就规定了此函数
6. 方法与函数
-------------
方法,在
上一节
《\ `2.1
方法,在
之前的
《\ `2.1
面向对象:结构体与继承 <http://golang.iswbm.com/en/latest/c02/c02_01.html>`__\ 》里已经介绍过了,它的定义与函数有些不同,你可以点击前面的标题进行交叉学习。
那 **方法和函数有什么区别?**
...
...
source/c07/c07_01.md
浏览文件 @
34fb8ceb
...
...
@@ -129,6 +129,14 @@ W3Cschool 也是一个专业的编程入门学习及技术文档查询应用,
![](
http://image.iswbm.com/20200430112319.png
)
### Go语言101
《Go语言101》是一本着墨于Go语法语义以及运行时相关知识点的编程指导书(Go 1.16就绪)。 此书旨在尽可能地帮助Go程序员更深更全面地理解Go语言。 此书也搜集了Go语言和Go编程中的很多细节。 此书同时适合Go初学者和有一定经验的Go程序员阅读。
**网站链接**
:https://gfw.go101.org/article/101.html
![](
http://image.iswbm.com/image-20210411181553375.png
)
## 2. Web开发
### gin 中文文档
...
...
source/c07/c07_01.rst
浏览文件 @
34fb8ceb
...
...
@@ -141,6 +141,18 @@ Go by Example
|image11|
Go语言101
~~~~~~~~~
《Go语言101》是一本着墨于Go语法语义以及运行时相关知识点的编程指导书(Go
1.16就绪)。 此书旨在尽可能地帮助Go程序员更深更全面地理解Go语言。
此书也搜集了Go语言和Go编程中的很多细节。
此书同时适合Go初学者和有一定经验的Go程序员阅读。
**网站链接**\ :https://gfw.go101.org/article/101.html
|image12|
2. Web开发
----------
...
...
@@ -184,7 +196,7 @@ Revel 中文文档
**网站链接**\ :https://eddycjy.gitbook.io/golang/
|image1
2
|
|image1
3
|
Go语言圣经
~~~~~~~~~~
...
...
@@ -194,7 +206,7 @@ Go语言圣经
**网站链接**\ :https://books.studygolang.com/gopl-zh/
|image1
3
|
|image1
4
|
mojotv 进阶系列
~~~~~~~~~~~~~~~
...
...
@@ -205,14 +217,14 @@ mojotv 进阶系列
**网站链接**\ :https://mojotv.cn/404#Golang
|image1
4
|
|image1
5
|
Go 语言高级编程
~~~~~~~~~~~~~~~
**网站链接**\ :https://chai2010.gitbooks.io/advanced-go-programming-book/content/
|image1
5
|
|image1
6
|
4. 工具使用
-----------
...
...
@@ -228,7 +240,7 @@ go 的命令非常多,如果想系统的学习,推荐郝林的 Go 命令教
2、https://wiki.jikexueyuan.com/project/go-command-tutorial/0.0.html
|image1
6
|
|image1
7
|
Uber 编程规范
~~~~~~~~~~~~~
...
...
@@ -245,7 +257,7 @@ Uber”,也就是 Go 代码应该怎样写、不该怎样写。
中文译文:https://www.infoq.cn/article/G6c95VyU5telNXXCC9yO
|image1
7
|
|image1
8
|
Go Walker
~~~~~~~~~
...
...
@@ -253,7 +265,7 @@ Go Walker
Go Walker 是一个可以在线生成并浏览 `Go <https://golang.org/>`__ 项目 API
文档的 Web 服务器,目前已支持包括 **GitHub** 等代码托管平台。
|image1
8
|
|image1
9
|
CTOLib 码库
~~~~~~~~~~~
...
...
@@ -263,7 +275,7 @@ CTOLib 码库
**网站链接**\ :https://www.ctolib.com/go/categories/go-guide.html
|image
19
|
|image
20
|
5. 技术社区
-----------
...
...
@@ -273,7 +285,7 @@ GoCN
**网站链接**\ :https://gocn.vip/
|image2
0
|
|image2
1
|
Go 语言中文网
~~~~~~~~~~~~~
...
...
@@ -284,7 +296,7 @@ Go历史版本的下载,各种高质量的电子书资源,各种大牛写的
**网站链接**\ :https://studygolang.com/
|image2
1
|
|image2
2
|
6. 源码学习
-----------
...
...
@@ -297,14 +309,14 @@ Go 夜读
**网站链接**\ :https://talkgo.org/
|image2
2
|
|image2
3
|
Go 语言原本
~~~~~~~~~~~
**网站链接**\ :https://changkun.de/golang/
|image2
3
|
|image2
4
|
Go 语言设计与实现
~~~~~~~~~~~~~~~~~
...
...
@@ -313,14 +325,14 @@ Go 语言设计与实现
**网站链接**\ :https://draveness.me/golang/
|image2
4
|
|image2
5
|
能翻到这里的,一定是真爱了,本以为 Go
语言还处于不温不火的状态,没想到收集整理一下,资料还挺多的。
--------------
|image2
5
|
|image2
6
|
.. |image0| image:: http://image.iswbm.com/20200607145423.png
.. |image1| image:: http://image.iswbm.com/20200430112024.png
...
...
@@ -334,18 +346,19 @@ Go 语言设计与实现
.. |image9| image:: http://image.iswbm.com/20200430104324.png
.. |image10| image:: http://image.iswbm.com/20200430174507.png
.. |image11| image:: http://image.iswbm.com/20200430112319.png
.. |image12| image:: http://image.iswbm.com/20200430105116.png
.. |image13| image:: http://image.iswbm.com/20200430100755.png
.. |image14| image:: http://image.iswbm.com/20200430095544.png
.. |image15| image:: http://image.iswbm.com/20200430175818.png
.. |image16| image:: http://image.iswbm.com/20200430102821.png
.. |image17| image:: http://image.iswbm.com/20200430113756.png
.. |image18| image:: http://image.iswbm.com/20200430170054.png
.. |image19| image:: http://image.iswbm.com/20200430174109.png
.. |image20| image:: http://image.iswbm.com/20200506192127.png
.. |image21| image:: http://image.iswbm.com/20200430134207.png
.. |image22| image:: http://image.iswbm.com/20200430174216.png
.. |image23| image:: http://image.iswbm.com/20200506191803.png
.. |image24| image:: http://image.iswbm.com/20200506191632.png
.. |image25| image:: http://image.iswbm.com/20200607174235.png
.. |image12| image:: http://image.iswbm.com/image-20210411181553375.png
.. |image13| image:: http://image.iswbm.com/20200430105116.png
.. |image14| image:: http://image.iswbm.com/20200430100755.png
.. |image15| image:: http://image.iswbm.com/20200430095544.png
.. |image16| image:: http://image.iswbm.com/20200430175818.png
.. |image17| image:: http://image.iswbm.com/20200430102821.png
.. |image18| image:: http://image.iswbm.com/20200430113756.png
.. |image19| image:: http://image.iswbm.com/20200430170054.png
.. |image20| image:: http://image.iswbm.com/20200430174109.png
.. |image21| image:: http://image.iswbm.com/20200506192127.png
.. |image22| image:: http://image.iswbm.com/20200430134207.png
.. |image23| image:: http://image.iswbm.com/20200430174216.png
.. |image24| image:: http://image.iswbm.com/20200506191803.png
.. |image25| image:: http://image.iswbm.com/20200506191632.png
.. |image26| image:: http://image.iswbm.com/20200607174235.png
source/c07/c07_02.md
浏览文件 @
34fb8ceb
...
...
@@ -4,7 +4,7 @@
## 1. 什么是边界检查?
边界检查,英文名
`Bounds Check Elimination`
,简称为 BCE。它是 Go 语言中防止数组、切片越界的检查手段。如果检查下标已经越界了,就会产生 Panic。
边界检查,英文名
`Bounds Check Elimination`
,简称为 BCE。它是 Go 语言中防止数组、切片越界
而导致内存不安全
的检查手段。如果检查下标已经越界了,就会产生 Panic。
边界检查使得我们的代码能够安全地运行,但是另一方面,也使得我们的代码运行效率略微降低。
...
...
@@ -130,7 +130,7 @@ import (
"math/rand"
)
func
f
a
()
{
func
f
()
{
s
:=
make
([]
int
,
3
,
5
)
index
:=
rand
.
Intn
(
3
)
_
=
s
[
:
index
]
// 第一次检查
...
...
@@ -157,7 +157,7 @@ func main() {}
### 3.4 案例四
有了上面的铺垫,再来看下面这个示例,由于数组是调用者传入的参数,所以编译器的编译的时候无法得知数组的长度和容量是否相等,因
为
只能保险一点,两个都检查。
有了上面的铺垫,再来看下面这个示例,由于数组是调用者传入的参数,所以编译器的编译的时候无法得知数组的长度和容量是否相等,因
此
只能保险一点,两个都检查。
```
go
package
main
...
...
@@ -166,7 +166,7 @@ import (
"math/rand"
)
func
f
b
(
s
[]
int
,
index
int
)
{
func
f
(
s
[]
int
,
index
int
)
{
_
=
s
[
:
index
]
// 第一次检查
_
=
s
[
index
:
]
// 第二次检查
}
...
...
@@ -183,7 +183,7 @@ import (
"math/rand"
)
func
f
b
(
s
[]
int
,
index
int
)
{
func
f
(
s
[]
int
,
index
int
)
{
_
=
s
[
index
:
]
// 第一次检查
_
=
s
[
:
index
]
// 不用检查
}
...
...
@@ -203,7 +203,7 @@ func main() {}
package
main
func
f
d
(
is
[]
int
,
bs
[]
byte
)
{
func
f
(
is
[]
int
,
bs
[]
byte
)
{
if
len
(
is
)
>=
256
{
for
_
,
n
:=
range
bs
{
_
=
is
[
n
]
// 每个循环都要边界检查
...
...
@@ -219,7 +219,7 @@ func main() {}
package
main
func
f
d
(
is
[]
int
,
bs
[]
byte
)
{
func
f
(
is
[]
int
,
bs
[]
byte
)
{
if
len
(
is
)
>=
256
{
is
=
is
[
:
256
]
for
_
,
n
:=
range
bs
{
...
...
source/c07/c07_02.rst
浏览文件 @
34fb8ceb
...
...
@@ -7,7 +7,7 @@
-------------------
边界检查,英文名
``
Bounds
Check
Elimination
``\
,简称为
BCE
。它是
Go
语言中防止数组、切片越界的检查手段。如果检查下标已经越界了,就会产生
语言中防止数组、切片越界
而导致内存不安全
的检查手段。如果检查下标已经越界了,就会产生
Panic
。
边界检查使得我们的代码能够安全地运行,但是另一方面,也使得我们的代码运行效率略微降低。
...
...
@@ -146,7 +146,7 @@ panic。
"math/rand"
)
func
f
a
()
{
func
f
()
{
s
:=
make
([]
int
,
3
,
5
)
index
:=
rand
.
Intn
(
3
)
_
=
s
[:
index
]
//
第一次检查
...
...
@@ -179,7 +179,7 @@ panic。
3.4
案例四
~~~~~~~~~~
有了上面的铺垫,再来看下面这个示例,由于数组是调用者传入的参数,所以编译器的编译的时候无法得知数组的长度和容量是否相等,因
为
只能保险一点,两个都检查。
有了上面的铺垫,再来看下面这个示例,由于数组是调用者传入的参数,所以编译器的编译的时候无法得知数组的长度和容量是否相等,因
此
只能保险一点,两个都检查。
..
code
::
go
...
...
@@ -189,7 +189,7 @@ panic。
"math/rand"
)
func
f
b
(
s
[]
int
,
index
int
)
{
func
f
(
s
[]
int
,
index
int
)
{
_
=
s
[:
index
]
//
第一次检查
_
=
s
[
index
:]
//
第二次检查
}
...
...
@@ -206,7 +206,7 @@ panic。
"math/rand"
)
func
f
b
(
s
[]
int
,
index
int
)
{
func
f
(
s
[]
int
,
index
int
)
{
_
=
s
[
index
:]
//
第一次检查
_
=
s
[:
index
]
//
不用检查
}
...
...
@@ -227,7 +227,7 @@ panic。
package
main
func
f
d
(
is
[]
int
,
bs
[]
byte
)
{
func
f
(
is
[]
int
,
bs
[]
byte
)
{
if
len
(
is
)
>=
256
{
for
_
,
n
:=
range
bs
{
_
=
is
[
n
]
//
每个循环都要边界检查
...
...
@@ -245,7 +245,7 @@ panic。
package
main
func
f
d
(
is
[]
int
,
bs
[]
byte
)
{
func
f
(
is
[]
int
,
bs
[]
byte
)
{
if
len
(
is
)
>=
256
{
is
=
is
[:
256
]
for
_
,
n
:=
range
bs
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录