tizen.moe

tizen.moe

golangで複数戻り値の関数からの戻り値を := で受け取った場合に同名変数を複数回使いたい場合

タイトルの表現があってるか微妙ですがgoでなんか書いたことがある人なら一度は考えるこういうやつ

package main

import (
        "errors"
        "fmt"
)

func hoge(is bool) (hoge bool, err error) {
        if is {
                return is, errors.New("Error HOGE")
        } else {
                return is, errors.New("Error FOO")
        }
}

func main() {
        hage, err := hoge(true)
        fmt.Println("hage = ", hage)
        fmt.Println("err = ", err)
        foo, err := hoge(false)
        fmt.Println("foo = ", foo)
        fmt.Println("err = ", err)
}

要はerrは使いまわしたいけど先頭の変数は新規に作りたいやつ。昔これできなかった気がするんですけど

taknb2nch.hatenablog.com

勘違いでちゃんとできた(errは同じメモリ空間上の変数が新規作成されずに使い続けられるという期待する動作をする)らしい。あはれ、しつるせうとくかな。年ごろはわろく書きけるものかな。。。*1

*1:過去に書いたゴミコードを直したい。。。