1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 12:32:21 +00:00

错别字修改

- 所有也不能被其它函数调用
+ 所以也不能被其它函数调用
This commit is contained in:
Yang Tao 2018-07-20 08:46:44 +08:00 committed by GitHub
parent c01798f18b
commit 385af18381
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,7 +2,7 @@
函数对应操作序列是程序的基本组成元素。Go语言中的函数有具名和匿名之分具名函数一般对应于包级的函数是匿名函数的一种特例当匿名函数引用了外部作用域中的变量时就成了闭包函数闭包函数是函数式编程语言的核心。方法是绑定到一个具体类型的特殊函数Go语言中的方法是依托于类型的必须在编译时静态绑定。接口定义了方法的集合这些方法依托于运行时的接口对象因此接口对应的方法是在运行时动态绑定的。Go语言通过隐式接口机制实现了鸭子面向对象模型。 函数对应操作序列是程序的基本组成元素。Go语言中的函数有具名和匿名之分具名函数一般对应于包级的函数是匿名函数的一种特例当匿名函数引用了外部作用域中的变量时就成了闭包函数闭包函数是函数式编程语言的核心。方法是绑定到一个具体类型的特殊函数Go语言中的方法是依托于类型的必须在编译时静态绑定。接口定义了方法的集合这些方法依托于运行时的接口对象因此接口对应的方法是在运行时动态绑定的。Go语言通过隐式接口机制实现了鸭子面向对象模型。
Go语言程序的初始化和执行总是从`main.main`函数开始的。但是如果`main`包导入了其它的包,则会按照顺序将它们包含进`main`包里(这里的导入顺序依赖具体实现,一般可能是以文件名或包路径名的字符串顺序导入)。如果某个包被多次导入的话,在执行的时候只会导入一次。当一个包被导入时,如果它还导入了其它的包,则先将其它的包包含进来,然后创建和初始化这个包的常量和变量,再调用包里的`init`函数,如果一个包有多个`init`函数的话,调用顺序未定义(实现可能是以文件名的顺序调用),同一个文件内的多个`init`则是以出现的顺序依次调用(`init`不是普通函数,可以定义有多个,所也不能被其它函数调用)。最后,当`main`包的所有包级常量、变量被创建和初始化完成,并且`init`函数被执行后,才会进入`main.main`函数程序开始正常执行。下图是Go程序函数启动顺序的示意图 Go语言程序的初始化和执行总是从`main.main`函数开始的。但是如果`main`包导入了其它的包,则会按照顺序将它们包含进`main`包里(这里的导入顺序依赖具体实现,一般可能是以文件名或包路径名的字符串顺序导入)。如果某个包被多次导入的话,在执行的时候只会导入一次。当一个包被导入时,如果它还导入了其它的包,则先将其它的包包含进来,然后创建和初始化这个包的常量和变量,再调用包里的`init`函数,如果一个包有多个`init`函数的话,调用顺序未定义(实现可能是以文件名的顺序调用),同一个文件内的多个`init`则是以出现的顺序依次调用(`init`不是普通函数,可以定义有多个,所也不能被其它函数调用)。最后,当`main`包的所有包级常量、变量被创建和初始化完成,并且`init`函数被执行后,才会进入`main.main`函数程序开始正常执行。下图是Go程序函数启动顺序的示意图
![](../images/ch1-04-init.png) ![](../images/ch1-04-init.png)