以下のステートメントの出力をテキストファイルに書き込もうとしていますが、テキストファイルに直接書き込むprintf関数があるかどうかわかりません。たとえば、以下のコードが結果[5 1 2 4 0 3]を生成する場合、これをテキストファイルに読み込んで保存および永続化する必要があります。何かアイデアはありますか?
テキストファイルに移動するコード:
//choose random number for recipe
r := Rand.New(Rand.NewSource(time.Now().UnixNano()))
i := r.Perm(5)
fmt.Printf("%v\n", i)
fmt.Printf("%d\n", i[0])
fmt.Printf("%d\n", i[1])
_fmt.Fprintf
_ と_io.Writer
_を併用すると、ファイルのハンドルを表すことができます。
以下に簡単な例を示します。
_func check(err error) {
if err != nil {
panic(err)
}
}
func main() {
f, err := os.Create("/tmp/yourfile")
check(err)
defer f.Close()
w := bufio.NewWriter(f)
//choose random number for recipe
r := Rand.New(Rand.NewSource(time.Now().UnixNano()))
i := r.Perm(5)
_, err = fmt.Fprintf(w, "%v\n", i)
check(err)
_, err = fmt.Fprintf(w, "%d\n", i[0])
check(err)
_, err = fmt.Fprintf(w, "%d\n", i[1])
check(err)
w.Flush()
}
_
Goでファイルに書き込むその他の方法を示します here 。
簡潔にするために、ここではpanic()
を使用していることに注意してください。実際のシナリオでは、エラーを適切に処理する必要があります(ほとんどの場合、プログラムを終了する以外の何か、つまりpanic()
します)。
この例では、値をoutput.txt
ファイルに書き込みます。
package main
import (
"bufio"
"fmt"
"math/Rand"
"os"
"time"
)
func main() {
file, err := os.OpenFile("output.txt", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println("File does not exists or cannot be created")
os.Exit(1)
}
defer file.Close()
w := bufio.NewWriter(file)
r := Rand.New(Rand.NewSource(time.Now().UnixNano()))
i := r.Perm(5)
fmt.Fprintf(w, "%v\n", i)
w.Flush()
}
os
パッケージを使用してファイルを作成し、Fprintf
に渡します
file, fileErr := os.Create("file")
if fileErr != nil {
fmt.Println(fileErr)
return
}
fmt.Fprintf(file, "%v\n", i)
これはファイルに書き込む必要があります。