我使用本机 golang 包“container/list”来管理堆栈中的 inotify 事件。当我访问堆栈的项目时,我的类型失败(我认为)。
import (
"golang.org/x/exp/inotify"
"container/list"
"log"
"fmt"
)
func main() {
stack := list.New()
watcher, err := inotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
err = watcher.Watch(os.Args[1])
if err != nil {
log.Fatal(err)
}
for {
select {
case ev := <-watcher.Event:
stack.PushFront(ev)
fmt.Printf("%#v\n", ev)
}
foo := stack.Front().Value
fmt.Printf("%#v\n", foo)
log.Println("Name: ", foo.Name)
}
}
当我倾倒时ev变量,对象类型是&inotify.Event。
当我弹出一项并转储变量时,我的对象类型是&inotify.Event.
对于错误消息,我认为这是接口接受的类型对象的问题,但我不知道如何定义类型。
您需要进行类型断言foo
into *inotify.Event
,堆栈不知道它是什么,它只是保存interface{}
对象。
你需要做的是这样的:
elem := stack.Front().Value
if foo, ok := elem.(*inotify.Event); ok {
fmt.Printf("%#v\n", foo)
log.Println("Name: ", foo.Name)
}
The ok
位确定是否是not一个事件,你的程序就不会崩溃。当然,您需要处理并非如此的情况。
有关接口转换和类型断言的更多信息:https://golang.org/doc/ effective_go.html#interface_conversions https://golang.org/doc/effective_go.html#interface_conversions
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)