mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-11-13 09:16:10 +08:00
@@ -6,7 +6,7 @@
|
||||
func myFunc(a, b, arg ...int) {}
|
||||
```
|
||||
|
||||
这个函数接受一个类似某个类型的 slice 的参数(详见第 7 章),该参数可以通过第 5.4.4 节中提到的 for 循环结构迭代。
|
||||
这个函数接受一个类似于切片 (slice) 的参数(详见[第 7 章](07.0.md)),该参数可以通过[第 5.4.4 节](05.4.md) 中提到的 `for` 循环结构迭代。
|
||||
|
||||
示例函数和调用:
|
||||
|
||||
@@ -15,7 +15,7 @@ func Greeting(prefix string, who ...string)
|
||||
Greeting("hello:", "Joe", "Anna", "Eileen")
|
||||
```
|
||||
|
||||
在 Greeting 函数中,变量 `who` 的值为 `[]string{"Joe", "Anna", "Eileen"}`。
|
||||
在 `Greeting()` 函数中,变量 `who` 的值为 `[]string{"Joe", "Anna", "Eileen"}`。
|
||||
|
||||
如果参数被存储在一个 slice 类型的变量 `slice` 中,则可以通过 `slice...` 的形式来传递参数,调用变参函数。
|
||||
|
||||
@@ -53,7 +53,7 @@ func min(s ...int) int {
|
||||
The minimum is: 0
|
||||
The minimum in the slice is: 1
|
||||
|
||||
**练习 6.3** varargs.go
|
||||
**练习 6.3** [varargs.go](exercises\chapter_6\varargs.go)
|
||||
|
||||
写一个函数,该函数接受一个变长参数并对每个元素进行换行打印。
|
||||
|
||||
@@ -73,7 +73,7 @@ func F3(s []string) { }
|
||||
|
||||
但是如果变长参数的类型并不是都相同的呢?使用 5 个参数来进行传递并不是很明智的选择,有 2 种方案可以解决这个问题:
|
||||
|
||||
1. 使用结构(详见第 10 章):
|
||||
1. 使用结构(详见[第 10 章](10.0.md)):
|
||||
|
||||
定义一个结构类型,假设它叫 `Options`,用以存储所有可能的参数:
|
||||
|
||||
@@ -85,11 +85,11 @@ func F3(s []string) { }
|
||||
}
|
||||
```
|
||||
|
||||
函数 F1 可以使用正常的参数 a 和 b,以及一个没有任何初始化的 Options 结构: `F1(a, b, Options {})`。如果需要对选项进行初始化,则可以使用 `F1(a, b, Options {par1:val1, par2:val2})`。
|
||||
函数 `F1()` 可以使用正常的参数 `a` 和 `b`,以及一个没有任何初始化的 `Options` 结构: `F1(a, b, Options {})`。如果需要对选项进行初始化,则可以使用 `F1(a, b, Options {par1:val1, par2:val2})`。
|
||||
|
||||
2. 使用空接口:
|
||||
|
||||
如果一个变长参数的类型没有被指定,则可以使用默认的空接口 `interface{}`,这样就可以接受任何类型的参数(详见第 11.9 节)。该方案不仅可以用于长度未知的参数,还可以用于任何不确定类型的参数。一般而言我们会使用一个 for-range 循环以及 switch 结构对每个参数的类型进行判断:
|
||||
如果一个变长参数的类型没有被指定,则可以使用默认的空接口 `interface{}`,这样就可以接受任何类型的参数(详见[第 11.9 节](11.9.md) )。该方案不仅可以用于长度未知的参数,还可以用于任何不确定类型的参数。一般而言我们会使用一个 for-range 循环以及 `switch` 结构对每个参数的类型进行判断:
|
||||
|
||||
```go
|
||||
func typecheck(..,..,values … interface{}) {
|
||||
|
||||
Reference in New Issue
Block a user