|
@@ -521,38 +521,100 @@ Golang 函数不支持入参默认值;参数是默认值是其类型的零值
|
|
|
5| }
|
|
|
```
|
|
|
|
|
|
+### 函数调用
|
|
|
|
|
|
+一个声明的函数可以通过名称和一个实参列表来调用
|
|
|
+实参列表就是括号括起来的
|
|
|
+实参列表中每个单值实参对应着(或说被传递给了)一共形参
|
|
|
+函数传参属于赋值操作。
|
|
|
+实参类型与形参的声明类型不必严格一样。会存在隐式类型转换
|
|
|
|
|
|
+函数的声明可以在调用前,也可以调用后
|
|
|
|
|
|
+### 函数调用的退出阶段
|
|
|
|
|
|
+在Go中,当一个函数调用返回后(比如执行了一个return语句或者函数中的最后一 条语句执行完毕), 此调用可能并未立即退出。一个函数调用从返回开始到最终退 出的阶段称为此函数调用的退出阶段(exiting phase)。
|
|
|
|
|
|
+### 匿名函数
|
|
|
|
|
|
+```go
|
|
|
+func() {
|
|
|
+ println("hello")
|
|
|
+}()
|
|
|
+```
|
|
|
|
|
|
+Go支持匿名函数
|
|
|
|
|
|
+一个匿名函数在定义后可以被立即调用,如上示例
|
|
|
|
|
|
+也可以被赋值给某个函数类型的值,从 而我们不必在定义完此匿名函数后立即调用它,而是可以在以后合适的时候再调用它。
|
|
|
|
|
|
+### 内置函数
|
|
|
|
|
|
+# 代码包和包引入
|
|
|
|
|
|
+- main函数必须位于名为main的package包中
|
|
|
+- 对于一个fmt.Println函数调用,任何两个相邻的实参的输出之间将被插入 一个空格字符,并且在最后将输出一个空行字符
|
|
|
|
|
|
+```go
|
|
|
+1| package main
|
|
|
+2|
|
|
|
+3| import "fmt"
|
|
|
+4| import "math/rand"
|
|
|
+5|
|
|
|
+6| func main() {
|
|
|
+7| fmt.Printf("下一个伪随机数总是%v。\n", rand.Uint32())
|
|
|
+8| }
|
|
|
+```
|
|
|
|
|
|
+这个例子多引入了一个math/rand标准库包。 此包是math标准库包中的一个子 包。 此包提供了一些函数来产生伪随机数序列。
|
|
|
|
|
|
+- math/rand 标准库包的引入名是rand。 rand.Uint32() 函数调用将返回一共uint32类型的随机数
|
|
|
|
|
|
+### 代码包目录、代码包引入路径和代码包依赖关系
|
|
|
|
|
|
+todo:这个,咱之后再系统地结合gopath 和 goroot来看下吧
|
|
|
|
|
|
+### init 函数
|
|
|
|
|
|
+在程序运行时刻,在进入main入口函数之前,每个init函数在此包加载的时候将 被(串行)执行并且只执行一遍。
|
|
|
|
|
|
+*init函数可以有多个,串行执行*
|
|
|
|
|
|
+### 程序代码要素初始化顺序
|
|
|
|
|
|
+引用包中的init函数—>引用包的加载—>当前代码包的init函数—>当前代码包加载
|
|
|
|
|
|
+### 完整的引入声明语句形式
|
|
|
|
|
|
+```go
|
|
|
+import fmt "fmt" // <=> import "fmt"
|
|
|
+import rand "math/rand" // <=> import "math/rand"
|
|
|
+import time "time" // <=> import "time"
|
|
|
+```
|
|
|
|
|
|
+用于区分两个包名一样的代码包
|
|
|
|
|
|
+**句点引入**
|
|
|
|
|
|
+一个完整引入声明语句形式的引入名importname可以是一个句点(.)。 这样的引 入称为句点引入。使用被句点引入的包中的导出代码要素时,限定标识符的前缀必 须省略。
|
|
|
|
|
|
+```go
|
|
|
+1| package main
|
|
|
+2|
|
|
|
+3| import (
|
|
|
+4| . "fmt"
|
|
|
+5| . "time"
|
|
|
+6| )
|
|
|
+7|
|
|
|
+8| func main() {
|
|
|
+9| Println("Current time:", Now())
|
|
|
+10| }
|
|
|
+```
|
|
|
|
|
|
+### 每个非匿名引入必须至少使用一次
|
|
|
|
|
|
-
|
|
|
-
|
|
|
+编译器会提示你的
|
|
|
|
|
|
|
|
|
|