如何在 golang 函数中接收可选参数?使用指针类型声明结构体指针,用作函数参数类型。如果指针不为 nil,打印结构体实例字段;否则,打印“未提供名称”。在实战案例中,age 字段作为指向 int 的指针,允许可选提供年龄值。
如何在 Golang 函数中接收可选参数?
在 Golang 中,可以使用指针类型来声明可选参数。指针类型是指向某个值的内存地址的变量。对于结构体,指针类型是指向结构体实例的内存地址的类型。
要声明一个结构体的指针类型,需要在结构体名称后面添加一个 * 符号。例如:
立即学习“go语言免费学习笔记(深入)”;
type MyStruct struct {
Name string
Age int
}
如果我们想要声明一个指向 MyStruct 实例的指针类型,我们可以这样写:
type MyStructPtr *MyStruct
现在,我们可以将这个指针类型用作函数的参数类型,以便函数可以接收一个可选的结构体实例。例如:
func PrintName(name *MyStruct) {
if name != nil {
fmt.Println(name.Name)
} else {
fmt.Println("No name provided")
}
}
在这个函数中,name 参数是一个 *MyStruct 类型,这意味着它可以接受一个可选的 MyStruct 实例。如果 name 不为 nil,则函数将打印该实例的 Name 字段;否则,将打印 "No name provided"。
实战案例
假设我们有一个名为 Person 的结构体,它有一个 Name 字段和一个 Age 字段。我们想要创建一个函数来打印一个人的姓名,还可以可选地打印他们的年龄。我们可以使用如下代码:
type Person struct {
Name string
Age *int // 指向 int 的指针
}
func PrintPerson(person Person) {
fmt.Println(person.Name)
if person.Age != nil {
fmt.Println(person.Age)
}
}
在这个函数中,person 参数是一个 Person 类型的值。Age 字段是一个指向 int 的指针,这意味着它可以接收一个可选的 int 值。如果 Age 不为 nil,则函数将打印该值;否则,将不会打印任何内容。
我们可以如下调用这个函数:
person := Person{Name: "John", Age: 30}
PrintPerson(person)
这将打印以下输出:
John
30
我们可以省略 Age 字段,如下所示:
person := Person{Name: "Mary"}
PrintPerson(person)
这将打印以下输出:
Mary