106 lines
2.4 KiB
Go
106 lines
2.4 KiB
Go
|
package base
|
|||
|
|
|||
|
import (
|
|||
|
// "bytes"
|
|||
|
"encoding/json"
|
|||
|
// "errors"
|
|||
|
"fmt"
|
|||
|
"log"
|
|||
|
"math/rand"
|
|||
|
|
|||
|
// "mime/multipart"
|
|||
|
"net/http"
|
|||
|
"strings"
|
|||
|
"time"
|
|||
|
|
|||
|
"github.com/google/uuid"
|
|||
|
)
|
|||
|
|
|||
|
var r *rand.Rand = rand.New(rand.NewSource(time.Now().Unix()))
|
|||
|
|
|||
|
// IsBlankString 判断是否为空的ID,ID不能都是空白.
|
|||
|
func IsBlankString(str string) bool {
|
|||
|
return len(strings.TrimSpace(str)) == 0
|
|||
|
}
|
|||
|
|
|||
|
// IsEmptyString 判断是否为空的字符串.
|
|||
|
func IsEmptyString(str string) bool {
|
|||
|
return len(str) == 0
|
|||
|
}
|
|||
|
|
|||
|
// IsValidUUID
|
|||
|
func IsValidUUID(u string) bool {
|
|||
|
_, err := uuid.Parse(u)
|
|||
|
return err == nil
|
|||
|
}
|
|||
|
|
|||
|
// SetResponseHeader 一个快捷设置status code 和content type的方法
|
|||
|
func SetResponseHeader(w http.ResponseWriter, statusCode int, contentType string) {
|
|||
|
w.Header().Set("Content-Type", contentType)
|
|||
|
w.WriteHeader(statusCode)
|
|||
|
}
|
|||
|
|
|||
|
// WriteErrorResponse 一个快捷设置包含错误body的response
|
|||
|
func WriteErrorResponse(w http.ResponseWriter, statusCode int, contentType string, a interface{}) {
|
|||
|
SetResponseHeader(w, statusCode, contentType)
|
|||
|
switch vv := a.(type) {
|
|||
|
case error:
|
|||
|
{
|
|||
|
fmt.Fprintf(w, vv.Error())
|
|||
|
}
|
|||
|
case map[string][]error:
|
|||
|
{
|
|||
|
jsonBytes, err := json.Marshal(vv)
|
|||
|
if nil != err {
|
|||
|
log.Println(err)
|
|||
|
fmt.Fprintf(w, err.Error())
|
|||
|
}
|
|||
|
var str = string(jsonBytes)
|
|||
|
fmt.Fprintf(w, str)
|
|||
|
}
|
|||
|
case []error:
|
|||
|
{
|
|||
|
jsonBytes, err := json.Marshal(vv)
|
|||
|
if nil != err {
|
|||
|
log.Println(err)
|
|||
|
fmt.Fprintf(w, err.Error())
|
|||
|
}
|
|||
|
var str = string(jsonBytes)
|
|||
|
fmt.Fprintf(w, str)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// trimURIPrefix 将一个uri拆分为若干node,根据ndoe取得一些动态参数。
|
|||
|
func TrimURIPrefix(uri string, stopTag string) []string {
|
|||
|
params := strings.Split(strings.TrimPrefix(strings.TrimSuffix(uri, "/"), "/"), "/")
|
|||
|
last := len(params) - 1
|
|||
|
for i := last; i >= 0; i-- {
|
|||
|
if params[i] == stopTag {
|
|||
|
return params[i+1:]
|
|||
|
}
|
|||
|
}
|
|||
|
return params
|
|||
|
}
|
|||
|
|
|||
|
//outputJSON - output json for http response
|
|||
|
func outputJSON(w http.ResponseWriter, data interface{}) {
|
|||
|
w.Header().Set("Content-Type", "application/json;charset=utf-8")
|
|||
|
enc := json.NewEncoder(w)
|
|||
|
if err := enc.Encode(data); err != nil {
|
|||
|
log.Println("[ERR] - [outputJSON] JSON encode error:", err)
|
|||
|
http.Error(w, "500", http.StatusInternalServerError)
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// RandString 生成随机字符串
|
|||
|
func RandString(len int) string {
|
|||
|
bytes := make([]byte, len)
|
|||
|
for i := 0; i < len; i++ {
|
|||
|
b := r.Intn(26) + 65
|
|||
|
bytes[i] = byte(b)
|
|||
|
}
|
|||
|
return string(bytes)
|
|||
|
}
|