Насколько дорог ос.Гетенв?

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

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

Вы можете сравнить это и узнать. Мой прогноз: это достаточно быстро, чтобы не волноваться.

Sergio Tulentsev 28.05.2019 16:25

Зачем вы постоянно перечитываете его, если он не меняется?

mkrieger1 28.05.2019 16:29

читать перед циклом?

Serve Laurijssen 28.05.2019 16:30
But to my understanding we should avoid package level variables.: Почему? Если вам нужна переменная уровня пакета, используйте ее. Из вашего примера у вас также, очевидно, есть выбор вне цикла, так зачем искать его каждый раз?
JimB 28.05.2019 16:30

@JimB Параллелизм здесь не проблема, но он ограничивает возможности тестирования

noamt 28.05.2019 16:33

@ServeLaurijssen Это возможно и легко в приведенном мною упрощенном примере, но это усложнит реальный код, над которым я работаю, поэтому я ищу способы обойти это.

noamt 28.05.2019 16:36

неудобно, что этот вопрос был отмечен; направлять любознательных разработчиков к возможностям бенчмарка golang — это хорошо

asmith1024 08.10.2021 11:32
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
7
1 322
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

  1. Блокировка чтения;
  2. Поиск на глобальной карте;
  3. Линейный поиск char '='.

Другие вопросы по теме