博客
关于我
Golang学习之在项目中遇到的几个常用的方法
阅读量:738 次
发布时间:2019-03-22

本文共 2961 字,大约阅读时间需要 9 分钟。

Golang中的文件和目录操作

TempFile创建临时文件

TempFile函数用于在指定目录或默认临时目录中创建一个带有前缀的临时文件。该文件可以通过读写模式打开,返回文件对象及可能的错误。

func TempFile(dir, prefix string) (f *os.File, err error)

示例

package mainimport (    "io/ioutil"    "log"    "os")func main() {    content := []byte("temporary file's content")    tmpfile, err := ioutil.TempFile("", "example")    if err != nil {        log.Fatal(err)    }    defer os.Remove(tmpfile.Name()) // 创建临时文件时自动延迟删除    if _, err := tmpfile.Write(content); err != nil {        log.Fatal(err)    }    if err := tmpfile.Close(); err != nil {        log.Fatal(err)    }}

说明

  • 如果指定的dir为空,则默认在os.TempDir()中创建文件。
  • 每次调用会生成不同的文件,文件路径可通过f.Name()获取。
  • 调用者需手动删除生成的临时文件。

创建文件夹

使用os.Mkdir函数创建一个新文件夹,权限由perm参数决定。

os.Mkdir("test_go", 0777)

示例

err := os.Mkdir("test_go", 0777)if err != nil {    fmt.Println(err)}

说明

  • 0777二进制表示为:权限允许读、写、执行,适用于常规文件夹。

创建多级文件夹

使用os.MkdirAll创建多层文件夹,方法参数同上。

os.MkdirAll("test_go/go1/go2", 0777)

示例

err := os.MkdirAll("test_go/go1/go2", 0777)if err != nil {    fmt.Println(err)}

说明

  • 逆向应用Mkdir多次无法创建多级文件夹,需使用MkdirAll

删除文件夹

删除文件夹时,可先移除单个文件夹或全部内容。

err := os.Remove("test_go")if err != nil {    fmt.Println(err)}os.RemoveAll("test_go")

示例

err := os.Remove("test_go")if err != nil {    fmt.Println(err)}os.RemoveAll("test_go")

说明

  • os.Remove删除单个文件或空文件夹。
  • os.RemoveAll删除file及其所有子目录和文件。

读取文件

使用os.Openioutil.ReadFile读取文件内容。

file, err := os.Open("file.go")  // 仅供读取

示例

file, err := os.Open("file.go")if err != nil {    log.Fatal(err)}// 读取文件内容data, err := ioutil.ReadFile("file.go")check(err)fmt.Print(string(data))

指定文件权限和打开方式

通过os.O_*标志位指定文件操作模式。

f, err := os.OpenFile("file.go", os.O_RDWR|os.O_CREATE, 0755)

示例

f, err := os.OpenFile("file.go", os.O_RDWR|os.O_CREATE, 0755)if err != nil {    log.Fatal(err)}// 关闭文件if err := f.Close(); err != nil {    log.Fatal(err)}

Golang中的defer使用

defer用于在函数返回前执行定 arity 操作,如资源释放。

func do() (ok bool) {    file, err := os.Open("c:\a.txt")    defer file.Close()    // 做一些事情...    return ok}

记录顺序

  • defer按最后进、先出的顺序执行。
  • 示例代码输出顺序为4, 3, 2, 1, 0

示例

func deferRet(x, y int) (z int) {    defer z += 100    z = x + y    return z + 50}// 调用时返回152i := deferRet(1, 1)println(i)

FormFile和ParseForm

用于从表单请求中提取文件或解析查询字符串。

func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error)
func (r *Request) ParseForm() error

说明

  • FormFile返回指定关键字对应的文件。
  • ParseForm解析查询字符串和表单数据。

HandleFunc与ListenAndServe

用于在Golang中创建HTTP服务器路由。

http.HandleFunc("/login", loginTask)err := http.ListenAndServe("192.168.1.27:8081", nil)

示例

http.HandleFunc("/", handlerFunc)err := http.ListenAndServe(":8080", nil)if err != nil {    log.Fatal("ListenAndServe: ", err)}

分解

  • ** ListenAndServe**监听指定地址并启动服务器。
  • 服务器处理请求通过handler函数执行。

URL解析

使用net/url解析和验证URL格式。

s := "postgres://user:pass@host.com:5432/path?k=v#f"u, err := url.Parse(s)if err != nil {    panic(err)}// 提取URL组件fmt.Println(u.Scheme)fmt.Println(u.User)// 提取路径fmt.Println(u.Path)// 提取查询参数m, _ := url.ParseQuery(u.RawQuery)fmt.Println(m["k"][0])

通过以上方法,Golang可以方便地完成文件和目录操作、HTTP服务器配置以及URL解析等任务。

转载地址:http://qzwwk.baihongyu.com/

你可能感兴趣的文章
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>