求助:关于参数为interface的函数指针传递

redunit · · 1715 次点击
存在两个问题 1、test1和test2有返回值,task中f没有 2、func(i interface{})和test1(i *int)是不同的函数,也可以理解为两种不同的类型 ```go package main import ( "errors" "fmt" ) type Task struct { f func(i interface{}) error } func NewTask(h func(interface{}) error) (t *Task) { t = &Task{ f: h, } return } func (t *Task) Run() { fmt.Println("Runing...") } func test1(i interface{}) error { // 类型断言一下 intI,isOk := i.(int) if ! isOk { return errors.New("type is invalid") } fmt.Println("test1", intI) // do something here // ... return nil } func test2(s interface{}) (err error) { // 类型断言一下 str,isOk := s.(int) if ! isOk { return errors.New("type is invalid") } fmt.Println("test2", str) // do otherthing here // ... return } func main() { t1 := NewTask(test1) t2 := NewTask(test2) t1.Run() t2.Run() } ```
#9
更多评论
亲,请使用markdown格式化你的代码. 否则看不懂而且缺东西?
#1
```go package main import "fmt" type task struct { f func(i interface{}) } func (t *task) run() *task { return &task{ f: func(i interface{}) { fmt.Println(i) }, } } func allType() *task { return &task{ f: func(i interface{}) { fmt.Println(i) }, } } func main() { a := allType() a.f("aaa") var b task b1 := b.run() b1.f("bbb") } ``` 是不是就是想简单实现这个??
#2