Browse Source

string range verify & date time func & tcp server

ls 5 years ago
parent
commit
73018ec904
6 changed files with 195 additions and 0 deletions
  1. 5 0
      response.go
  2. 18 0
      sys/file.go
  3. 24 0
      sys/limit.go
  4. 51 0
      tcp/server.go
  5. 70 0
      util/date.go
  6. 27 0
      util/string.go

+ 5 - 0
response.go

@@ -12,6 +12,11 @@ func header(w http.ResponseWriter, contentType string) {
 	w.WriteHeader(http.StatusOK)
 }
 
+// SetHeader set http response header
+func SetHeader(w http.ResponseWriter, key, value string) {
+	w.Header().Set(key, value)
+}
+
 // Redirect redirect
 func Redirect(w http.ResponseWriter, url string) {
 	w.Header().Set(`Location`, url)

+ 18 - 0
sys/file.go

@@ -0,0 +1,18 @@
+package sys
+
+import (
+	"os"
+	"os/exec"
+	"path/filepath"
+	"strings"
+)
+
+// GetCurrentDir get current process directory
+func GetCurrentDir() string {
+	file, _ := exec.LookPath(os.Args[0])
+	path, _ := filepath.Abs(file)
+
+	idx := strings.LastIndex(path, string(os.PathSeparator))
+
+	return path[:idx]
+}

+ 24 - 0
sys/limit.go

@@ -0,0 +1,24 @@
+package sys
+
+import (
+	"syscall"
+)
+
+// SetLimit set NOFILE
+func SetLimit(max uint64) error {
+	var rlimit syscall.Rlimit
+
+	err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+	if err != nil {
+		return err
+	}
+
+	rlimit.Cur = max
+	rlimit.Max = max
+	err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rlimit)
+	if err != nil {
+		return err
+	}
+
+	return nil
+}

+ 51 - 0
tcp/server.go

@@ -0,0 +1,51 @@
+package tcp
+
+import (
+	"fmt"
+	"log"
+	"net"
+	"os"
+	"os/signal"
+	"syscall"
+)
+
+// NewServer make TCP server
+func NewServer(addr string, cb func(*net.TCPConn)) {
+	logger := log.New(os.Stdout, "INFO: ", log.LstdFlags)
+
+	errc := make(chan error)
+	go func() {
+		c := make(chan os.Signal)
+		signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
+		errc <- fmt.Errorf("%s", <-c)
+	}()
+
+	tcpaddr, err := net.ResolveTCPAddr("tcp", addr)
+	if err != nil {
+		logger.Fatalf("listen error: %v", err)
+		return
+	}
+
+	listen, err := net.ListenTCP("tcp", tcpaddr)
+	if err != nil {
+		logger.Fatalf("listen error: %v", err)
+		return
+	}
+	defer listen.Close()
+
+	go func() {
+		logger.Println("TCP Listen", addr)
+		for {
+			conn, err := listen.AcceptTCP()
+			if err != nil {
+				errc <- err
+				logger.Fatalf("accept error: %v", err)
+				break
+			}
+			go cb(conn)
+		}
+		logger.Println("Exit server", "Quit")
+	}()
+
+	logger.Println("TCP Service Exit", <-errc)
+}

+ 70 - 0
util/date.go

@@ -0,0 +1,70 @@
+package util
+
+import "time"
+
+const (
+	// TimeFmtLong yyyy-MM-dd hh:mm:ss
+	TimeFmtLong = `2006-01-02 15:04:05`
+	// TimeFmtNumeric yyyyMMddhhmmss
+	TimeFmtNumeric = `20060102150405`
+
+	// DateFmtLong yyyy-MM-dd
+	DateFmtLong = `2006-01-02`
+	// DateFmtNumeric yyyyMMdd
+	DateFmtNumeric = `20060102`
+)
+
+// IsTime 是否时间格式字符串
+func IsTime(s string) bool {
+	if _, err := time.Parse(TimeFmtLong, s); err != nil {
+		return false
+	}
+	return true
+}
+
+// IsDate 是否为有效日期
+func IsDate(s string) bool {
+	if _, e := time.Parse(`2006-01-02`, s); e != nil {
+		return false
+	}
+	return true
+}
+
+// StrToTime 字符串转时间
+func StrToTime(s string) (t time.Time, err error) {
+	t, err = time.Parse(TimeFmtLong, s)
+
+	return
+}
+
+// StrFmtTime 时间转字符串
+func StrFmtTime(s, fmt string) (t time.Time, err error) {
+	t, err = time.Parse(fmt, s)
+	return
+}
+
+// TimeToStr 时间转字符串
+func TimeToStr(t time.Time) string {
+	return t.Format(TimeFmtLong)
+}
+
+// TimeFmtStr 时间转字符串
+func TimeFmtStr(t time.Time, fmt string) string {
+	return t.Format(fmt)
+}
+
+// StrToDate 字符串转日期
+func StrToDate(s string) (t time.Time, err error) {
+	t, err = time.Parse(DateFmtLong, s)
+
+	return
+}
+
+// IsWeekEnd 日期是否周末
+func IsWeekEnd(d time.Weekday) bool {
+	day := int(d)
+	if day == 6 || day == 0 {
+		return true
+	}
+	return false
+}

+ 27 - 0
util/string.go

@@ -6,3 +6,30 @@ import "unicode/utf8"
 func StrLen(s string) int {
 	return utf8.RuneCountInString(s)
 }
+
+// StrMax verify string's max lenth
+func StrMax(s string, max int) bool {
+	n := utf8.RuneCountInString(s)
+	if n <= max {
+		return true
+	}
+	return false
+}
+
+// StrMin verify string's min lenth
+func StrMin(s string, min int) bool {
+	n := utf8.RuneCountInString(s)
+	if n >= min {
+		return true
+	}
+	return false
+}
+
+// StrRange verify string's Range lenth
+func StrRange(s string, min, max int) bool {
+	n := utf8.RuneCountInString(s)
+	if n <= max && n >= min {
+		return true
+	}
+	return false
+}