文件文件夹创建与读写、文件拷贝、转换解析json和xml
os
os创建文件夹
package main
import (
"fmt"
"os"
)
func main() {
// 创建文件夹
err := os.Mkdir("example", 0755)
if err != nil {
fmt.Println("文件夹创建失败", err)
return
} else {
fmt.Println("文件夹创建成功!")
}
}
package main
import (
"fmt"
"os"
)
func main() {
// 创建文件夹
err := os.MkdirAll("example/a/b/c/", 0755)
if err != nil {
fmt.Println("文件夹创建失败", err)
return
} else {
fmt.Println("文件夹创建成功!")
}
}
os文件读写
package main
import (
"fmt"
"os"
)
func main() {
// 创建文件
file1, err1 := os.Create("test.txt")
if err1 != nil {
fmt.Println("文件创建失败:", err1)
return
} else {
fmt.Println("文件创建成功!")
}
defer file1.Close()
// 写入文件内容
n, err2 := file1.Write([]byte("Hello, world!"))
if err2 != nil {
fmt.Println("文件写入失败:", err2)
return
} else {
fmt.Println("文件写入成功:", n)
// 打开文件
file2, err3 := os.Open("test.txt")
if err3 != nil {
fmt.Println("打开文件失败:", err3)
return
} else {
fmt.Println("打开文件成功!")
}
defer file2.Close()
// 读取文件内容
buf := make([]byte, 1024)
n, err4 := file2.Read(buf)
if err4 != nil {
fmt.Println("文件读取失败:", err4)
return
} else {
content := string(buf[:n])
fmt.Println("文件读取成功:", content)
}
}
}
os判断文件或文件夹是否存在
package main
import (
"fmt"
"os"
)
func main() {
// 指定文件或文件夹的路径
path := "example" // "test.txt"
// 判断文件或文件夹是否存在
fileInfo, err := os.Stat(path)
if err == nil {
if fileInfo.IsDir() {
fmt.Printf("文件夹 %s 存在\n", path)
} else {
fmt.Printf("文件 %s 存在\n", path)
}
} else if os.IsNotExist(err) {
fmt.Printf("文件或文件夹 %s 不存在\n", path)
} else {
fmt.Printf("获取文件或文件夹 %s 信息时发生错误:%v\n", path, err)
}
}
os删除文件或文件夹
package main
import (
"fmt"
"os"
)
func main() {
var err error
// 删除指定的文件夹或文件(文件夹必须为空)
err = os.Remove("example/a/b")
if err != nil {
fmt.Println(err) // remove example/a/b: directory not empty
} else {
fmt.Println("Success!")
}
}
package main
import (
"fmt"
"os"
)
func main() {
var err error
// 删除指定的文件夹及其所有子文件夹和文件
err = os.RemoveAll("example/a/b")
if err != nil {
fmt.Println(err)
} else {
fmt.Println("Success!")
}
}
os文件文件夹重命名
package main
import (
"fmt"
"os"
)
func main() {
err := os.Rename("example/a", "example/b") //err := os.Rename("test.txt", "text.log")
if err != nil {
fmt.Println(err) // remove example/a/b: directory not empty
} else {
fmt.Println("Success!")
}
}
os环境变量
package main
import (
"fmt"
"os"
)
func main() {
// 获取所有的环境变量
envs := os.Environ()
for i, env := range envs {
fmt.Println(i+1, env)
}
// 获取指定环境变量key的值
home := os.Getenv("HOME")
fmt.Println(home)
// 获取指定环境变量key的值和是否存在的状态
shell, isExist := os.LookupEnv("SHELL")
fmt.Println(shell, isExist)
//os.Setenv(key, value string) error:设置指定环境变量key的值为value。
//os.Unsetenv(key string) error:删除指定环境变量key。
//os.Clearenv():清空所有的环境变量。
//os.ExpandEnv(s string) string:将字符串s中的${var}或$var替换为相应的环境变量的值。
}
io
io.Copy
package main
import (
"io"
"os"
)
func main() {
i, _ := os.Open("input.txt")
defer i.Close()
o, _ := os.Create("output.txt")
defer o.Close()
io.Copy(o, i)
}
ioutil
package main
import (
"fmt"
"io/ioutil"
)
func main() {
text, _ := ioutil.ReadFile("input.txt")
fmt.Printf("%s", text)
}
bufio
用于提供带缓冲的I/O操作。它可以在读写文件、网络连接、以及其他I/O操作时提高性能,减少系统调用的次数
log
记录程序运行时的一些信息,如错误信息、警告信息、调试信息等
json
数据转换为JSON格式的数据
package main
import (
"encoding/json"
"fmt"
)
type UserInfo struct {
Name string `json:"name"`
Age int `json:"age"`
Height float64 `json:"height"`
List []any `json:"list"`
}
func main() {
userInfo := UserInfo{
Name: "Lee", Age: 18, Height: 171.123, List: []any{
1, "Hello", false}}
jsonBytes, err := json.Marshal(userInfo)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(jsonBytes)) // {"name":"Lee","age":18,"height":171.123,"list":[1,"Hello",false]}
}
解析json
package main
import (
"encoding/json"
"fmt"
)
type UserInfo struct {
Name string `json:"name"`
Age int `json:"age"`
Height float64 `json:"height"`
List []any `json:"list"`
}
func main() {
jsonStr := `{"name":"Lee","age":18,"height":171.123,"list":[1,"Hello",false]}`
var userInfo UserInfo
err := json.Unmarshal([]byte(jsonStr), &userInfo)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(userInfo) // {Lee 18 171.123 [1 Hello false]}
}
xml
数据转换为xml格式的数据
package main
import (
"encoding/xml"
"fmt"
)
type UserInfo struct {
Name string `xml:"name"`
Age int `xml:"age"`
Height float64 `xml:"height"`
List []any `xml:"list>item"`
}
func main() {
userInfo := UserInfo{
Name: "Lee", Age: 18, Height: 171.123, List: []any{
1, "Hello", false}}
xmlBytes, err := xml.Marshal(userInfo)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(xmlBytes)) // <UserInfo><name>Lee</name><age>18</age><height>171.123</height><list><item>1</item><item>Hello</item><item>false</item></list></UserInfo>
}
解析xml
必须修改
any
为string
类型
package main
import (
"encoding/xml"
"fmt"
)
type UserInfo struct {
Name string `xml:"name"`
Age int `xml:"age"`
Height float64 `xml:"height"`
List []any `xml:"list>item"`
}
type Info struct {
UserInfo
List []string `xml:"list>item"`
}
func main() {
xmlStr := `<UserInfo><name>Lee</name><age>18</age><height>171.123</height><list><item>1</item><item>Hello</item><item>false</item></list></UserInfo>`
var userInfo Info
err := xml.Unmarshal([]byte(xmlStr), &userInfo)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(userInfo) // {
{Lee 18 171.123 []} [1 Hello false]}
}