goaccessor
是一个Go工具,设计用于自动化生成你的类型和变量的getter
和setter
样板代码。
go install github.com/yujiachen-y/goaccessor@latest
安装goaccessor
后,你可以在命令行界面(CLI)中使用,也可以与//go:generate
指令一起使用。有关更多信息,请查看示例部分。
在示例文件夹中你可以找到一个可运行的'book'示例。
考虑book.go
文件:
package main
//go:generate goaccessor --target Book --getter --setter
type Book struct {
Title string
Author string
}
当我们运行go generate
时,它会创建一个新文件book_goaccessor.go
:
// Code generated by "goaccessor --target Book --getter --setter". DO NOT EDIT.
package main
func (b *Book) GetTitle() string {
return b.Title
}
func (b *Book) SetTitle(title string) {
b.Title = title
}
func (b *Book) GetAuthor() string {
return b.Author
}
func (b *Book) SetAuthor(author string) {
b.Author = author
}
goaccessor
不仅适用于结构类型;它也可以处理顶级常量和变量。例如:
//go:generate goaccessor --target books --getter --setter
var books = map[string]*Book {
...
}
执行go generate
后,我们得到:
func GetBooks() map[string]*Book {
return books
}
func SetBooks(newBooks map[string]*Book) {
books = newBooks
}
在某些情况下,你可能想要以前缀的形式导出顶级变量的特定字段:
//go:generate goaccessor --target bestSellingBook --field --getter --include Author --prefix BestSelling
var bestSellingBook = &Book{ ... }
这个指令会生成:
func GetBestSellingAuthor() string {
return bestSellingBook.Author
}
以下是goaccessor
的可用选项:
选项 | 简短选项 | 描述 |
---|---|---|
--target | -t | 指定要处理的目标。 |
--getter | -g | 为目标生成getter 。 |
--setter | -s | 为目标生成setter 。 |
--accessor | -a | 为目标生成getter 和setter 。 |
--pure-getter | -pg | 为目标生成不带 'Get' 前缀的getter 。 |
--prefix | -p | 给生成的方法/函数添加前缀。 |
--field | -f | 将标记(getter ,setter ,accessor )应用到目标的每个字段(仅适用于结构类型变量)。 |
--include | -i | 只为指定的字段生成方法(字段应以逗号分隔)。 |
--exclude | -e | 从方法生成中排除指定的字段(字段应以逗号分隔)。 |
请注意,当使用--pure-getter
选项时,生成的getter方法将不会有 'Get' 前缀。
例如,对于有Title
字段的Book
结构体,getter将会是 Title()
而不是 GetTitle()
。
如果你不想安装goaccessor
并希望将其作为项目的依赖项使用,按照以下步骤操作:
- 转到你的项目目录并通过
go mod
添加goaccessor
依赖项:
go get github.com/yujiachen-y/goaccessor@latest
- 创建一个名为
tools.go
的新文件(或者你喜欢的其他名称),并输入以下代码:
//go:build tools
package main
import (
_ "github.com/yujiachen-y/goaccessor"
)
-
如果你想要使用
goaccessor
的CLI命令,请使用go run github.com/yujiachen-y/goaccessor@latest
。 -
如果你使用
go:generate
指令生成代码,更改指令,像这样:
//go:generate go run github.com/yujiachen-y/goaccessor@latest -target book
var book Book
- 注意:尽管
goaccessor
是你项目的依赖项,但它不会——也不应该——成为你项目构建结果的一部分。我们在tools.go
中使用构建标记确保在构建过程中忽略goaccessor
。