包
- 包的路径从GOPATH/src后面的路径开始写起,路径分隔符用/
- 想被别的包包调用,标识符是字母都要大写
- 导入包时可以指定别名
- 导入包但是不想使用包内的标识符,需要使用匿名导入
- 每个包导入的时候会自动执行一个名为init()的函数,它没有参数也没有返回值,并且不能手动调用
文件操作
按行读取
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("读取文件出错", err)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
if err == io.EOF{
fmt.Println("读取完毕")
break
}
if err != nil {
fmt.Println("读取文件出错", err)
return
}
fmt.Print(line)
}
}
读取全部内容
package main
import (
"fmt"
"io/ioutil"
"reflect"
"strings"
)
func main() {
content, err := ioutil.ReadFile("test.txt")
if err != nil {
fmt.Println("读取文件出错", err)
return
}
fmt.Println(reflect.TypeOf(content))
res := string(content)
s := strings.Split(res,"\n")
for _,v := range s{
fmt.Println(v)
}
}
先写入内存,再flush到文件
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("new.txt", os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
fmt.Println("打开文件出错", err)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
writer.WriteString("写入字符串")
writer.Flush()
}
直接写入文件
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("new.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
defer file.Close()
str := "hello 沙河"
file.Write([]byte(str))
file.WriteString("hello 小王子")
}