猿问

os.Getenv 有多贵?

我有一段代码每隔几秒调用一次并使用环境变量:


for {

    myVar := os.Getenv("MY_VAR")

    //Do something

    time.Sleep(3 * time.Second)

}

但是重复调用的成本是多少os.Getenv?


环境变量的值在运行时不会改变,所以我可以将它设置为包级变量:


package blah


var myVar = os.Getenv("MY_VAR")

但这确实损害了代码的可测试性。


我应该将它设置为包级变量吗?还是os.Getenv足够温和?


编辑: 我已经对调用进行了基准测试,os.Getenv但它可靠吗?


package main_test


import (

    "os"

    "testing"

)


var result string


func BenchmarkEnv(b *testing.B) {

    var r string

    for n := 0; n < b.N; n++ {

        r = os.Getenv("PATH")

    }

    result = r

}

goos: darwin

goarch: amd64

BenchmarkEnv-8      20000000            78.7 ns/op

PASS


largeQ
浏览 120回答 1
1回答

LEATH

您可以对 os.Getenv 进行基准测试,看看它有多快。在这里查看它的实现,它的成本是:读锁;在全球地图中查找;char '=' 的线性搜索。
随时随地看视频慕课网APP

相关分类

Go
我要回答