Go 中函數的參數傳遞方式分為:1)以值傳遞(基本型別和結構體),2)依參考傳遞(引用型別和指標),3)以值傳引用(很少用)。選擇合適的傳遞方式影響函數效能和語意。
Go 中不同型別參數的傳遞方式
在Go 中,函數的參數可以採用多種不同的傳遞方式,這會影響函數如何使用這些參數。以下介紹 Go 中傳遞不同型別參數的三種常見方式:
以值傳遞
#按值傳遞是最簡單的一種傳遞方式。在這種方式下,函數會建立參數的副本,因此對參數的變更不會影響原始值。基本型別(如 int、float64 和 string)和結構體會以值傳遞。例如:
func inc(n int) { // 创建参数 n 的副本 n++ } func main() { a := 5 inc(a) // a 的值保持为 5,因为 n 是 a 的副本 fmt.Println(a) // 输出:5 }
按引用傳遞
按引用傳遞透過指標傳遞參數。函數可以修改指向參數的指針,從而間接修改原始值。引用類型(如切片、映射和函數)按引用傳遞。指標(如 *int
)也按引用傳遞。例如:
func inc(n *int) { // n 是指向原始值 a 的指针 *n++ } func main() { a := 5 inc(&a) // 修改 a 的值 fmt.Println(a) // 输出:6 }
按值傳引用
按值傳引用是一種不常見的傳遞方式,但有時很有用。在這種方式下,函數會建立指向參數值的指標的副本。例如:
func incValueRef(val *float64) { // val 是指向参数值 f 的指针的副本 *val++ } func main() { f := 5.0 incValueRef(&f) // 修改 f 的值 fmt.Println(f) // 输出:6.0 }
選擇正確的傳遞方式很重要,因為它會影響函數的效能和語意。按值傳遞速度更快,但按引用傳遞允許函數修改原始值。按值傳引用提供了介於兩者之間的折衷。
以上是golang不同型別參數的傳遞方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!