Hi all,
I have made a go tool to generate accessor methods(getter or setter) for unexported struct fields, so let me introduce it.
https://github.com/masaushi/accessory
accessory
accessory is an accessor generator for Go programming language.
What is accessory?
Accessory is a tool that generates accessor methods from any structs.
Sometimes you might make struct fields unexported in order for values of fields not to be accessed or modified from anywhere in your codebases, and define getters or setters for values to be handled in a desired way.
But writing accessors for so many fields is time-consuming, but not exciting or creative.
Accessory frees you from tedious, monotonous tasks.
Installation
To get the latest released version
Go version < 1.16
go get github.com/masaushi/accessory
Go 1.16+
go install github.com/masaushi/accessory@latest
Usage
Declare Struct with accessor
Tag
accessory
generates accessor methods from defined structs, so you need to declare a struct and fields with accessor
tag.
Values for accessor
tag is getter
and setter
, getter
is for generating getter method and setter
is for setter methods.
Here…
Sometimes you might make struct fields unexported in order for values of the fields not to be accessed or modified from anywhere in your codebases.
Making struct fields unexported will prevent data from unexpected use or change.
But you sometimes might need accessor methods for some fields to get/set data in a desired way.
However, writing accessors for many fields is time-consuming, but not exciting or creative.
This tool frees you from that tedious, monotonous task.
Example
1. Declare a model with accessor
tag.
type MyStruct struct {
field1 string `accessor:"getter"`
field2 *int `accessor:"setter"`
field3 time.Time `accessor:"getter,setter"`
}
2. Run accessory
command
$ accessory -type MyStruct .
3. Accessor methods will be generated.
func(m *MyStruct) Field1() string {
return m.field1
}
func(m *MyStruct) SetField2(val *int) {
m.field2 = val
}
func(m *MyStruct) Field3() time.Time {
return m.field3
}
func(m *MyStruct) SetField3(val time.Time) {
m.field3 = val
}
4. You can customize method name
type MyStruct struct {
field1 string `accessor:"getter:GetFirstField"`
field2 int `accessor:"setter:ChangeSecondField"`
}
Generated methods will be
func(m *MyStruct) GetFirstField() string {
return m.field1
}
func(m *MyStruct) ChangeSecondField(val *int) {
m.field2 = val
}
5. You can also generate accessors with go generate
//go:generate accessory -type MyStruct
type MyStruct struct {
field1 string `accessor:"getter"`
field2 *int `accessor:"setter"`
}
Conclusion
Generating accessors easily will save your time and help you focus on writing important business logics.
I'm looking forward to getting your feedback.
Have a wonderful day!
Top comments (0)