String 在错误消息中包含数据的惯用方法是什么?
在Go中,我遇到了将变量合并到错误消息中的不同方法。在下面的例子中,惯用的是哪种方式?有更好的选择吗 当事情开始破裂时,哪个更安全?例如,当可用内存非常少时,分配更少字节的选项更可取 哪一个更快,以防我们需要产生大量错误 完整的可运行代码可以在或官方文件中看到String 在错误消息中包含数据的惯用方法是什么?,string,go,error-handling,String,Go,Error Handling,在Go中,我遇到了将变量合并到错误消息中的不同方法。在下面的例子中,惯用的是哪种方式?有更好的选择吗 当事情开始破裂时,哪个更安全?例如,当可用内存非常少时,分配更少字节的选项更可取 哪一个更快,以防我们需要产生大量错误 完整的可运行代码可以在或官方文件中看到 除非你的内存很小,或者会产生大量的错误,否则我不会担心。就习惯用法而言,我会选择h()选项,因为它更容易阅读 这里的好处是,可以用一些简单的基准测试分配、使用的内存和速度 func BenchmarkF(b *testing.B) {
除非你的内存很小,或者会产生大量的错误,否则我不会担心。就习惯用法而言,我会选择
h()
选项,因为它更容易阅读
这里的好处是,可以用一些简单的基准测试分配、使用的内存和速度
func BenchmarkF(b *testing.B) {
for i := 0; i <= b.N; i++ {
f()
}
}
func BenchmarkG(b *testing.B) {
for i := 0; i <= b.N; i++ {
g()
}
}
func BenchmarkH(b *testing.B) {
for i := 0; i <= b.N; i++ {
h()
}
}
正如您所看到的,
f()
是最快的,占用的内存最少,分配也最少。它也不值得(在我看来)额外的可读性成本。除非你的内存非常少,或者会产生大量的错误,否则我不会担心。就习惯用法而言,我会选择h()
选项,因为它更容易阅读
这里的好处是,可以用一些简单的基准测试分配、使用的内存和速度
func BenchmarkF(b *testing.B) {
for i := 0; i <= b.N; i++ {
f()
}
}
func BenchmarkG(b *testing.B) {
for i := 0; i <= b.N; i++ {
g()
}
}
func BenchmarkH(b *testing.B) {
for i := 0; i <= b.N; i++ {
h()
}
}
正如您所看到的,f()
是最快的,占用的内存最少,分配也最少。在我看来,它也不值得额外的可读性成本
BenchmarkF-8 10000000 169 ns/op 72 B/op 4 allocs/op
BenchmarkG-8 10000000 204 ns/op 120 B/op 5 allocs/op
BenchmarkH-8 5000000 237 ns/op 80 B/op 4 allocs/op