Как сделать присвоение переменной с помощью «или» - PullRequest
0 голосов
/ 20 октября 2019

Возможно ли это, и как сделать однострочное (или просто короткое) присваивание var с такой логикой:

a := b (or if b is false, nil or undifined, then a equals to) "hello"  

Я пытаюсь сделать:

a := b | "hello"

, но получаюошибка: «оператор | не определен в строке».

, поэтому я из JS и пытаюсь реализовать:

const a = b || "hello";

, но в «Go-way»

Поскольку это статически типизированный Ланг, я имел в виду, что если b == "" (пустая строка)

Ответы [ 3 ]

5 голосов
/ 20 октября 2019

Нет синтаксиса Go, подобного этому. Используйте оператор if.

Операнды | должны быть целыми числами. Операнды || должны быть логическими.

Более того, string не может быть false или nil.

Учитывая, что фактическая цель ОП Если для переменной среды задано значение по умолчанию, то для теста должно использоваться логическое возвращаемое значение из os.LookupEnv , а не строковое значение. Используйте такую ​​функцию:

func getenv(key string, def string) string {
     val, ok := os.LookupEnv(key)
     if !ok {
         val = def
     }
     return val
}
1 голос
/ 20 октября 2019

У меня было похожее желание при определении значений по умолчанию для переменных Env.

Я решил, что нужно определить функцию для этого, например:

func getenv(key, fallback string) string {
    value := os.Getenv(key)
    if len(value) == 0 {
        return fallback
    }
    return value
}

Когда явызовите эту функцию, она выглядит так же сжато, как и "или":

port := getenv("PORT", "8000")

Вы можете определить свои собственные функции для своих вариантов использования.

0 голосов
/ 21 октября 2019

Я думаю, что делать свою собственную функцию - это здорово, но у golang есть собственный способ управления флагами. Вот пример

import (
    "flag"
)

func main() {    
    env := flag.String("env", "dev", "description")
}

, поэтому здесь значение по умолчанию для env - dev, и вы запускаете и изменяете его

go run main.go -env=prod

привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...