函数参数传递有值传递和引用传递两种方式。值传递复制参数值副本,对副本的修改不影响原值。引用传递传递对参数值的引用,对引用指向值的修改会影响原值。实战案例:使用引用传递的 swapstringslice() 函数交换两个字符串切片的元素。

Go 中函数参数的传递
Go 语言中,函数参数可以通过值传递或引用传递。
值传递
立即学习“go语言免费学习笔记(深入)”;
值传递是指将参数值的一个副本传递给函数。这意味着任何对参数副本的修改都不会影响原始值。
func swap(a, b int) {
var tmp = a
a = b
b = tmp
}
func main() {
x := 10
y := 20
swap(x, y)
fmt.Printf("x=%d,y=%d\n", x, y) // x=10,y=20
}引用传递
基于Intranet/Internet 的Web下的办公自动化系统,采用了当今最先进的PHP技术,是综合大量用户的需求,经过充分的用户论证的基础上开发出来的,独特的即时信息、短信、电子邮件系统、完善的工作流、数据库安全备份等功能使得信息在企业内部传递效率极大提高,信息传递过程中耗费降到最低。办公人员得以从繁杂的日常办公事务处理中解放出来,参与更多的富于思考性和创造性的工作。系统力求突出体系结构简明
引用传递是指将对参数的引用传递给函数。这意味着任何对参数引用所指向的值的修改都会影响原始值。
要在 Go 中实现引用传递,需要使用指针类型作为函数参数。
func swap(a, b *int) {
var tmp = *a
*a = *b
*b = tmp
}
func main() {
x := 10
y := 20
swap(&x, &y) // 注意此处使用指针
fmt.Printf("x=%d,y=%d\n", x, y) // x=20,y=10
}实战案例
以下是一个使用引用传递的实用案例:
实现一个 swapStringslice() 函数,该函数交换两个字符串切片的元素。
package main
import "fmt"
func swapStringslice(a, b *[]string) {
var tmp = *a
*a = *b
*b = tmp
}
func main() {
x := []string{"a", "b", "c"}
y := []string{"d", "e", "f"}
swapStringslice(&x, &y)
fmt.Println(x, y) // [d e f] [a b c]
}









