猿问

在 if/for 循环之外重用变量的 golang 问题

我是 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()

}


www说
浏览 157回答 1
1回答

Smart猫小萌

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()
随时随地看视频慕课网APP

相关分类

Go
我要回答