本文共 2961 字,大约阅读时间需要 9 分钟。
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.Open
或ioutil.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)}
defer
用于在函数返回前执行定 arity 操作,如资源释放。
func do() (ok bool) { file, err := os.Open("c:\a.txt") defer file.Close() // 做一些事情... return ok}
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)
用于从表单请求中提取文件或解析查询字符串。
func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error)
func (r *Request) ParseForm() error
说明
FormFile
返回指定关键字对应的文件。ParseForm
解析查询字符串和表单数据。用于在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)}
handler
函数执行。使用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/