Golang 调用函数传入结构体时,应该传值还是指针?

在Go语言中,函数参数可以是值传递或指针传递,具体应该使用哪种方式取决于以下因素:

  1. 结构体的大小:如果结构体非常大,使用指针传递会更有效率,因为这样只会复制指针值(一般是8字节),而不是复制整个结构体。如果结构体小,值传递和指针传递的性能差异可能可以忽略不计。

  2. 是否需要修改原始结构体:如果你需要在函数中修改原始结构体,你应该使用指针传递。如果你使用值传递,函数会接收结构体的一个副本,你在函数中对结构体的修改不会影响到原始的结构体。

下面是使用指针传递的例子:

package main

import "fmt"

type MyStruct struct {
    Field int
}

func changeStruct(s *MyStruct) {
    s.Field = 42
}

func main() {
    s := MyStruct{Field: 0}
    changeStruct(&s)
    fmt.Println(s.Field) // 输出 42
}

在这个例子中,我们在changeStruct函数中修改了sField字段。因为我们传递的是s的指针,所以这个修改会影响到原始的s

总的来说,对于大型结构体或者需要修改原始结构体的情况,推荐使用指针传递。对于小型结构体,并且不需要修改原始结构体的情况,可以使用值传递。

发表评论

后才能评论