🐀
Go言語のprintln関数がシェルでファイルにリダイレクトしてくれなくてハマった
package main
func main() {
println("Hello println")
}
これをファイルに書き出したいのでシェルでリダイレクトする
~/tmp:./hello0 > a.txt
Hello println <ーシェルに出力される時点でなにかおかしい
~/tmp:cat a.txt
なにも出力されない
~/tmp:file a.txt
a.txt: empty
調べてみると println関数はビルトイン関数と言われているGo言語の組み込み関数で、普通の普通にprintで出力したい場合はfmt.Printlnの方を使わないといけないようだ。
The print built-in function formats its arguments in an implementation->specific way and writes the result to standard error. Print is useful for >bootstrapping and debugging; it is not guaranteed to stay in the language.
https://pkg.go.dev/builtin#print
printlnは標準出力でなくエラー出力に出るのでファイルへのリダイレクトがうまくいかなかった
あまり意識せずにprintlnとfmt.printlnを書いていたのでハマった。
package main
import (
"fmt"
"os"
)
func main() {
println("Hello println")
fmt.Println("Hello fmt.println")
fmt.Fprintln(os.Stdout, "Hello fmt.Fprintln")
}
これを実行すると
~/tmp:./hello>b.txt
Hello println
~/tmp:cat b.txt
Hello fmt.println
Hello fmt.Fprintln
うまくいった。
Discussion