req,_ := http.NewRequest(Method, Url, body)
req = req.WithContext(cx)
+ var done = make(chan struct{})
+ defer close(done)
go func(){
this.cancel = make(chan interface{})
this.cancelOpen = true
- <- this.cancel
- cancel()
+ select {
+ case <- this.cancel:cancel()
+ case <- done:
+ }
}()
if _,ok := Header["Accept"];!ok {Header["Accept"] = `text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8`}
type Msg_item struct {
Prefix string
Msg_obj []interface{}
+ Config
}
//New 初始化
if c.File != `` {p.File().NewPath(c.File)}
- o.MQ = m.New(10)
+ o.MQ = m.New(100)
o.MQ.Pull_tag(map[string]func(interface{})(bool){
`block`:func(data interface{})(bool){
if v,ok := data.(*s.Signal);ok{v.Done()}
return false
},
`L`:func(data interface{})(bool){
+ msg := data.(Msg_item)
var showObj = []io.Writer{}
- if o.Stdout {showObj = append(showObj, os.Stdout)}
- if o.File != `` {
- file, err := os.OpenFile(o.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
+ if msg.Stdout {showObj = append(showObj, os.Stdout)}
+ if msg.File != `` {
+ file, err := os.OpenFile(msg.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
showObj = append(showObj, file)
defer file.Close()
}else{log.Println(err)}
}
log.New(io.MultiWriter(showObj...),
- data.(Msg_item).Prefix,
- log.Ldate|log.Ltime).Println(data.(Msg_item).Msg_obj...)
+ msg.Prefix,
+ log.Ldate|log.Ltime).Println(msg.Msg_obj...)
return false
},
})
//
func Copy(i *Log_interface)(o *Log_interface){
- o = New((*i).Config)
+ o = new(Log_interface)
+ //设置
+ o.Config = (*i).Config
+ o.MQ = (*i).MQ
+ {//启动阻塞
+ b := s.Init()
+ for b.Islive() {
+ o.MQ.Push_tag(`block`,b)
+ time.Sleep(time.Duration(20)*time.Millisecond)
+ }
+ }
return
}
//Open 日志不显示
func (I *Log_interface) Log_show_control(show bool) (O *Log_interface) {
- O=I
+ O = Copy(I)
//
O.Block(100)
O.Stdout = show
O.MQ.Push_tag(`L`,Msg_item{
Prefix:prefix,
Msg_obj:append(O.Base_string, i),
+ Config:O.Config,
})
return
}
\ No newline at end of file
import (
"time"
"fmt"
+ "net/http"
+ _ "net/http/pprof"
"testing"
p "github.com/qydysky/part"
)
}
t.Log(`fin`)
}
+
+func Test_msgq6(t *testing.T) {
+ mq := New(30)
+ go func() {
+ http.ListenAndServe("0.0.0.0:8899", nil)
+ }()
+ go mq.Pull_tag(map[string]func(interface{})(bool){
+ `A1`:func(data interface{})(bool){
+ return false
+ },
+ `A2`:func(data interface{})(bool){
+ if v,ok := data.(string);!ok || v != `a11`{t.Error(`2`)}
+ return false
+ },
+ `Error`:func(data interface{})(bool){
+ if data == nil {t.Error(`out of list`)}
+ return false
+ },
+ })
+
+ var fin_turn = 0
+ t.Log(`start`)
+ for fin_turn < 1000 {
+ time.Sleep(time.Second)
+ time.Sleep(time.Second)
+ mq.Push_tag(`A1`,`a11`)
+ fin_turn+=1
+ fmt.Print("\r",fin_turn)
+ }
+ t.Log(`fin`)
+}