Golang annotations by Wish
Express annotations in golang comments as wishes to generate code for fields/struct.
Format of specifying annotation: @wish:yyy:payload
where:
yyyis the supported 'wish'. Wish implements the code generation logic, depending on the type of wish user wants to express in the comment.payloadis the extra information string that can be passed in the comment depending on wish which supports them.
Currently following annotations are supported.
- getter (To generate the getters for the fields of the struct. The getters does not have 'Get' prefix in the getter name.)
- setter (To generate the setters for the fields of the struct)
- fluent (To generate the setters for the fields of the struct. Each setter returns the receiver as return value so that method chaining can be performed)
Above annotations are supported at struct level.
Example usage for wishes @wish:setter and @wish:getter:
/*
* SomeStruct type encapsulate some structure.
* Below annotation will generate the 'setXXX' methods for all the fields in this struct.
* @wish:setter
* Below annotation will generate the 'getXXX' methods for all the fields in this struct.
* @wish:getter
*/
type SomeStruct struct {
age int
name string
}
The wishes expressed above @wish:setter and @wish:getter would generate below code when processed by wishgen
func (s *SomeStruct)SetAge(v int) {
s.age = v
}
func (s *SomeStruct)SetName(v string) {
s.name = v
}
func (s *SomeStruct)Age() int {
return s.age
}
func (s *SomeStruct)Name() string {
return s.name
}
Example usage for wish @wish:fluent:
/*
@wish:fluent
*/
type SomeTypeForFluent struct {
age int
name string
}
The wish expressed above @wish:fluent would generate below code when processed by wishgen
func (s *SomeTypeForFluent)SetAge(v int) *SomeTypeForFluent {
s.age = v
return s
}
func (s *SomeTypeForFluent)SetName(v string) *SomeTypeForFluent {
s.name = v
return s
}