Go 之 接口型函数
Published on November 16, 2023Updated on March 23, 2024
Loading content...
效果:利用 GetterFunc
把函数转成接口,来满足 Getter 的要求
优点:可传函数可传实现接口的结构体
Go// Interface-type functions func Test1(t *testing.T) { A := func(getter func() string) string { return getter() } if A(func() string { return "A" }) != "A" { t.Fatal("failed") } } type Getter interface { Get() string } // A GetterFunc implements Getter with a function. type GetterFunc func() string // Get implements Getter interface function func (f GetterFunc) Get() string { return f() } type B struct { Name string } func (b B) Get() string { return b.Name } func Test2(t *testing.T) { A := func(getter Getter) string { return getter.Get() } if A(GetterFunc(func() string { return "A" })) != "A" { t.Fatal("failed") } b := B{ Name: "B", } if A(b) != "B" { t.Fatal("failed") } }
出自 动手写分布式缓存 - GeeCache 第二天 单机并发缓存
Go// A Getter loads data for a key. type Getter interface { Get(key string) ([]byte, error) } // A GetterFunc implements Getter with a function. type GetterFunc func(key string) ([]byte, error) // Get implements Getter interface function func (f GetterFunc) Get(key string) ([]byte, error) { return f(key) }