Golang 结构体作为函数参数
Golang 结构体可以像普通变量一样,作为函数的参数,传递给函数,这里分为两种情况:
- 直接传递结构体,这是一个副本(拷贝),在函数内部不会改变外面结构体内容。
- 传递结构体指针,这时在函数内部,能够改变外部结构体内容。
直接传递结构体
package main
import "fmt"
type Person struct {
id int
name string
}
func showPerson(person Person) {
person.id = 1
person.name = "kite"
fmt.Printf("person: %v\\n", person)
}
func main() {
person := Person{1, "tom"}
fmt.Printf("person: %v\\n", person)
fmt.Println("-------------------")
showPerson(person)
fmt.Println("-------------------")
fmt.Printf("person: %v\\n", person)
}
PS E:\TEXT\test> go run .
person: {1 tom}\n-------------------
person: {1 kite}\n-------------------
person: {1 tom}\n
PS E:\TEXT\test>
传递结构体指针
package main
import "fmt"
type Person struct {
id int
name string
}
func showPerson(person *Person) {
person.id = 1
person.name = "kite"
fmt.Printf("person: %v\\n", person)
}
func main() {
person := Person{1, "tom"}
fmt.Printf("person: %v\\n", person)
fmt.Println("-------------------")
showPerson(&person)
fmt.Println("-------------------")
fmt.Printf("person: %v\\n", person)
}
PS E:\TEXT\test> go run .
person: {1 tom}\n-------------------
person: &{1 kite}\n-------------------
person: {1 kite}\n
PS E:\TEXT\test>