一、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) }