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

你可能感兴趣的文章
MSTP多生成树协议(第二课)
查看>>
MSTP是什么?有哪些专有名词?
查看>>
Mstsc 远程桌面链接 And 网络映射
查看>>
Myeclipse常用快捷键
查看>>
MyEclipse更改项目名web发布名字不改问题
查看>>
MyEclipse用(JDBC)连接SQL出现的问题~
查看>>
mt-datetime-picker type="date" 时间格式 bug
查看>>
myeclipse的新建severlet不见解决方法
查看>>
MyEclipse设置当前行背景颜色、选中单词前景色、背景色
查看>>
Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
查看>>
myeclipse配置springmvc教程
查看>>
MyEclipse配置SVN
查看>>
MTCNN 人脸检测
查看>>
MyEcplise中SpringBoot怎样定制启动banner?
查看>>
MyPython
查看>>
MTD技术介绍
查看>>
MySQL
查看>>
MySQL
查看>>
mysql
查看>>
MTK Android 如何获取系统权限
查看>>