常用的库
标准库
| 库名 | 功能 |
|---|---|
| bufio | 带缓冲的 I/O 操作 |
| bytes | 实现字节操作 |
| container | 封装堆、列表和环形列表等容器 |
| crypto | 加密算法 |
| database | 数据库驱动和接口 |
| debug | 各种调试文件格式访问及调试功能 |
| encoding | 常见算法如 JSON、XML、Base64 等 |
| flag | 命令行解析 |
| fmt | 格式化操作 |
| go | Go语言的词法、语法树、类型等。可通过这个包进行代码信息提取和修改 |
| html | 转义及模板系统 |
| image | 常见图形格式的访问及生成 |
| io | 实现 I/O 原始访问接口及访问封装 |
| math | 数学库 |
| net | 网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等 |
| os | 操作系统平台不依赖平台操作封装 |
| path | 兼容各操作系统的路径操作实用函数 |
| plugin | Go 1.7 加入的插件系统。支持将代码编译为插件,按需加载 |
| reflect | 语言反射支持。可以动态获得代码中的类型信息,获取和修改变量的值 |
| regexp | 正则表达式封装 |
| runtime | 运行时接口 |
| sort | 排序接口 |
| strings | 字符串转换、解析及实用函数 |
| time | 时间接口 |
| text | 文本模板及 Token 词法器 |
文件读写库
- 库
io/ioutil
os
bufio
io
- 实例1-读
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
"strings"
)
func read_line_content() {
// 一行一行的读取,针对大文件,bufio
filename := "./base/test19.go"
file, err := os.OpenFile(filename, os.O_RDONLY, 0666)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer file.Close()
reader := bufio.NewReader(file)
for true {
line, _, err := reader.ReadLine()
if err == io.EOF {
break
} else if len(line) == 0 {
fmt.Println("啥都没有")
continue
} else if strings.TrimSpace(string(line)) == "" {
fmt.Println("多余空白行")
continue
}
fmt.Println(string(line))
}
}
func read_all_content() {
// 使用ioutil读取文件全部内容
filename := "./base/test19.go" // 注意这里的相对路径要以GOPATH为跟路径
content, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Printf("错误 %s\n", err)
} else {
fmt.Println(string(content))
}
}
func read_all_content2() {
// 使用os,ioutil读取文件全部内容
filename := "./base/test19.go"
if file, err := os.Open(filename); err == nil {
defer file.Close()
if content, err := ioutil.ReadAll(file); err == nil {
fmt.Println(string(content))
} else {
fmt.Println(err)
}
} else {
fmt.Println(err)
}
}
func main() {
read_line_content()
fmt.Println("-------------------------")
read_all_content()
fmt.Println("-------------------------")
read_all_content2()
}
- 实例2-写
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
func os_write_file() {
//O_RDONLY:只读模式打开文件;
//O_WRONLY:只写模式打开文件;
//O_RDWR:读写模式打开文件;
//O_APPEND:写操作时将数据附加到文件尾部(追加);
//O_CREATE:如果不存在将创建一个新文件;
//O_EXCL:和 O_CREATE 配合使用,文件必须不存在,否则返回一个错误;
//O_SYNC:当进行一系列写操作时,每次都要等待上次的 I/O 操作完成再进行;
//O_TRUNC:如果可能,在打开时清空文件
// 使用os写文件
filename := "./base/requirments.txt"
file, err := os.OpenFile(filename, os.O_CREATE, 0777)
defer file.Close()
if err == nil {
file.WriteString("lxml\n")
file.WriteString("requests\n")
} else {
fmt.Println(err)
}
}
func ioutil_write_file() {
// ioutil写入文件
filename := "./base/requirments.txt"
var contents = []string{"pymysql", "redis"}
var datas []byte
for _, content := range contents {
data := []byte(content)
_n := []byte("\n")
if datas != nil {
datas = append(datas, _n...)
}
datas = append(datas, data...)
}
err := ioutil.WriteFile(filename, datas, 0666)
if err != nil {
fmt.Println(err)
}
}
func io_write_file() {
// 通过io库写数据到文件
filename := "./base/requirments.txt"
file, err := os.OpenFile(filename, os.O_CREATE, 0777)
defer file.Close()
if err == nil {
io.WriteString(file, "spider\n")
io.WriteString(file, "django\n")
} else {
fmt.Println(err)
}
}
func bufio_write_file() {
// 通过缓存区来写数据
filename := "./base/requirments.txt"
file, err := os.OpenFile(filename, os.O_CREATE, 0777)
defer file.Close()
if err == nil {
buf_writer := bufio.NewWriter(file) // 建立默认缓冲区
buf_writer.WriteString("flask\n")
buf_writer.WriteString("django\n")
fmt.Println(buf_writer.Size())
buf_writer.Flush() // 正式将缓冲区数据写入文件
} else {
fmt.Println(err)
}
}
func main() {
//os_write_file()
//ioutil_write_file()
//io_write_file()
bufio_write_file()
}
网络请求库
- 库
net/http
net/url
- 实例
package main
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"net/url"
)
func http_req(method, url string, body io.Reader) {
// 发起请求并获取响应体
request, err := http.NewRequest(method, url, body)
//request.Header.Set()
if err == nil {
client := http.Client{}
response, err := client.Do(request)
if err == nil {
body, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(string(body))
}
}
}
}
func main() {
query_params := url.Values{}
url_, err := url.Parse("http://www.baidu.com/s")
if err != nil {
return
}
// 构造参数
query_params.Set("wd", "周杰伦")
url_.RawQuery = query_params.Encode()
urlPath := url_.String()
fmt.Println(urlPath)
http_req("GET", urlPath, nil)
}
json转换库
- 库
encoding/json
- 实例
package main
import (
"encoding/json"
"fmt"
)
func jsonstring2interface() {
// ------------------------ 测试array
json_string := `["1", "2"]`
var json_arr []interface{}
json.Unmarshal([]byte(json_string), &json_arr)
fmt.Println(json_arr)
// --------------------- 测试map
json_string = `{"name":"test","age":["1","2"]}`
var json_map map[string]interface{}
json.Unmarshal([]byte(json_string), &json_map)
fmt.Println(json_map)
fmt.Println(json_map["name"])
fmt.Println(json_map["sex"])
}
func interface2jsonstring() {
// -------- 测试数组
var arr = []string{"1", "2"}
fmt.Println(arr)
if arr_string, err := json.Marshal(arr); err != nil {
fmt.Println(err)
} else {
fmt.Println(string(arr_string))
}
// ---------- 测试map
m := make(map[string]interface{})
m["name"] = "test"
m["hobby"] = []string{"ball", "eat"}
fmt.Println(m)
if map_string, err := json.Marshal(m); err != nil {
fmt.Println(err)
} else {
fmt.Println(string(map_string))
}
}
func main() {
//jsonstring2interface()
interface2jsonstring()
}
其他第三方库参考1
版权声明:本文为xzpdxz原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。