golang方法参数的封装

本文通过示例展示了如何在Go语言中封装方法参数,以简化多参数传递,提高代码可读性和灵活性。通过定义Book结构体和相关方法,将原本多个单独的参数转化为可选的配置选项,允许开发者按需传递参数,增强了代码的可维护性。

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

假如有一个对象,下面有个方法需要对很多参数做一些处理,这些参数可以由开发者自定传参,可传可不传,可传一也可传多,一般这种信息有时是不重要的,但是实际中不能缺少。
如果是对于使用者而言,参数多也很正常,但是对于第三方库的开发者来说,代码太丑了,那么就需要封装一下。

假如不封装你会这样一个一个的传,Parameter 参数越多,方法的形参越多

package main

import "fmt"

// Book 书的主要信息
type Book struct {
	BookPrice int    //价格
	Author    string //作者
	BookName  string //书名
	Parameter
}

// Parameter 书的一些其他信息
type Parameter struct {
	Press           string // 出版社
	PublicationTime string // 出版时间
	PrintingHouse   string // 印刷厂
	NumberOfWords   uint64 //字数
}

// 形参很多
func (b *Book) AddBookInfos(BookPrice int, Author, BookName, Press, PublicationTime, PrintingHouse string, NumberOfWords uint64) {
	b.BookPrice = BookPrice
	b.Author = Author
	b.BookName = BookName
	b.Parameter.Press = Press
	b.Parameter.PublicationTime = PublicationTime
	fmt.Println(b)
}

// 调用
func main() {
	var book Book
	book.AddBookInfos(99, "张三", "时间简史", "北京出版社", "2008.06.08", "钢铁印刷厂", 96564)
}
/* 结果
&{99 张三 时间简史 {北京出版社 2008.06.08 钢铁印刷厂 96564}}
*/

稍微封装亿点点之后,自由度就高了,想修改哪个参数就传哪个,当然也可以传多个

package main

import "fmt"

// Book 书的主要信息
type Book struct {
	BookPrice int    //价格
	Author    string //作者
	BookName  string //书名
	Parameter
}

// Parameter 书的一些其他信息
type Parameter struct {
	Press           string // 出版社
	PublicationTime string // 出版时间
	PrintingHouse   string // 印刷厂
	NumberOfWords   uint64 //字数
}

type BookOptions func(*Book)

func encapsulationPress(press string) BookOptions {
	return func(book *Book) {
		book.Parameter.Press = press
	}
}
func encapsulationPublicationTime(publicationTime string) BookOptions {
	return func(book *Book) {
		book.Parameter.PublicationTime = publicationTime
	}
}
func encapsulationPrintingHouse(printingHouse string) BookOptions {
	return func(book *Book) {
		book.Parameter.PrintingHouse = printingHouse
	}
}
func encapsulationNumberOfWords(numberOfWords uint64) BookOptions {
	return func(book *Book) {
		book.Parameter.NumberOfWords = numberOfWords
	}
}

func (b *Book) AddBookInfo(BookPrice int, Author, BookName string, options ...BookOptions) {
	b.BookPrice = BookPrice
	b.Author = Author
	b.BookName = BookName
	for _, option := range options {
		option(b)
	}
	fmt.Println(b)
}

// 调用
func main() {
	var book Book
	book.AddBookInfo(99, "张三", "时间简史", encapsulationPress("清华大学出版社"))
	// book.AddBookInfo(99, "张三", "时间简史", encapsulationNumberOfWords(66894454654))
	// book.AddBookInfo(99, "张三", "时间简史", encapsulationPublicationTime("2022.08.01"))
}
/*结果
&{99 张三 时间简史 {清华大学出版社   0}}
// &{99 张三 时间简史 {   66894454654}}
// &{99 张三 时间简史 { 2022.08.01 0}}
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值