Где мое значение после выполнения Golang Init

package main

import (
    "fmt"
    "os"
)

var http_endpoint string

func init() {
    http_endpoint, ok := os.LookupEnv("http_endpoint")
    fmt.Println("OK IS:", ok)
    if !ok {
        http_endpoint = "127.0.0.1:3000"
    }
    fmt.Println("INIT RESULT:", http_endpoint)
}

func main() {
    fmt.Println("FINAL RESULT:", http_endpoint)
}

/* OUTPUT:
OK IS: false
INIT RESULT: 127.0.0.1:3000
FINAL RESULT: 
*/

package main

import (
    "fmt"
)

var http_endpoint string

func init() {
    http_endpoint = "127.0.0.1:3000"
    fmt.Println("INIT RESULT:", http_endpoint)
}

func main() {
    fmt.Println("FINAL RESULT:", http_endpoint)
}
/* OUTPUT
INIT RESULT: 127.0.0.1:3000
FINAL RESULT: 127.0.0.1:3000
*/

Where my value after init?


Ответы (1 шт):

Автор решения: Ainar-G

Вот оно, зло затенения (англ. «shadowing»). Вот тут вы создали локальную переменную, а не записали в глобальную:

http_endpoint, ok := os.LookupEnv("http_endpoint")

Пишите вот так:

var ok book
http_endpoint, ok = os.LookupEnv("http_endpoint")
→ Ссылка