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

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

Golang中的文件和目录操作

TempFile创建临时文件

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

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

示例

package main
import (
"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
}
// 调用时返回152
i := 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/

你可能感兴趣的文章
Node.js之async_hooks
查看>>
Node.js初体验
查看>>
Node.js升级工具n
查看>>
Node.js卸载超详细步骤(附图文讲解)
查看>>
Node.js卸载超详细步骤(附图文讲解)
查看>>
Node.js基于Express框架搭建一个简单的注册登录Web功能
查看>>
node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
查看>>
Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
查看>>
Node.js安装及环境配置之Windows篇
查看>>
Node.js安装和入门 - 2行代码让你能够启动一个Server
查看>>
node.js安装方法
查看>>
Node.js官网无法正常访问时安装NodeJS的方法
查看>>
node.js模块、包
查看>>
node.js的express框架用法(一)
查看>>
Node.js的交互式解释器(REPL)
查看>>
Node.js的循环与异步问题
查看>>
Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
查看>>
nodejs + socket.io 同时使用http 和 https
查看>>
NodeJS @kubernetes/client-node连接到kubernetes集群的方法
查看>>
NodeJS API简介
查看>>