go常用utils(纯代码),建议收藏

go常用utils(纯代码),建议收藏

文件相关

//获取当前目录下所有文件
func GetFileList(path string) []string {
	var fileList []string
	files, _ := ioutil.ReadDir(path)
	for _, f := range files {
		if !f.IsDir() {
			fileList = append(fileList, f.Name())
		}
	}
	return fileList
}
// 判断所给路径文件/文件夹是否存在
func filexists(path string) bool {
	_, err := os.Stat(path) //os.Stat获取文件信息
	if err != nil {
		return os.IsExist(err)
	}
	return true
}
//复制文件
func CopyFile(src, dst string) error {
	s, err := os.ReadFile(src)
	if err != nil {
		return err
	}
	err = os.WriteFile(dst, s, 0o600)
	if err != nil {
		return err
	}
	return nil
}
import jsoniter "github.com/json-iterator/go"
//保存成JSON
func SaveJson(data interface{}, filename string) error {
	writer, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o600)
	if err != nil {
		fmt.Println(err)
	}
	encoder := jsoniter.NewEncoder(writer)
	encoder.SetIndent("  ", "  ")
	encoder.SetEscapeHTML(false)
	return encoder.Encode(data)
}

初始化数据库

package main

import (
	"fmt"
	"time"

	_ "github.com/go-sql-driver/mysql"
	_ "github.com/logoove/sqlite"
	"github.com/jinzhu/gorm"
)
var (
	DB *gorm.DB
)
// InitMysql 初始化MySQL
func InitMysql(dataSource string) {
	fmt.Println("init mysql")
	var err error
	DB, err = gorm.Open("mysql", dataSource)
	if err != nil {
		panic(err)
	}
	//允许单表创建
	DB.SingularTable(true)
	//关闭sql语句日志
	DB.LogMode(false)
	DB.DB().SetMaxIdleConns(10)
	DB.DB().SetMaxOpenConns(100)
	// SetConnMaxLifetiment 设置连接的最大可复用时间。
	DB.DB().SetConnMaxLifetime(time.Hour)
	//数据库迁移
	DB.AutoMigrate(&Student{}, &Teacher{})
	fmt.Println("init mysql ok")
}
// InitSqlite3初始化sqlite3
func InitSqlite3(dataSource string) {
	fmt.Println("init sqlite3")
	var err error
	DB, err = gorm.Open("sqlite3", dataSource)
	if err != nil {
		panic(err)
	}
	//允许单表创建
	DB.SingularTable(true)
	//关闭sql语句日志
	DB.LogMode(false)
	DB.DB().SetMaxIdleConns(10)
	DB.DB().SetMaxOpenConns(100)
	// SetConnMaxLifetiment 设置连接的最大可复用时间。
	DB.DB().SetConnMaxLifetime(time.Hour)
	//数据库迁移
	DB.AutoMigrate(&Student{}, &Teacher{})
	fmt.Println("init sqlite3 ok")
}

恢复panic

// RecoverPanic 恢复panic
func RecoverPanic() {
	err := recover()
	if err != nil {
		logger.Log.ZapLog.DPanic("panic", zap.Any("panic", err), zap.String("stack", GetStackInfo()))
	}
}

// GetStackInfo 获取Panic堆栈信息
func GetStackInfo() string {
	buf := make([]byte, 4096)
	n := runtime.Stack(buf, false)
	return fmt.Sprintf("%s", buf[:n])
}

JWT

/*
 * @Description:
 * @Version: 1.0
 * @Autor: solid
 * @Date: 2022-02-23 15:40:14
 * @LastEditors: solid
 * @LastEditTime: 2022-02-23 15:40:47
 */
package utils

import (
	"errors"
	"vpnserver/config"

	"github.com/golang-jwt/jwt/v4"
)
//设置JWT
func SetJwtData(data map[string]interface{}, expiresAt int64) (string, error) {
	jwtData := jwt.MapClaims{"exp": expiresAt}
	for k, v := range data {
		jwtData[k] = v
	}
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwtData)

	// Sign and get the complete encoded token as a string using the secret
	tokenString, err := token.SignedString([]byte(config.Config.AdminConfig.JwtSecret))
	return tokenString, err
}

//获取JWT
func GetJwtData(jwtToken string) (map[string]interface{}, error) {
	token, err := jwt.Parse(jwtToken, func(token *jwt.Token) (interface{}, error) {
		// since we only use the one private key to sign the tokens,
		// we also only use its public counter part to verify
		return []byte(config.Config.AdminConfig.JwtSecret), nil
	})

	if err != nil || !token.Valid {
		return nil, err
	}

	claims, ok := token.Claims.(jwt.MapClaims)
	if !ok {
		return nil, errors.New("data is parse err")
	}

	return claims, nil
}

发送GET/POST请求

var tr = &http.Transport{
	TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
	MaxConnsPerHost: 8,
}

// 请求Client
var client = &http.Client{
	Transport: tr,
}
//发送请求
func SendMessageServer(remoteURL string, data []byte) []byte {
	var req *http.Request
	var err error
	if data == nil {
		req, err = http.NewRequest("GET", remoteURL, nil)
	} else {
		req, err = http.NewRequest("POST", remoteURL, bytes.NewBuffer(data))
	}
	if err != nil {
		fmt.Println("http.GET error: ", err.Error())
		return nil
	}
	resp, err := client.Do(req)
	if err != nil {
		fmt.Println("http.GET error: ", err.Error())
		return nil
	}
	if resp != nil {
		defer resp.Body.Close()
	}
	body, _ := ioutil.ReadAll(resp.Body)
	return body
}

获取u盘序列号

package main

import (
	"fmt"

	"github.com/yusufpapurcu/wmi"
)

type Win32_DiskDrive struct {
	SerialNumber string
}

//获取指定u盘路径
func GETUSBSerialNumber() []string {
	var drives []Win32_DiskDrive
	q := wmi.CreateQuery(&drives, "WHERE InterfaceType='USB'")
	err := wmi.Query(q, &drives)
	if err != nil {
		return []string{}
	}
	var array []string

	for _, drive := range drives {
		array = append(array, drive.SerialNumber)
	}
	return array
}
func main() {
	fmt.Println(GETUSBSerialNumber())
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值