golang快速入门--常用的库

常用的库

标准库

库名功能
bufio带缓冲的 I/O 操作
bytes实现字节操作
container封装堆、列表和环形列表等容器
crypto加密算法
database数据库驱动和接口
debug各种调试文件格式访问及调试功能
encoding常见算法如 JSON、XML、Base64 等
flag命令行解析
fmt格式化操作
goGo语言的词法、语法树、类型等。可通过这个包进行代码信息提取和修改
html转义及模板系统
image常见图形格式的访问及生成
io实现 I/O 原始访问接口及访问封装
math数学库
net网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等
os操作系统平台不依赖平台操作封装
path兼容各操作系统的路径操作实用函数
pluginGo 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值