Golang可选参数实践

文章介绍了在Go语言中,由于不支持方法重载,如何通过使用函数选项模式来实现可选参数和默认值,以在不破坏现有逻辑的基础上扩展函数功能。示例代码展示了如何定义和使用UserConfig结构体以及相关的With*函数来设置用户配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:go不支持类似java的方法重载,但对于函数的可选参数和默认参数配置,通常要在不影响不破坏现有逻辑基础上进行参数的添加。

实现:通过options选项,使用函数进行参数的初始化和可选值的设置。

代码:

package main

import "fmt"

// go实现可选参数实践
// 背景:go不支持方法重载,但对于函数的可选参数和默认参数配置,通常要在不影响不破坏现有逻辑基础上进行参数的添加
// 实现:通过options选项,使用函数进行参数的初始化和可选值的设置

type UserConfig struct {
	ID   int64  `json:"id"`
	Name string `json:"name"`
	Age  int    `json:"age"`
}

type UserOptions func(*UserConfig)

func WithName(name string) UserOptions {
	return func(config *UserConfig) {
		config.Name = name
	}
}

func WithAge(age int) UserOptions {
	return func(config *UserConfig) {
		config.Age = age
	}
}

func GetUser(id int64, options ...UserOptions) *UserConfig {
	user := &UserConfig{ID: id}

	for _, option := range options {
		// option本质就是函数,通过函数调用进行可选参数name、age的设置
		option(user)
	}

	return user
}

func main() {
	option1 := WithName("yzh")
	option2 := WithAge(18)
	user1 := GetUser(1)
	user2 := GetUser(2, option1, option2)
	fmt.Printf("%+v", user1) //&{ID:1 Name: Age:0}
	fmt.Println()
	fmt.Printf("%+v", user2) //&{ID:2 Name:yzh Age:18}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值