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