一、Go读取文件内容
在Go语言中,使用ioutil包中的ReadFile()函数可以快速读取整个文件的内容。该函数返回的是一个[]byte类型的文件内容,需要将其转换成string类型。
package main
import (
"fmt"
"io/ioutil"
)
func main() {
data, err := ioutil.ReadFile("test.txt")
if err != nil {
panic(err)
}
content := string(data)
fmt.Println(content)
}
其中,ReadFile()函数的参数为文件名,文件名可以是绝对路径或相对路径。
二、Go读取二进制文件
读取二进制文件时,需要使用os包中的Open()函数打开文件,并使用ioutil包中的ReadAll()函数读取文件内容。
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
file, err := os.Open("test.bin")
if err != nil {
panic(err)
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
panic(err)
}
fmt.Println(data)
}
三、Go读取文件内容转为map
使用bufio包可以按行读取文件内容并将其转换成map类型,示例代码如下:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
data := make(map[string]string)
for scanner.Scan() {
line := scanner.Text()
parts := strings.Split(line, "=")
key := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
data[key] = value
}
fmt.Println(data)
}
四、Go读取ini文件
读取ini文件通常使用go-ini包,示例代码如下:
package main
import (
"fmt"
"github.com/go-ini/ini"
)
func main() {
cfg, err := ini.Load("test.ini")
if err != nil {
panic(err)
}
value := cfg.Section("section_name").Key("key_name").String()
fmt.Println(value)
}
五、Go读取csv文件
读取csv文件通常使用encoding/csv包,示例代码如下:
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
file, err := os.Open("test.csv")
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
data, err := reader.ReadAll()
if err != nil {
panic(err)
}
fmt.Println(data)
}
六、Go按行读取文件
按行读取文件时可以使用bufio包,示例代码如下:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
panic(err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
fmt.Println(line)
}
}
七、Go读取json文件
读取json文件时,需要使用encoding/json包,示例代码如下:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
file, err := os.Open("test.json")
if err != nil {
panic(err)
}
defer file.Close()
var people []Person
decoder := json.NewDecoder(file)
err = decoder.Decode(&people)
if err != nil {
panic(err)
}
fmt.Println(people)
}
八、Go读取文件夹所有文件
使用filepath包中的Walk()函数可以递归地读取指定文件夹下的所有文件,示例代码如下:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
files := make([]string, 0)
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.Mode().IsRegular() {
files = append(files, path)
}
return nil
})
if err != nil {
panic(err)
}
fmt.Println(files)
}
九、读取atom文件
读取atom文件时需要使用encoding/xml包,示例代码如下:
package main
import (
"encoding/xml"
"fmt"
"os"
)
type Feed struct {
XMLName xml.Name `xml:"feed"`
Title string `xml:"title"`
Link []Link `xml:"link"`
Entry []Entry `xml:"entry"`
}
type Link struct {
Rel string `xml:"rel,attr"`
Href string `xml:"href,attr"`
}
type Entry struct {
Title string `xml:"title"`
Link []Link `xml:"link"`
Published string `xml:"published"`
Updated string `xml:"updated"`
Summary Summary `xml:"summary"`
Content Content `xml:"content"`
Author Author `xml:"author"`
Category []Category `xml:"category"`
Id string `xml:"id"`
}
type Summary struct {
Type string `xml:"type,attr"`
Text string `xml:",chardata"`
}
type Content struct {
Type string `xml:"type,attr"`
Text string `xml:",chardata"`
}
type Author struct {
Name string `xml:"name"`
Email string `xml:"email"`
}
type Category struct {
Term string `xml:"term,attr"`
}
func main() {
file, err := os.Open("test.atom")
if err != nil {
panic(err)
}
defer file.Close()
var feed Feed
decoder := xml.NewDecoder(file)
err = decoder.Decode(&feed)
if err != nil {
panic(err)
}
fmt.Println(feed)
}
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/150511.html
微信扫一扫
支付宝扫一扫