如何定义一个空变量来存储 File 结构的值?

Bel*_*dez 4 go

我试图找出一种方法来声明一个空变量来存储os.Createand的返回值os.Open。代码:

func main() {

  var path = "list.txt"
  // Some attempts:
  // var file File{}
  // var file *File

  // Check if file exists
  var _, err = os.Stat(path)

  // If new file, create it
  if os.IsNotExist(err) {
    var file, err = os.Create(path)

    // If file exists, open it
  } else {
    var file, err = os.Open(path)
  }

  // Check errors opening and creating file
  if err != nil {
    log.Fatal(err)
    return
  }

  // Defer closing file
  defer file.Close()

}
Run Code Online (Sandbox Code Playgroud)

两次尝试都会导致以下错误:

./main.go:13:未定义:文件

我确信这是我不知道的事情之一。我所知道的:

  • Per os/file.go,我正在寻找的返回值的类型是*File
  • 该类型被定义为os/file_unix.go结构体

有人可以向我解释一下吗:

  1. 如何创建一个空变量,然后将其用于存储os.Create和的结果中的第一个变量os.Open
  2. 为什么我的两次尝试都是错误的?
  3. 还有什么是我误解的。

jee*_*tkm 5

定义变量就是var <variable-name> <type>,进一步了解变量

var file *os.File
var err error
Run Code Online (Sandbox Code Playgroud)

您更新的代码:

func main() {
  path := "list.txt"

  var file *os.File
  var err error

  // Check if file exists
  if err = os.Stat(path); os.IsNotExist(err) {
    file, err = os.Create(path)
  } else { // If file exists, open it
    file, err = os.Open(path)
  }

  // Check errors opening and creating file
  if err != nil {
    log.Fatal(err)
    return
  }

  // Defer closing file
  defer file.Close()
}
Run Code Online (Sandbox Code Playgroud)