Сколько стоит os.Getenv? - PullRequest
       14

Сколько стоит os.Getenv?

0 голосов
/ 28 мая 2019

У меня есть фрагмент кода, который вызывается каждые несколько секунд и использует переменную среды:

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

1 Ответ

7 голосов
/ 28 мая 2019

Вы можете сравнить os.Getenv и посмотреть, как быстро это происходит.

Рассматривая его реализацию здесь , он стоит:

  1. Блокировка чтения;
  2. Поиск в глобальной карте;
  3. Линейный поиск символа '='.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...