Go

Go の変数初期化に伴う条件分岐をもっと良い感じに書きたいと思ったが諦めるしかないようです

More than 3 years have passed since last update.

Go にはスクリプト言語でいうところの variable = a || b のような構文や三項演算子がないようなので、

var accessKeyId, secretAccessKey string
if config["aws_access_key_id"] == "" {
    accessKeyId = os.Getenv("AWS_ACCESS_KEY_ID")
    secretAccessKey = os.Getenv("AWS_SECRET_ACCESS_KEY")
} else {
    accessKeyId = config["aws_access_key_id"]
    secretAccessKey = config["aws_secret_access_key"]
}

とか

var url string
var err error

if len(os.Args) == 1 {
    url, err = gozo.SendCapture()
} else {
    url, err = gozo.SendFile(os.Args[1])
}

こんな感じのコードを毎回書くことになるんだけど、本当は

accessKeyId = config["aws_access_key_id"] || os.Getenv("AWS_ACCESS_KEY_ID")
secretAccessKey = config["aws_secret_access_key"] || os.Getenv("AWS_SECRET_ACCESS_KEY")

とか

url, err := len(os.Args) == 1 ? gozo.SendCapture() : gozo.SendFile(os.Args[1])

みたいに書けたらいいと思ってますができません。それは諦めるとしてもちっとまともに書きたいんですがみなさんどうしてるんでしょうか。

Goには三項演算子a?b:cはない ―― 代わりの書き方 では諦めるしかない旨が書かれてますが・・・。