mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2026-01-15 19:57:14 +08:00
回到简体
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
## 5.1. 函數聲明
|
||||
## 5.1. 函数声明
|
||||
|
||||
函數聲明包括函數名、形式參數列表、返迴值列表(可省略)以及函數體。
|
||||
函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。
|
||||
|
||||
```Go
|
||||
func name(parameter-list) (result-list) {
|
||||
@@ -8,8 +8,8 @@ func name(parameter-list) (result-list) {
|
||||
}
|
||||
```
|
||||
|
||||
形式參數列表描述了函數的參數名以及參數類型。這些參數作爲局部變量,其值由參數調用者提供。返迴值列表描述了函數返迴值的變量名以及類型。如果函數返迴一個無名變量或者沒有返迴值,返迴值列表的括號是可以省略的。如果一個函數聲明不包括返迴值列表,那麽函數體執行完畢後,不會返迴任何值。
|
||||
在hypot函數中,
|
||||
形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。
|
||||
在hypot函数中,
|
||||
|
||||
```Go
|
||||
func hypot(x, y float64) float64 {
|
||||
@@ -18,18 +18,18 @@ func hypot(x, y float64) float64 {
|
||||
fmt.Println(hypot(3,4)) // "5"
|
||||
```
|
||||
|
||||
x和y是形參名,3和4是調用時的傳入的實數,函數返迴了一個float64類型的值。
|
||||
返迴值也可以像形式參數一樣被命名。在這種情況下,每個返迴值被聲明成一個局部變量,併根據該返迴值的類型,將其初始化爲0。
|
||||
如果一個函數在聲明時,包含返迴值列表,該函數必須以 return語句結尾,除非函數明顯無法運行到結尾處。例如函數在結尾時調用了panic異常或函數中存在無限循環。
|
||||
x和y是形参名,3和4是调用时的传入的实数,函数返回了一个float64类型的值。
|
||||
返回值也可以像形式参数一样被命名。在这种情况下,每个返回值被声明成一个局部变量,并根据该返回值的类型,将其初始化为0。
|
||||
如果一个函数在声明时,包含返回值列表,该函数必须以 return语句结尾,除非函数明显无法运行到结尾处。例如函数在结尾时调用了panic异常或函数中存在无限循环。
|
||||
|
||||
正如hypot一樣,如果一組形參或返迴值有相同的類型,我們不必爲每個形參都寫出參數類型。下面2個聲明是等價的:
|
||||
正如hypot一样,如果一组形参或返回值有相同的类型,我们不必为每个形参都写出参数类型。下面2个声明是等价的:
|
||||
|
||||
```Go
|
||||
func f(i, j, k int, s, t string) { /* ... */ }
|
||||
func f(i int, j int, k int, s string, t string) { /* ... */ }
|
||||
```
|
||||
|
||||
下面,我們給出4種方法聲明擁有2個int型參數和1個int型返迴值的函數.blank identifier(譯者註:卽下文的_符號)可以強調某個參數未被使用。
|
||||
下面,我们给出4种方法声明拥有2个int型参数和1个int型返回值的函数.blank identifier(译者注:即下文的_符号)可以强调某个参数未被使用。
|
||||
|
||||
```Go
|
||||
func add(x int, y int) int {return x + y}
|
||||
@@ -43,15 +43,15 @@ fmt.Printf("%T\n", first) // "func(int, int) int"
|
||||
fmt.Printf("%T\n", zero) // "func(int, int) int"
|
||||
```
|
||||
|
||||
函數的類型被稱爲函數的標識符。如果兩個函數形式參數列表和返迴值列表中的變量類型一一對應,那麽這兩個函數被認爲有相同的類型和標識符。形參和返迴值的變量名不影響函數標識符也不影響它們是否可以以省略參數類型的形式表示。
|
||||
函数的类型被称为函数的标识符。如果两个函数形式参数列表和返回值列表中的变量类型一一对应,那么这两个函数被认为有相同的类型和标识符。形参和返回值的变量名不影响函数标识符也不影响它们是否可以以省略参数类型的形式表示。
|
||||
|
||||
每一次函數調用都必須按照聲明順序爲所有參數提供實參(參數值)。在函數調用時,Go語言沒有默認參數值,也沒有任何方法可以通過參數名指定形參,因此形參和返迴值的變量名對於函數調用者而言沒有意義。
|
||||
每一次函数调用都必须按照声明顺序为所有参数提供实参(参数值)。在函数调用时,Go语言没有默认参数值,也没有任何方法可以通过参数名指定形参,因此形参和返回值的变量名对于函数调用者而言没有意义。
|
||||
|
||||
在函數體中,函數的形參作爲局部變量,被初始化爲調用者提供的值。函數的形參和有名返迴值作爲函數最外層的局部變量,被存儲在相同的詞法塊中。
|
||||
在函数体中,函数的形参作为局部变量,被初始化为调用者提供的值。函数的形参和有名返回值作为函数最外层的局部变量,被存储在相同的词法块中。
|
||||
|
||||
實參通過值的方式傳遞,因此函數的形參是實參的拷貝。對形參進行脩改不會影響實參。但是,如果實參包括引用類型,如指針,slice(切片)、map、function、channel等類型,實參可能會由於函數的簡介引用被脩改。
|
||||
实参通过值的方式传递,因此函数的形参是实参的拷贝。对形参进行修改不会影响实参。但是,如果实参包括引用类型,如指针,slice(切片)、map、function、channel等类型,实参可能会由于函数的简介引用被修改。
|
||||
|
||||
你可能會偶爾遇到沒有函數體的函數聲明,這表示該函數不是以Go實現的。這樣的聲明定義了函數標識符。
|
||||
你可能会偶尔遇到没有函数体的函数声明,这表示该函数不是以Go实现的。这样的声明定义了函数标识符。
|
||||
|
||||
```Go
|
||||
package math
|
||||
|
||||
Reference in New Issue
Block a user