golang方法参数的封装
Posted 玩家_名狱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang方法参数的封装相关的知识,希望对你有一定的参考价值。
假如有一个对象,下面有个方法需要对很多参数做一些处理,这些参数可以由开发者自定传参,可传可不传,可传一也可传多,一般这种信息有时是不重要的,但是实际中不能缺少。
如果是对于使用者而言,参数多也很正常,但是对于第三方库的开发者来说,代码太丑了,那么就需要封装一下。
假如不封装你会这样一个一个的传,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
*/
以上是关于golang方法参数的封装的主要内容,如果未能解决你的问题,请参考以下文章