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)
if err != nil {
return os.IsExist(err)
}
return true
}
初始化数据库
package main
import (
"fmt"
"time"
_ "github.com/go-sql-driver/mysql"
_ "github.com/logoove/sqlite"
"github.com/jinzhu/gorm"
)
var (
DB *gorm.DB
)
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)
DB.LogMode(false)
DB.DB().SetMaxIdleConns(10)
DB.DB().SetMaxOpenConns(100)
DB.DB().SetConnMaxLifetime(time.Hour)
DB.AutoMigrate(&Student{}, &Teacher{})
fmt.Println("init mysql ok")
}
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)
DB.LogMode(false)
DB.DB().SetMaxIdleConns(10)
DB.DB().SetMaxOpenConns(100)
DB.DB().SetConnMaxLifetime(time.Hour)
DB.AutoMigrate(&Student{}, &Teacher{})
fmt.Println("init sqlite3 ok")
}
恢复panic
func RecoverPanic() {
err := recover()
if err != nil {
logger.Log.ZapLog.DPanic("panic", zap.Any("panic", err), zap.String("stack", GetStackInfo()))
}
}
func GetStackInfo() string {
buf := make([]byte, 4096)
n := runtime.Stack(buf, false)
return fmt.Sprintf("%s", buf[:n])
}
JWT
package utils
import (
"errors"
"vpnserver/config"
"github.com/golang-jwt/jwt/v4"
)
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)
tokenString, err := token.SignedString([]byte(config.Config.AdminConfig.JwtSecret))
return tokenString, err
}
func GetJwtData(jwtToken string) (map[string]interface{}, error) {
token, err := jwt.Parse(jwtToken, func(token *jwt.Token) (interface{}, error) {
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
}