Compare commits
18 Commits
master
...
cache-midd
Author | SHA1 | Date |
---|---|---|
Sodesnei | e1dc747e78 | |
Sodesnei | b62fade750 | |
Sodesnei | 8717b8d28f | |
Sodesnei | c20c5f3357 | |
Sodesnei | cf705aaf6b | |
Sodesnei | f68167f620 | |
Sodesnei | ce516d1b18 | |
Sodesnei | 6650479282 | |
Sodesnei | b2b5eaba87 | |
Sodesnei | 7aada5be21 | |
Sodesnei | 32c679615c | |
Sodesnei | 675854207e | |
Sodesnei | 71381ad1a8 | |
Sodesnei | d3c3c2bfe1 | |
Sodesnei | e742267b68 | |
86150 | 2c6bd99ccc | |
86150 | 8b676d1ad2 | |
86150 | f8f653c6f9 |
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
1
go.mod
1
go.mod
|
@ -5,4 +5,5 @@ go 1.16
|
||||||
require (
|
require (
|
||||||
github.com/spf13/cobra v1.2.1
|
github.com/spf13/cobra v1.2.1
|
||||||
github.com/spf13/viper v1.8.1
|
github.com/spf13/viper v1.8.1
|
||||||
|
github.com/stretchr/testify v1.7.0
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
package middle
|
||||||
|
|
||||||
|
// 数据类型
|
||||||
|
type data struct {
|
||||||
|
m map[string]interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数据初始化,分配内存
|
||||||
|
func NewData() *data {
|
||||||
|
return &data{
|
||||||
|
make(map[string]interface{}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取数据
|
||||||
|
func (d *data) Get(key string) interface{} {
|
||||||
|
return d.m[key]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 推入数据
|
||||||
|
func (d *data) Put(key string, val interface{}) error {
|
||||||
|
d.m[key] = val
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -1 +0,0 @@
|
||||||
package define
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
package middle
|
||||||
|
|
||||||
|
// 获取数据的接口
|
||||||
|
type Msg interface {
|
||||||
|
Put(key string, val interface{}) error
|
||||||
|
Get(key string) interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
type middleWare interface {
|
||||||
|
Put(msg Msg)
|
||||||
|
Out() Msg
|
||||||
|
}
|
||||||
|
|
||||||
|
type MiddlewareConf struct {
|
||||||
|
Weight int
|
||||||
|
Middle middleWare
|
||||||
|
}
|
||||||
|
|
||||||
|
type Driver struct {
|
||||||
|
conf []*MiddlewareConf
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDriver() *Driver {
|
||||||
|
return new(Driver)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 驱动
|
||||||
|
func (d *Driver) Start(msg Msg) {
|
||||||
|
|
||||||
|
for _, m := range d.conf {
|
||||||
|
|
||||||
|
go m.Middle.Put(msg)
|
||||||
|
|
||||||
|
msg = m.Middle.Out()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
conf := []*MiddlewareConf{
|
||||||
|
{
|
||||||
|
Weight: 1,
|
||||||
|
Middle: NewUpload(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Weight: 2,
|
||||||
|
Middle: NewStorage(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Weight: 3,
|
||||||
|
Middle: NewSend(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
da := NewDriver()
|
||||||
|
da.conf = conf
|
||||||
|
val := NewData()
|
||||||
|
val.Put("200", 2)
|
||||||
|
|
||||||
|
da.Start(val)
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package middle
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestMiddle(t *testing.T) {
|
||||||
|
main()
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package middle
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type Send struct {
|
||||||
|
ch chan *data
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSend() *Send {
|
||||||
|
return &Send{
|
||||||
|
make(chan *data),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Send) Put(msg Msg) {
|
||||||
|
da := NewData()
|
||||||
|
da.Put("1", msg)
|
||||||
|
fmt.Println("传入Send")
|
||||||
|
m.ch <- da
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Send) Out() Msg {
|
||||||
|
return <-m.ch
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package middle
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type Storage struct {
|
||||||
|
ch chan *data
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStorage() *Storage {
|
||||||
|
return &Storage{
|
||||||
|
make(chan *data),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Storage) Put(msg Msg) {
|
||||||
|
da := NewData()
|
||||||
|
da.Put("1", msg)
|
||||||
|
fmt.Println("传入Storage")
|
||||||
|
m.ch <- da
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Storage) Out() Msg {
|
||||||
|
return <-m.ch
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package middle
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type Upload struct {
|
||||||
|
ch chan *data
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewUpload() *Upload {
|
||||||
|
return &Upload{
|
||||||
|
make(chan *data),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Upload) Put(msg Msg) {
|
||||||
|
da := NewData()
|
||||||
|
da.Put("1", msg)
|
||||||
|
fmt.Println("传入Upload")
|
||||||
|
|
||||||
|
m.ch <- da
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Upload) Out() Msg {
|
||||||
|
return <-m.ch
|
||||||
|
}
|
Loading…
Reference in New Issue