博客
关于我
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/

你可能感兴趣的文章
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
MFC模态对话框和非模态对话框
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>