chenqb 发表于 2018-9-20 11:27:09

Golang文件IO 一

Golang文件IO 一
  文件IO编程最基本、最常用的就属读写文件操作了。ioutil包实现了一些IO实用功能,其中就包括非常简捷、好用的文件读取功能。
  ioutil包有7个函数1个变量:
  var Discard io.Writer = devNull(0)
  func NopCloser(r io.Reader) io.ReadCloser
  func ReadAll(r io.Reader) ([]byte, error)
  func ReadDir(dirname string) ([]os.FileInfo, error)
  func ReadFile(filename string) ([]byte, error)
  func TempDir(dir, prefix string) (name string, err error)
  func TempFile(dir, prefix string) (f *os.File, err error)
  func WriteFile(filename string, data []byte, perm os.FileMode) error
  ReadFile和WriteFile这两个函数分别实现了读文件和写文件操作,一行代码即可搞定,非常便捷。
  func ReadFile(filename string) ([]byte, error)
  ReadFile读取filename指定的文件,返回文件的内容。如果调用成功返回err==nil,而不是err==EOF。因为ReadFile读取整个文件,不会将Read操作遇到的EOF报告为一个错误。
  func WriteFile(filename string, data []byte, perm os.FileMode) error
  WriteFile将data写入到filename指定的文件。如果文件不存在,WriteFile用权限perm创建文件;如果文件存在,WriteFile函数在写之前先将文件截断。
  可以搭配json包实现程序配置的读写功能。下面是一个读写数据库配置的例子。
  

package main  

  

  
import (
  

  "fmt"
  

  "io/ioutil"
  

  "log"
  

  "encoding/json"
  

  
)
  

  

  
type AppConf struct{
  

  DriverName string `json:"driver_name"`
  

  SqlUser string `json:"sql_user"`
  

  SqlPass string `json:"sql_password"`
  

  SqlUrls string `json:"sql_urls"`
  

  SqlDB string `json:"sql_db"`
  

  
}
  

  

  
func main() {
  

  

  appConf := AppConf{DriverName:"mysql",
  

  SqlUser:"root",
  

  SqlPass:"password",
  

  
SqlUrls:"tcp(127.0.0.1:3306)",
  

  
SqlDB:"mydb"}
  

  

  bConf,err := json.MarshalIndent(appConf,"","\t")
  

  if err != nil {
  

  log.Fatal(err)
  

  }
  

  

  err = ioutil.WriteFile("app.cfg",bConf,0666)
  

  if err != nil {
  

  log.Fatal(err)
  

  }
  

  

  var appConf2 AppConf
  

  

  bConf,err =ioutil.ReadFile("app.cfg")
  

  if err != nil {
  

  log.Fatal(err)
  

  }
  

  

  err = json.Unmarshal(bConf,&appConf2)
  

  if err != nil {
  

  log.Fatal(err)
  

  }
  

  

  fmt.Println("appConf === appConf2",appConf==appConf2)
  

  
}
  

  

  运行结果如下:

  生成的app.cfg内容如下:
  

{  

  "driver_name": "mysql",
  

  "sql_user": "root",
  

  "sql_password": "password",
  

  "sql_urls": "tcp(127.0.0.1:3306)",
  

  "sql_db": "mydb"
  

  
}
  

  

  通常WriteFile的权限是0666。关于权限的定义,可以查看golang源码(C:\Go\src\os\types.go)
  

// A FileMode represents a file's mode and permission bits.  

  
// The bits have the same definition on all systems, so that
  

  
// information about files can be moved from one system
  

  
// to another portably. Not all bits apply to all systems.
  

  
// The only required bit is ModeDir for directories.
  

  
type FileMode uint32
  

  

  
// The defined file mode bits are the most significant bits of the FileMode.
  

  
// The nine least-significant bits are the standard Unix rwxrwxrwx permissions.
  

  
// The values of these bits should be considered part of the public API and
  

  
// may be used in wire protocols or disk representations: they must not be
  


  
// changed,>  

  
const (
  

  // The single letters are the abbreviations
  

  // used by the String method's formatting.
  

  ModeDir FileMode = 1
页: [1]
查看完整版本: Golang文件IO 一