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

时间:2017-07-09 21:31:44

标签: go

我试图找出一种方法来声明一个空变量来存储os.Createos.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()

}

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

  

./ main.go:13:undefined:File

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

  • os/file.go,我找到的返回值类型为*File
  • 该类型在os/file_unix.go中定义为struct

有人可以向我解释一下:

  1. 如何创建一个空变量,然后可以将其用于存储os.Createos.Open结果中的第一个变量。
  2. 为什么我的两次尝试都错了?
  3. 我误解的任何其他事情。

1 个答案:

答案 0 :(得分:1)

定义变量为var <variable-name> <type>,了解详情about variables

var file *os.File
var err error

您的更新代码:

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()
}