mirror of https://github.com/ouqiang/gocron
124 lines
2.8 KiB
Go
124 lines
2.8 KiB
Go
// Copyright 2018 ouqiang authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"): you may
|
|
// not use this file except in compliance with the License. You may obtain
|
|
// a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
// License for the specific language governing permissions and limitations
|
|
// under the License.
|
|
|
|
package goutil
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/md5"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"html/template"
|
|
"io"
|
|
"math/rand"
|
|
"net/http"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"runtime"
|
|
"time"
|
|
)
|
|
|
|
// MD5 生成MD5摘要
|
|
func MD5(s string) string {
|
|
m := md5.New()
|
|
m.Write([]byte(s))
|
|
|
|
return hex.EncodeToString(m.Sum(nil))
|
|
}
|
|
|
|
// RandNumber 生成min - max之间的随机数
|
|
func RandNumber(min, max int) int {
|
|
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
|
|
return min + r.Intn(max-min)
|
|
}
|
|
|
|
// PanicToError Panic转换为error
|
|
func PanicToError(f func()) (err error) {
|
|
defer func() {
|
|
if e := recover(); e != nil {
|
|
err = fmt.Errorf("panic: %s", e)
|
|
}
|
|
}()
|
|
f()
|
|
return
|
|
}
|
|
|
|
// PrintAppVersion 打印应用版本
|
|
func PrintAppVersion(appVersion, GitCommit, BuildDate string) {
|
|
versionInfo, err := FormatAppVersion(appVersion, GitCommit, BuildDate)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Println(versionInfo)
|
|
}
|
|
|
|
// FormatAppVersion 格式化应用版本信息
|
|
func FormatAppVersion(appVersion, GitCommit, BuildDate string) (string, error) {
|
|
content := `
|
|
Version: {{.Version}}
|
|
Go Version: {{.GoVersion}}
|
|
Git Commit: {{.GitCommit}}
|
|
Built: {{.BuildDate}}
|
|
OS/ARCH: {{.GOOS}}/{{.GOARCH}}
|
|
`
|
|
tpl, err := template.New("version").Parse(content)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
var buf bytes.Buffer
|
|
err = tpl.Execute(&buf, map[string]string{
|
|
"Version": appVersion,
|
|
"GoVersion": runtime.Version(),
|
|
"GitCommit": GitCommit,
|
|
"BuildDate": BuildDate,
|
|
"GOOS": runtime.GOOS,
|
|
"GOARCH": runtime.GOARCH,
|
|
})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return buf.String(), err
|
|
}
|
|
|
|
// DownloadFile 文件下载
|
|
func DownloadFile(filePath string, rw http.ResponseWriter) error {
|
|
file, err := os.Open(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
filename := path.Base(filePath)
|
|
rw.Header().Set("Content-Type", "application/octet-stream")
|
|
rw.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"`, filename))
|
|
_, err = io.Copy(rw, file)
|
|
|
|
return err
|
|
}
|
|
|
|
// WorkDir 获取程序运行时根目录
|
|
func WorkDir() (string, error) {
|
|
execPath, err := os.Executable()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
wd := filepath.Dir(execPath)
|
|
if filepath.Base(wd) == "bin" {
|
|
wd = filepath.Dir(wd)
|
|
}
|
|
|
|
return wd, nil
|
|
}
|