GoLangでちょっとしたコマンドを作っていくと、実行結果を標準出力だったりファイル出力だったり 切り替えたいと思うことがあります(というか、自分はそう思いました)。 色々さわってみたところ、os.Stdoutos.Createの型が同じだったので備忘録に残しておきます。

とりあえずコード

ファイルに書き出すコード

package main

import (
	"os"
	"fmt"
)

func main() {
	file, _ := os.Create("test.txt")
	defer file.Close()
	fmt.Fprint(file, "hogehoge\n")
}

標準出力に書き出すコード

package main

import (
	"os"
	"fmt"
)

func main() {
	file := os.Stdout
	defer file.Close()
	fmt.Fprint(file, "hogehoge\n")
}

OSパッケージから”os.Stdout”の定義を確認すると…

var (
	Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
	Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
	Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
)

以上。