package utils import ( "encoding/json" "fmt" "log" "math/rand" "net/http" "strconv" "time" ) // 獲取查詢參數(int 類型) func ParamInt(value string, defaultValue int) int { if value == "" { return defaultValue } result, err := strconv.Atoi(value) if err != nil { return defaultValue } return result } // 獲取查詢參數(string 類型) func ParamString(value string, defaultValue string) string { if value == "" { return defaultValue } return value } // 獲取查詢參數(bool 類型) func ParamBool(value string, defaultValue bool) bool { if value == "" { return defaultValue } result, err := strconv.ParseBool(value) if err != nil { return defaultValue } return result } func ToJSON(object interface{}) []byte { json, err := json.MarshalIndent(object, "", " ") if err != nil { log.Println(err) return []byte{} } return json } func LogComponent(startTime int64, r *http.Request) { ms := (time.Now().UnixNano() - startTime) / 1000000 color := "\033[1;32m%d\033[0m" if ms > 800 { color = "\033[1;31m%dms\033[0m" // 紅色加重 } else if ms > 1000 { color = "\033[1;33m%dms\033[0m" // 黃色加重 } else if ms > 100 { color = "\033[1;32m%dms\033[0m" // 綠色加重 } else if ms > 10 { color = "\033[1;34m%dms\033[0m" // 藍色加重 } else if ms > 1 { color = "\033[1;35m%dms\033[0m" // 紫色加重 } else { color = "\033[1;36m%dms\033[0m" // 黑色加重 } endTime := fmt.Sprintf(color, ms) method := fmt.Sprintf("\033[1;32m%s\033[0m", r.Method) // 綠色加重 url := fmt.Sprintf("\033[1;34m%s\033[0m", r.URL) // 藍色加重 log.Println(method, url, endTime) } // 隨機字串 func RandomString(length int) string { const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" b := make([]byte, length) for i := range b { b[i] = charset[RandomInt(0, len(charset)-1)] } return string(b) } // 隨機數字 func RandomInt(min, max int) int { return min + rand.Intn(max-min+1) }