我正在阅读有关reflect.MakeFunc的内容,并且想知道是否还有一种方法可以在运行时创建方法(带有接收器的函数)。
更新(2019年1月24日):
这个问题在4年前被问到关于Go 1.4(并且仍在获得观点).从那时起,pprof的分析发生了巨大的变化.
原始问题:
我正在尝试描述我写的基于马提尼的服务器,我想描述一个请求,并获得函数的完整细分及其运行时间.我试过玩两种方法runtime/pprof,net/http/pprof但输出看起来像这样:
Total: 3 samples
1 33.3% 33.3% 1 33.3% ExternalCode
1 33.3% 66.7% 1 33.3% runtime.futex
1 33.3% 100.0% 2 66.7% syscall.Syscall
Run Code Online (Sandbox Code Playgroud)
Web视图也不是很有帮助.
我们经常介绍另一个程序,输出似乎是我需要的:
20ms of 20ms total ( 100%)
flat flat% sum% cum cum%
10ms 50.00% 50.00% 10ms 50.00% runtime.duffcopy
10ms 50.00% 100% 10ms 50.00% runtime.fastrand1
0 0% 100% 20ms 100% main.func·004
0 0% 100% 20ms 100% main.pruneAlerts
0 0% 100% 20ms 100% runtime.memclr
Run Code Online (Sandbox Code Playgroud)
我无法分辨出差异的来源.
如何在 go 中将数组作为 interface{} 参数列表传递?
func Yalla(i...interface{}) {
fmt.Println(i...)
}
func main() {
Yalla(1,2,3)
Yalla([]int{1,2,3})
}
Run Code Online (Sandbox Code Playgroud)
将输出:
1 2 3 //good
[1 2 3] //bad
Run Code Online (Sandbox Code Playgroud)
这个:
Yalla([]int{1,2,3}...)
Run Code Online (Sandbox Code Playgroud)
会产生错误。
我知道我可以创建一个新的接口数组并一个一个地分配值来解决这个问题,但是有没有一种优雅的方法来做到这一点?