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方法参数的封装的主要内容,如果未能解决你的问题,请参考以下文章

golang方法参数的封装

Golang方法和接口

jQyery简史和下载引用方法

简单二次封装的Golang图像处理库:图片裁剪

Golang如何体现面向对象三大特征之封装?

谁知道IC封装so,soj,sop的区别在哪里?