Skip to content

Instantly share code, notes, and snippets.

@nobeans
Last active March 18, 2022 05:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nobeans/f26a961c91d8fba7ea81765ad9922289 to your computer and use it in GitHub Desktop.
Save nobeans/f26a961c91d8fba7ea81765ad9922289 to your computer and use it in GitHub Desktop.
package main
import (
"errors"
"fmt"
"os"
)
func main() {
test1()
fmt.Println("-------------------")
test2()
}
func test1() {
err := errors.New("HOGE")
fmt.Println(err) //=> "HOGE"
// ifスコープで := した場合は、errが(再?)定義できるし、外のerrは上書きされない。
if _, err := fmt.Fprintln(os.Stdout, "FOO"); true { //=> "FOO"
fmt.Println(err) //=> "<nil>"
}
fmt.Println(err) //=> "HOGE"
// ifスコープで = した場合は、外のerrが上書きされる。
if _, err = fmt.Fprintln(os.Stdout, "BAR"); true { //=> "BAR"
fmt.Println(err) //=> "<nil>"
}
fmt.Println(err) //=> "<nil>"
}
func test2() {
err := errors.New("HOGE")
fmt.Println(err) //=> "HOGE"
// 同じスコープで := でerrの再定義はできない。(コンパイルエラー)
//_, err := fmt.Fprintln(os.Stdout, "BAZ")
//fmt.Println(err)
// 同じスコープで = でerrを使うと、当然上書きされる。
_, err = fmt.Fprintln(os.Stdout, "BAZ") //=> "BAZ"
fmt.Println(err) //=> "<nil>"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment