Go:基于类的方法是否比功能更有效?

时间:2017-02-14 19:59:34

标签: performance class go functional-programming

我很好奇,如果在Golang中使用结构和函数的基于类的方法在Golang中更有效?

到目前为止,我无法发掘任何比较两种不同技术的资源。

当我被告知使用基于类的编码方法在Javascript中比在函数中更高效时,这个问题来自于对话。

1 个答案:

答案 0 :(得分:2)

你可以在go中实际测试这个!

在您的代码中,您可以创建方法和等效函数。我在main.go文件中执行此操作。

type A string
func (a A) Demo(i int) {}
func Demo(a A, i int) {}

然后在测试文件中为它创建一个基准(main_test.go对我来说。)

func BenchmarkMethod(b *testing.B) {
    var a A = "test"
    var i int = 123

    for n := 0; n < b.N; n++ {
        a.Demo(i)
    }
}

func BenchmarkFunction(b *testing.B) {
    var a A = "test"
    var i int = 123

    for n := 0; n < b.N; n++ {
        Demo(a, i)
    }
}

然后使用go test -bench=.

测试基准
BenchmarkMethod-8       2000000000           0.27 ns/op
BenchmarkFunction-8     2000000000           0.29 ns/op
PASS

您可以更新您的方法和功能,以便做同样的事情,看看它会如何影响事物。

func (a A) Demo(i int) string {
    return fmt.Sprintf("%s-%d", a, i)
}

func Demo(a A, i int) string {
    return fmt.Sprintf("%s-%d", a, i)
}

测试这个仍然让我几乎完全相同。

$ go test -bench=.
BenchmarkMethod-8       10000000           233 ns/op
BenchmarkFunction-8     10000000           232 ns/op
PASS

如此简短的回答 - 我非常怀疑两者之间是否有任何明显的性能差异,如果它看起来像你运行的任何其他代码可能比使用方法与函数有更大的影响。