前言
在 上一章 介绍了GoLang的基础语法,本章节一起来了解下资源包的引入与使用
一、引入
、单条
import "package"
、多条
import (
"package1"
"package2"
"packageN"
)
二、扩展包
内置
,fmt
作用:用于字符的格式化,打印操作
,encoding/json
作用:json 序列化操作
attention:
,json.unMarshal() ,当数据源是map且value类型是interface{}时,数据源value类型会发生变化,如下:
Bool 对应JSON布尔类型
float64 对应JSON数字类型
string 对应JSON字符串类型
[]interface{} 对应JSON数组
map[string]interface{} 对应JSON对象
nil 对应JSON的null
为解决 数字类型转换后为float64、 数字值精确度问题可使用如下方法,int类型最终结果为json.number
jsonStr := ""
infoMap := make(map[string]interface{})
// strings.NewReader() -- 创建一个[]bytes的数据
dec := json.NewDecoder(strings.NewReader(jsonStr))
dec.UseNumber()
dec.Decode(&infoMap)
,slice | map change json
jsonstring,err := json.Marshal(slice | map | array)
,json change slice | map | array
changeRes := make(map[string]interface{})
err := json.Unmarshal(strByte, &changeRes)
paramA:The string of operator
paramB:change res
,string change []byte
byteStr := []byte(str)
,json.number convert int64 | float64 | string
jsonNumber := 1
jsonNumber.(json.number).int64() | .float64() | string()
,time
作用:获取日期类扩展
,get current date
time.Now()
,get current timestamp
time.Now().unix()
,timestamp change date
timestamp must int64
the format("2006-01-02 15:04:05") is standard and cannot be replaced (该格式是标准的不能被替换)
time.unix(timestamp, 0).format("2006-01-02 15:04:05")
,date change timestamp
err 可忽略用_替代
times, err := time.ParseinLocation('2006-01-02 15:04:25', date)
timestamp := times.Unix()
☆,time.Duration(Num int)
计算时间差值,常用于时间计算,例如设置缓存时间(redis 字符时间)
,strings
作用:字符串函数
,string replace
strings.replace(str, old, new, num)
str -- 字符
old -- 被替换的字符
new -- 替换后的字符
num -- 替换个数(-1 <=> 全部)
,str tolower
strings.ToLower()
,clear special str in strings
strings.TrimLeft(strings, special str)
return string
,check strings is have specify str
strings.HasPrefix(strings, specify str)
return bool
,del specify str in strings prefix
strings.TrimPrefix(strings, specify str)
,str split
strings.split(strings, separationstr)
return slice
,os
作用:用于操作系统函数
,exec quit (执行中断)
os.Exit()
,create mkdir | file
t,err := os.Create(path)
t -- 操作成功返回文件对象可操作的IO
,stat(path)
获取文件信息
finfo, err := os.stat(path)
,IsNotExist(err)
异常信息中是否包含文件不存在的信息,
return
是 -> true || 否 -> false
os.IsNotExist(err)
,Getwd()
获取当前工作目录的根路径
path, err := os.Getwd()
,path
对斜杠分隔的路径进行相关操作
,path.ext()
返回文件的扩展名(带.)
,crypto/md5
md5字符加密
,md5.new()
一个新的使用MD5校验的hash.Hash接口
eg:
md5 字符加密
h := md5.new()
h.Write([]byte(str))
hex.EncodeToString(h.Sum(nil))
,encoding/hex
作用:hex包实现了16进制字符表示的编解码
,hex.EncodeToString([]byte)
将数据src编码为字符串s。
,encoding/csv
作用:csv导入导出方法
attention:
当数据中有 ,(英文逗号) 不会隔开单元格
,knowledge
,csv.NewWriter(f)
f -- 文件I/O
返回一个写入w的 *writer
,csv.WriterAll(data)
data -- 切片
data := [][]string{
{"1", "aaa"},
{"2", "aba"},
{"3", "aca"},
}
使用write 方法向w写入多条记录,并在最后调用flush方法清空缓存
,e g
// 导出csv
var savePath string = "D:/test.csv"
f, err := os.Create(savePath)
if err != nil {
fmt.Println("aa")
}
defer f.Close()
// 设置字符格式(utf-8),防止乱码
f.WriteString("\xEF\xBB\xBF")
w := csv.NewWriter(f)
data := [][]string{
{"1", "小明", ",", "cc"},
{"1", "小猪", ",", "dd"},
{"1", "小狗", "aa", "bb"},
}
w.WriteAll(data)
// 导入
,IO
,file assignment(文件赋值)
将src的内容赋值到dist
io.copy(dist, src)
dist -- 文件IO对象
src -- 文件资源
,ioutil
,create tmp file
ioutil.TempFile("dir", "prefix")
param
dir -- tmp file save dir (if dir is null default os.TempDir())
临时文件保存的地址、如果不填默认为 os.TempDir() 返回的地址
prefix -- file prefix
return
f *os.File, err error
,net/http
作用:http请求相关
,create router
mux := http.NewServeMux();
,register handle func
// if you do not use default router so http update mux(create router)
// 如果不使用默认路由器那么http更新为创建的路由器
http.HandleFunc("request_path", _handleFunc)
// handlefunc must have two param (注册的函数必须有如下2个)
func _handleFunc(response *http.Response1Write, request *http.Request){
}
,listen tcp addr and call server method connect (监听tcp地址并且调用server方法连接)
// paramA -- port
// paramB -- nil (default router) || create router 【默认路由器 || 创建的路由器】,
http.ListenAndServe(":port", nil)
,request *http.request about
,get url path (does not contain domain)
request.URL
,get header
request.header
,get host
request.host
, get remoteaddr
remoteAddr := request.RemoteAddr
,get get-request all param(type = map)
queryParam := request.URL.Query()
,get get-request only param
value := request.URL.Query().Get("key")
,get post-request param
value := request.PostFormValue("key")
,get file resource
files, fileInfo, err := request.FormFile("file")
files --
fileinfo -- file info
err -- error
,get filename
filename = fileinfo.Filename
size = fileinfo.Size
,respons e*http.ResponseWrite about
,set header
response,Header(),Set("key", "value")
,write content
response,write(content)
,reflect
作用:运行字符反射、类型获取
// 自定义结构体
type MyStruct struct {
Name string
Age int
}
var s Mystrict = MyStruct{Name: "Alice", Age: 30}
// 获取结构体中的变量
var tagVal = reflect.Typeof(s)
// 获取结构体中变量对应的值
var Val = reflect.Valueof(s)
// 获取结构体中某一个变量的类型
var types = tagVal.Field(index).Type
// 获取结构体中某一个val的值【可能在末尾需要加.interface】
var vals = Val.Field(index)
// 结构体类型
var structType = reflect.struct
github–扩展
,Gin - 框架
github.com/gin-gonic/gin
,detail
, c *gin.Context
,c.Abort()
中间件方法中中断执行
,c.Next()
程序继续执行
,c.Recover()
常用于中间件扩展,用于捕捉 panic() 抛出的信息
,c.Request.URL.Path
get have not domain request path (获取不包含域名的请求路径)
,c.Request.URL.Query()
get query param
,c.Request.Request.PostForm
get body-post param
attention:
you must declare c.Request.ParseForm() before useing
,gorm (数据库操作)
go get -u gorm.io/gorm
,http-router
github.com/julienschmidt/httprouter
,mysql
github.com/go-sql-driver/mysql
,go-redis
github.com/redis/go-redis/v9
,detail
,connection
addr := fmt.Sprintf("%s:%d", ip, port)
rdb := redis.Newclient(&redis.Options{
Addr:addr,
Password:password,
DB:0
})
,set expire string
// attention: when setting an expire time, time must be useed time.Duration conversion
expireUnixTime := time.Duration(time) * time.Second
_, err := rdb.SetEx(ctx, key, string, expireUnixTime)
,get string
val, err := rdb.Set(ctx, key).Result()
,gocsv
github.com/gocarina/gocsv
,excelize/v2
go get github.com/xuri/excelize/v2
,import
// excel import
// read file
f, err := excelize.OpenFile("filename")
if err != nil {
fmt,Println("read file failed")
}
// close file
defer func (){
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
sheetName := "sheet1"
// GET a only sheetCell
cell, err := f.GetCellValue(sheetName)
if err != nil{
fmt.Println(err)
}
fmt.Println(cell)
// GET a sheet all cell
rows, err := f.GetRows(sheetName)
if err != nil{
fmt.Println(err)
}
for index, infoSlice := range rows {
// index -- 下标
// infoSlice -- 切片
}
,export
// excel export
// create new file
f := excelize.NewFile()
// close
defer func (){
if err := f.Close(); err != nil {
return err
}
}
// create a sheet
sheetName = "sheet1"
// index => 创建sheet的下标
index,err := f.NewSheet(sheetName)
// set cells val
// cell_num => 单元格编号
// cell_val => 单元格值
f.SetCellValue(sheetName, "cell_num", "cell_val")
// merge cells(合并单元格)
// start_cell_num => 合并开始的单元格编号
// end_cell_num => 合并结束的单元格编号
f.MergeCell(sheetName, "start_cell_num", "end_cell_num")
// set default sheet
f.SetActiveSheet(index)
// file save
if err := f.SaveAs("save_file_name.xlsx"); err != nil {
fmt.println(err)
}
,github.com/spf13/viper
用于加载自定义的配置文件
go get gopkg.in/yaml.v3
,gopkg.in/yaml.v3
go get github.com/spf13/viper
二、使用步骤
1.引入库
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
Golang系列
Golang 之 环境安装
Golang 之 初识
Golang 之 常见用法