Golang Trait
Golang 实现Option/Rust Trait
package traiter
type traitPtr[T any] interface {
*T
Default()
}
type option[T any] struct {
model T
}
type Func[T any] func(*T)
func New[T any, P traitPtr[T]](opts ...Func[T]) *option[T] {
var t T
P.Default(&t)
for _, opt := range opts {
opt(&t)
}
return &option[T]{model: t}
}
test
type tOption struct {
Name string
Port int
}
func (tOption *tOption) Default() {
tOption.Name = "default"
tOption.Port = 3000
}
func WithPort(port int) traiter.Func[tOption] {
return func(o *tOption) {
o.Port = port
}
}
func WithName(name string) traiter.Func[tOption] {
return func(o *tOption) {
o.Name = name
}
}
func TestOption(t *testing.T) {
s := traiter.New[tOption](
WithPort(8000),
)
t.Log(s)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: