Bap*_*aux 2 containers list go
我使用本机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)
}
}
Run Code Online (Sandbox Code Playgroud)
当我转储ev变量时,对象类型是&inotify.Event.当我弹出一个项目并转储变量时,我的对象类型是&inotify.Event.
使用错误消息我认为这是接口类型对象接受的问题,但我没有找到如何定义类型.
你需要对foointo 进行类型断言*inotify.Event,堆栈不知道它是什么,它只是保存interface{}对象.
你需要做的是:
elem := stack.Front().Value
if foo, ok := elem.(*inotify.Event); ok {
fmt.Printf("%#v\n", foo)
log.Println("Name: ", foo.Name)
}
Run Code Online (Sandbox Code Playgroud)
该ok位确保它不是一个事件,你的程序不会崩溃.当然,你需要处理它不是的情况.
有关接口转换和类型断言的更多信息:https://golang.org/doc/effective_go.html#interface_conversions
| 归档时间: |
|
| 查看次数: |
2495 次 |
| 最近记录: |