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

导读:本篇文章讲解 go常用utils(纯代码),建议收藏,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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请求

//发送请求
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
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/61499.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!