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 协议》,转载必须注明作者和本文链接
讨论数量: 1

rust 的 Option 是个 enum 类型, golang 不支持啊

4小时前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!