Golang之扩展包的介绍与应用


前言

上一章 介绍了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

使用Viper获取配置信息详解

	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 之 常见用法

Golang-Package

  github.com/xuri/excelize/v2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值