package q5 import ( "os" "net" "fmt" "net/http" "time" "io/ioutil" "reflect" ) func Debug() bool { return _optDebug } func GetTimeZone() int64 { return _optTimeZone } func GetDaySeconds(seconds int64) int64 { return GetDaySecondsEx(seconds, GetTimeZone()) } func GetDaySecondsEx(seconds int64, timeZone int64) int64 { return ((seconds + timeZone * 3600)/3600/24 + 1) * 3600 * 24 - 3600 * timeZone; } func GetTickCount() int64 { return time.Now().UnixNano() / 1e6 } func MkInt64(lo32 int32, hi32 int32) int64 { return int64(lo32) + (int64(hi32) << 32) } func Request(r *http.Request, name string) *XValue { if r.Form == nil { r.ParseForm() } if vs, ok := r.Form[name]; ok { if len(vs) > 0 { return NewXString(vs[0]) } } return NewXString("") } func Response(w* http.ResponseWriter, data string) { (*w).Write([]byte(data)) } func ResponseOk(w* http.ResponseWriter) { (*w).Write([]byte(`{"errcode":0, "errmsg":""}`)) } func ResponseInt32Ok(w* http.ResponseWriter, key string, val int32) { (*w).Write([]byte(fmt.Sprintf(`{"errcode":0, "errmsg":"", "%s":%d}`, key, val))) } func GetPostBody(r *http.Request) *XValue { body, err := ioutil.ReadAll(r.Body) if err != nil { return NewXString("") } v := NewXString(string(body)) return v } func GetRequestRemoteAddr(r *http.Request) string { remoteAddr := r.RemoteAddr if ip := r.Header.Get("X-Real-Ip"); ip != "" { remoteAddr = ip } else if ip = r.Header.Get("X-Forwarded-For"); ip != "" { remoteAddr = ip } else { remoteAddr, _, _ = net.SplitHostPort(remoteAddr) } if remoteAddr == "::1" { remoteAddr = "127.0.0.1" } return remoteAddr } func ForceCreateDir(dir string) bool { os.MkdirAll(dir, os.ModePerm) return true } func TraverseArray(arrayPtr interface{}, callback func(data interface{})) { array := reflect.ValueOf(arrayPtr).Elem() for i := 0; i < array.Len(); i++ { val := array.Index(i).Addr().Interface() callback(val) } } func IsNumberType(v interface{}) bool { switch reflect.TypeOf(v).Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64: return true default: return false } } func FormatUnixDateTime(sec int64) string { strTime := time.Unix(sec, 0).Format("2006-01-02 15:04:05") return strTime }