我有一个烧瓶应用程序连接到给定URL到外部服务(具有不同但通常很长的响应时间)并在那里搜索一些东西.之后,对检索到的数据进行了大量的CPU操作.这也需要一些时间.
我的问题:来自外部的回应可能需要一些时间.你不能做很多事情,但当你同时有多个请求时它会成为一个大问题 - 对外部服务的烧瓶请求会阻塞线程,其余的则在等待.
明显浪费时间,它正在杀死应用程序.
我听说这个叫做Tornado的异步图书馆.还有我的问题:
我正在学习Go并且我坚持参加Go tour(exercise-stringer.go:https://tour.golang.org/methods/7).
这是一些代码:
type IPAddr [4]byte
// TODO: Add a "String() string" method to IPAddr.
func (a IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", a...)
}
Run Code Online (Sandbox Code Playgroud)
所以我的内心表现IPAddr为[4]byte,所以传播运营商的作品.但是我得到了:
cannot use []string literal (type []string) as type []interface {} in argument to fmt.Sprintf
Run Code Online (Sandbox Code Playgroud)
有没有搞错?字符串切片也不起作用,这里发生了什么?
编辑:对不起,我的问题有一个错误 - 错误是关于类型IPAddr,而不是[]string.我正在玩代码而且我粘贴了错误的输出.无论如何,感谢peterSO和0x434D53关于Go中切片的不变性.
嗯,这提出了另一个问题.为什么以这种方式实施?我想你只是有一些Iterable接口,所以任何实现它的结构都会"正常工作".
旁注:当我第一次听说Go时,这个大胆的陈述"已编译,但富有表现力".显式接口实现就是这方面的一个很好的例子,但是显式转换,缺少运算符重载等等都给了我"90s Java感觉".这很难过,因为Go看起来很棒.