mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 06:23:59 +08:00
@@ -28,7 +28,7 @@ func (st *Stack) Pop() int {
|
||||
|
||||
Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量,比如 `Function(arg1)`。
|
||||
|
||||
如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名前面添加&符号,比如 &variable)传递给函数,这就是按引用传递,比如 `Function(&arg1)`,此时传递给函数的是一个指针。如果传递给函数的是一个指针,指针的值(一个地址)会被复制,但指针的值所指向的地址上的值不会被复制;我们可以通过这个指针的值来修改这个值所指向的地址上的值。(** 译者注:指针也是变量类型,有自己的地址和值,通常指针的值指向一个变量的地址。所以,按引用传递也是按值传递。 **)
|
||||
如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名前面添加&符号,比如 &variable)传递给函数,这就是按引用传递,比如 `Function(&arg1)`,此时传递给函数的是一个指针。如果传递给函数的是一个指针,指针的值(一个地址)会被复制,但指针的值所指向的地址上的值不会被复制;我们可以通过这个指针的值来修改这个值所指向的地址上的值。(**译者注:指针也是变量类型,有自己的地址和值,通常指针的值指向一个变量的地址。所以,按引用传递也是按值传递。**)
|
||||
|
||||
几乎在任何情况下,传递指针(一个32位或者64位的值)的消耗都比传递副本来得少。
|
||||
|
||||
@@ -133,7 +133,7 @@ func getX2AndX3_2(input int) (x2 int, x3 int) {
|
||||
|
||||
任何一个非命名返回值(使用非命名返回值是很糟的编程习惯)在 `return` 语句里面都要明确指出包含返回值的变量或是一个可计算的值(就像上面警告所指出的那样)。
|
||||
|
||||
** 尽量使用命名返回值:会使代码更清晰、更简短,同时更加容易读懂 **
|
||||
**尽量使用命名返回值:会使代码更清晰、更简短,同时更加容易读懂。**
|
||||
|
||||
练习 6.1 [mult_returnval.go](exercises/chapter_6/mult_returnval.go)
|
||||
|
||||
|
Reference in New Issue
Block a user