我是Go的新手,并且一直在解决我正在尝试编写的代码所遇到的各种问题。但是有一个问题让我摸不着头脑。我一直在寻找网,但到目前为止还没有办法解决这个问题。
正如您将在下面的代码中看到的那样,我使用flag
来指定是否创建日志文件。我遇到的问题是,如果我将w := bufio.NewWriter(f)
置于if
循环内,则w
循环无法访问for
。如果我将其留在if
循环之外,则buffio
无法访问f
。
我知道我错过了一些简单的东西,但此刻我感到很茫然。
有人有任何建议吗?
package main
import (
"bufio"
"flag"
"fmt"
"os"
"time"
"path/filepath"
"strconv"
)
var (
logFile = flag.String("file", "yes", "Save output into file")
t = time.Now()
dir, _ = filepath.Abs(filepath.Dir(os.Args[0]))
)
func main() {
flag.Parse()
name := dir + "/" + "output_" + strconv.FormatInt(t.Unix(), 10) + ".log"
if *logFile == "yes" {
f, err := os.Create(name)
if err != nil {
panic(err)
}
defer f.Close()
}
w := bufio.NewWriter(f)
for _, v := range my_slice {
switch {
case *logFile == "yes":
fmt.Fprintln(w, v)
case *logFile != "yes":
fmt.Println(v)
}
}
w.Flush()
}
答案 0 :(得分:1)
os.Stdout
也是io.Writer
,因此您可以将代码简化为
w := bufio.NewWriter(os.Stdout)
if *logFile == "yes" {
// ...
w = bufio.NewWriter(f)
}
for _, v := range mySlice {
fmt.Fprintln(w, v)
}
w.Flush()