From 380155581183f4d5e493986b4f43515637c5f415 Mon Sep 17 00:00:00 2001
From: SisMaker <1713699517@qq.com>
Date: Fri, 5 Jun 2020 21:47:08 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E4=B9=A0=E7=AC=94=E8=AE=B0=E5=A4=87?=
=?UTF-8?q?=E4=BB=BD=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/docs/go语言基础.md | 2 ++
src/go.mod | 24 +++++++++++++
src/learn/eventWay/eventWay/eventWay.go | 35 ++++++++++++++++++
src/learn/eventWay/main.go | 31 ++++++++++++++++
src/learn/interface/main.go | 23 ++++++++++--
src/learn/middleware.go | 35 ++++++++++++++++++
src/learn/mulVar.go | 6 ++++
src/learn/mvc.go | 34 ++++++++++++++++++
src/learn/mvc/mvc.go | 44 +++++++++++++++++++++++
src/learn/mvc/mvcNoSignal.go | 23 ++++++++++++
src/learn/panic/panic.go | 19 ++++++++++
src/learn/serv.go | 48 +++++++++++++++++++++++++
src/learn/tg.md | 9 +++++
src/testCase/mance.go | 19 ++++++++++
14 files changed, 349 insertions(+), 3 deletions(-)
create mode 100644 src/learn/eventWay/eventWay/eventWay.go
create mode 100644 src/learn/eventWay/main.go
create mode 100644 src/learn/middleware.go
create mode 100644 src/learn/mvc.go
create mode 100644 src/learn/mvc/mvc.go
create mode 100644 src/learn/mvc/mvcNoSignal.go
create mode 100644 src/learn/panic/panic.go
create mode 100644 src/learn/serv.go
create mode 100644 src/learn/tg.md
create mode 100644 src/testCase/mance.go
diff --git a/src/docs/go语言基础.md b/src/docs/go语言基础.md
index cb5dc10..bc26d78 100644
--- a/src/docs/go语言基础.md
+++ b/src/docs/go语言基础.md
@@ -286,6 +286,8 @@
b = iota
c = iota
)
+
+ 包级别的初始化 在main执行之前
diff --git a/src/go.mod b/src/go.mod
index 1f865c1..eb00966 100644
--- a/src/go.mod
+++ b/src/go.mod
@@ -1,3 +1,27 @@
module goUtils
go 1.12
+
+require (
+ github.com/BurntSushi/toml v0.3.1 // indirect
+ github.com/Joker/jade v1.0.0 // indirect
+ github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398 // indirect
+ github.com/aymerick/raymond v2.0.2+incompatible // indirect
+ github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 // indirect
+ github.com/fatih/structs v1.1.0 // indirect
+ github.com/flosch/pongo2 v0.0.0-20200518135938-dfb43dbdc22a // indirect
+ github.com/gorilla/schema v1.1.0 // indirect
+ github.com/iris-contrib/blackfriday v2.0.0+incompatible // indirect
+ github.com/iris-contrib/formBinder v5.0.0+incompatible // indirect
+ github.com/iris-contrib/go.uuid v2.0.0+incompatible // indirect
+ github.com/json-iterator/go v1.1.9 // indirect
+ github.com/kataras/golog v0.0.15 // indirect
+ github.com/kataras/iris v11.1.1+incompatible // indirect
+ github.com/klauspost/compress v1.10.6 // indirect
+ github.com/microcosm-cc/bluemonday v1.0.2 // indirect
+ github.com/ryanuber/columnize v2.1.0+incompatible // indirect
+ github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
+ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a // indirect
+ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 // indirect
+ gopkg.in/yaml.v2 v2.3.0 // indirect
+)
diff --git a/src/learn/eventWay/eventWay/eventWay.go b/src/learn/eventWay/eventWay/eventWay.go
new file mode 100644
index 0000000..8e66189
--- /dev/null
+++ b/src/learn/eventWay/eventWay/eventWay.go
@@ -0,0 +1,35 @@
+package eventWay
+
+type Event struct {
+ Name string
+ CfgId int
+}
+
+type HandlerErr struct {
+ Event Event
+ Handler Handler
+ ErrInfo error
+}
+
+type Handler func(msg interface{}) error
+
+var eventMgr = map[Event][]Handler{}
+
+func Register(event Event, handler Handler) {
+ if handlers, ok := eventMgr[event]; ok {
+ eventMgr[event] = append(handlers, handler)
+ } else {
+ eventMgr[event] = []Handler{handler}
+ }
+}
+
+func Publish(event Event, msg interface{}) (errs []HandlerErr) {
+ if handlers, ok := eventMgr[event]; ok {
+ for _, handler := range handlers {
+ if err := handler(msg); err != nil {
+ errs = append(errs, HandlerErr{Event: event, Handler: handler, ErrInfo: err})
+ }
+ }
+ }
+ return errs
+}
diff --git a/src/learn/eventWay/main.go b/src/learn/eventWay/main.go
new file mode 100644
index 0000000..4abfb18
--- /dev/null
+++ b/src/learn/eventWay/main.go
@@ -0,0 +1,31 @@
+package main
+
+import (
+ "fmt"
+ eventWay2 "goUtils/learn/eventWay/eventWay"
+)
+
+func hand1(msg interface{}) error {
+ println("IMY************ 111", msg)
+ return nil
+}
+
+func hand2(msg interface{}) error {
+ println("IMY************ 222", msg)
+ return nil
+}
+
+func hand3(msg interface{}) error {
+ fmt.Printf("IMY************ 333 %v\n", msg)
+ return nil
+}
+
+func main() {
+ eventWay2.Register(eventWay2.Event{Name: "str1"}, hand1)
+ eventWay2.Register(eventWay2.Event{Name: "str1"}, hand2)
+ eventWay2.Register(eventWay2.Event{Name: "str3"}, hand3)
+ eventWay2.Publish(eventWay2.Event{Name: "str1"}, "teste1")
+ eventWay2.Publish(eventWay2.Event{Name: "str3"}, "testt3")
+ eventWay2.Publish(eventWay2.Event{Name: "str2"}, "fdfdfdfdf")
+
+}
diff --git a/src/learn/interface/main.go b/src/learn/interface/main.go
index be900f6..54072ac 100644
--- a/src/learn/interface/main.go
+++ b/src/learn/interface/main.go
@@ -1,13 +1,24 @@
package main
import (
+ "fmt"
"goUtils/learn/interface/multiInter"
)
-type T struct{}
+type T struct {
+ aa int
+ bb string
+}
+
+type T2 struct {
+ aa2 int
+ bb2 string
+}
+
+func (t T) M1() { println("IMY******* M1", t.bb) }
+func (T) M2() { println("IMY******* M2") }
-func (T) M1() { println("IMY******* M1") }
-func (T) M2() { println("IMY******* M2") }
+func (T2) M2() { println("IMY******* M2") }
func f1(i multiInter.I1) { i.M1() }
func f2(i multiInter.I2) { i.M2() }
@@ -15,4 +26,10 @@ func main() {
t := T{}
f1(t)
f2(t)
+ var i interface{} = T{11, "fdfdfdf"}
+ fmt.Printf("%v %[1]T\n", i.(T))
+ ii := i.(T)
+ f1(ii)
+ var t2 interface{} = T2{11, "aaaaaaaa"}
+ fmt.Printf("%v %[1]T\n", t2)
}
diff --git a/src/learn/middleware.go b/src/learn/middleware.go
new file mode 100644
index 0000000..a97910b
--- /dev/null
+++ b/src/learn/middleware.go
@@ -0,0 +1,35 @@
+package main
+
+import (
+ "github.com/kataras/iris"
+)
+
+func main() {
+ app := iris.New()
+ app.Get("/", before, mainHandler, after)
+ app.Run(iris.Addr(":8081"))
+
+}
+
+func before(ctx iris.Context) {
+ shareInfo := "this is a shareInfo between handlers"
+
+ requestPath := ctx.Path()
+ println("Before the mainHandler: " + requestPath)
+
+ ctx.Values().Set("info", shareInfo)
+ ctx.Next() //继续下一个handler
+}
+
+func after(ctx iris.Context) {
+ println("after the mainHandler")
+}
+
+func mainHandler(ctx iris.Context) {
+ println("Inside mainHandler")
+ info := ctx.Values().GetString("info")
+ ctx.HTML("
Response
")
+ ctx.HTML("
Info: " + info)
+ ctx.Next()
+
+}
diff --git a/src/learn/mulVar.go b/src/learn/mulVar.go
index a108b6b..469c12c 100644
--- a/src/learn/mulVar.go
+++ b/src/learn/mulVar.go
@@ -15,4 +15,10 @@ var e, f = 123, "hello"
func main() {
g, h := 123, "hello"
println(x, y, a, b, c, d, e, f, g, h)
+
+ var a, b, c int = 1, 2, 3
+ println(a, b, c)
+
+ var d float64 = 100
+ println(d)
}
diff --git a/src/learn/mvc.go b/src/learn/mvc.go
new file mode 100644
index 0000000..8b43492
--- /dev/null
+++ b/src/learn/mvc.go
@@ -0,0 +1,34 @@
+package main
+
+import (
+ "github.com/kataras/iris"
+ "github.com/kataras/iris/mvc"
+ "strconv"
+)
+
+func main() {
+ app := iris.New()
+ mvc.Configure(app.Party("/root"), myMVC)
+ app.Run(iris.Addr(":8082"))
+
+}
+
+func myMVC(app *mvc.Application) {
+ app.Handle(new(MyController))
+
+}
+
+type MyController struct{}
+
+func (m *MyController) BeforeActivation(b mvc.BeforeActivation) {
+ b.Handle("GET", "/something/{id:long}", "MyCustomHandler")
+
+}
+
+// GET: http://localhost:8080/root
+func (m *MyController) Get() string { return "Hey" }
+
+// GET: http://localhost:8080/root/something/{id:long}
+func (m *MyController) MyCustomHandler(id int64) string {
+ return "MyCustomHandler says Hey " + strconv.FormatInt(id, 10)
+}
diff --git a/src/learn/mvc/mvc.go b/src/learn/mvc/mvc.go
new file mode 100644
index 0000000..93f293f
--- /dev/null
+++ b/src/learn/mvc/mvc.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+ "github.com/kataras/iris"
+ "github.com/kataras/iris/middleware/logger"
+ "github.com/kataras/iris/middleware/recover"
+ "github.com/kataras/iris/mvc"
+)
+
+func main() {
+ app := iris.New()
+ app.Use(recover.New())
+ app.Use(logger.New())
+ mvc.New(app).Handle(new(ExampleController))
+ // http://localhost:8080
+ // http://localhost:8080/ping
+ // http://localhost:8080/hello
+ app.Run(iris.Addr(":8080"))
+
+}
+
+type ExampleController struct{}
+
+func (c *ExampleController) Get() mvc.Result {
+ return mvc.Response{
+ ContentType: "text/html",
+ Text: "Welcome
",
+ }
+}
+
+func (c *ExampleController) GetPing() string {
+ return "Pong"
+
+}
+
+func (c *ExampleController) GetHello() interface{} {
+ return map[string]string{"massage": "hello Iris!"}
+
+}
+
+func (c *ExampleController) GetHellos() interface{} {
+ return map[string]string{"massage": "hellos Iris!"}
+
+}
diff --git a/src/learn/mvc/mvcNoSignal.go b/src/learn/mvc/mvcNoSignal.go
new file mode 100644
index 0000000..7479fdf
--- /dev/null
+++ b/src/learn/mvc/mvcNoSignal.go
@@ -0,0 +1,23 @@
+package main
+
+import (
+ "context"
+ "github.com/kataras/iris"
+ "time"
+)
+
+func main() {
+ app := iris.New()
+ iris.RegisterOnInterrupt(func() {
+ timeout := 5 * time.Second
+ ctx, cancel := context.WithTimeout(context.Background(), timeout)
+ defer cancel()
+ // 关闭所有主机
+ println("IMY*********** todo stop")
+ app.Shutdown(ctx)
+ })
+ app.Get("/", func(ctx iris.Context) {
+ ctx.HTML("hi I just exist in order to see if the server is closed
")
+ })
+ app.Run(iris.Addr(":8080"), iris.WithoutInterruptHandler)
+}
diff --git a/src/learn/panic/panic.go b/src/learn/panic/panic.go
new file mode 100644
index 0000000..9527048
--- /dev/null
+++ b/src/learn/panic/panic.go
@@ -0,0 +1,19 @@
+package main
+
+func test() {
+ var a int
+ defer func() {
+ if p := recover(); p != nil {
+ a = 1111
+ }
+ }()
+
+ panic(2222)
+ print(a)
+
+}
+
+func main() {
+ test()
+
+}
diff --git a/src/learn/serv.go b/src/learn/serv.go
new file mode 100644
index 0000000..a7b59c8
--- /dev/null
+++ b/src/learn/serv.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+ "github.com/kataras/iris"
+ "github.com/kataras/iris/middleware/logger"
+ "github.com/kataras/iris/middleware/recover"
+ "github.com/valyala/tcplisten"
+)
+
+func main() {
+ app := iris.New()
+ app.Use(recover.New())
+ app.Use(logger.New())
+
+ // 输出html
+ // 请求方式:GET
+ // 访问地址:http://localhost:8080/welcome
+ app.Handle("GET", "/welcome", func(ctx iris.Context) {
+ ctx.HTML("Welcome
")
+
+ })
+ // 输出字符串
+ // 类似于app.Handle("GET", "/ping", [...])
+ // 请求方式GET
+ // 请求地址:http://localhost:8080/ping
+ app.Get("/ping", func(ctx iris.Context) {
+ ctx.WriteString("Pong")
+ })
+
+ // 输出JSON
+ // 请求方式:GET
+ // 请求地址: http://localhost:8080/hello
+ app.Get("/hello", func(ctx iris.Context) {
+ ctx.JSON(iris.Map{"message": "hello Iris!"})
+ })
+
+ listenerCfg := tcplisten.Config{
+ ReusePort: true,
+ DeferAccept: true,
+ FastOpen: true,
+ }
+ l, err := listenerCfg.NewListener("tcp4", ":8080")
+ if err != nil {
+ app.Logger().Fatal(err)
+ }
+ app.Run(iris.Listener(l)) //8080 监听端口
+
+}
diff --git a/src/learn/tg.md b/src/learn/tg.md
new file mode 100644
index 0000000..1e31ad2
--- /dev/null
+++ b/src/learn/tg.md
@@ -0,0 +1,9 @@
+SELECT DATE(FROM_UNIXTIME(created_at)) as group_date,COUNT(*) AS day1,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 1, 1, 0)) AS day2,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 2, 1, 0)) AS day3,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 3, 1, 0)) AS day4,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 4, 1, 0)) AS day5,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 5, 1, 0)) AS day6,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 6, 1, 0)) AS day7,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 14, 1, 0)) AS day14,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 30, 1, 0)) AS day30,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 60, 1, 0)) AS day60,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 90, 1, 0)) AS day90,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 120, 1, 0)) AS day120 FROM `roles` WHERE (created_at >= 1590451200 AND created_at <= 1590537599) AND (is_internal = false) AND (login_at != 0) GROUP BY DATE(FROM_UNIXTIME(created_at))
+
+
+
+
+SELECT DATE(FROM_UNIXTIME(created_at)) as group_date,COUNT(*) AS day1,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 1, 1, 0)) AS day2,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 2, 1, 0)) AS day3,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 3, 1, 0)) AS day4,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 4, 1, 0)) AS day5,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 5, 1, 0)) AS day6,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 6, 1, 0)) AS day7,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 14, 1, 0)) AS day14,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 30, 1, 0)) AS day30,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 60, 1, 0)) AS day60,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 90, 1, 0)) AS day90,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 120, 1, 0)) AS day120 FROM `roles` WHERE (created_at >= 1590451200 AND created_at <= 1590537599) AND (is_internal = false) AND (login_at != 0) GROUP BY DATE(FROM_UNIXTIME(created_at))
+
+
+SELECT DATE(FROM_UNIXTIME(created_at)) as group_date,COUNT(*) AS day1,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 1, 1, 0)) AS day2,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 2, 1, 0)) AS day3,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 3, 1, 0)) AS day4,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 4, 1, 0)) AS day5,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 5, 1, 0)) AS day6,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 6, 1, 0)) AS day7,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 14, 1, 0)) AS day14,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 30, 1, 0)) AS day30,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 60, 1, 0)) AS day60,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 90, 1, 0)) AS day90,SUM(if(DATEDIFF(FROM_UNIXTIME(login_at), FROM_UNIXTIME(created_at)) >= 120, 1, 0)) AS day120 FROM `roles` WHERE (created_at >= 1590451200 AND created_at <= 1590537599) AND (is_internal = false) AND (login_at != 0) GROUP BY DATE(FROM_UNIXTIME(created_at))
diff --git a/src/testCase/mance.go b/src/testCase/mance.go
new file mode 100644
index 0000000..2e77e48
--- /dev/null
+++ b/src/testCase/mance.go
@@ -0,0 +1,19 @@
+package main
+
+import (
+ "os"
+ "strconv"
+ "time"
+)
+
+func test() {}
+
+func main() {
+ start := time.Now()
+ cnt, _ := strconv.Atoi(os.Args[1])
+ for i := 0; i < cnt; i++ {
+ test()
+ }
+ println("IMY*****main*", time.Since(start).Microseconds(), "us")
+
+}