设为首页 收藏本站
查看: 1198|回复: 0

[经验分享] Golang文件IO 一

[复制链接]

尚未签到

发表于 2018-9-20 11:27:09 | 显示全部楼层 |阅读模式
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)
  

  
}
  

  

  运行结果如下:
DSC0000.png

  生成的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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598810-1-1.html 上篇帖子: Golang实现断点续传 下篇帖子: Golang Context 详细介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表