Skip to content

Commit dca0e0f

Browse files
committed
<labs><基础案例提交>
1 parent efd1d58 commit dca0e0f

File tree

8 files changed

+152
-17
lines changed

8 files changed

+152
-17
lines changed

demo/nsq-demo/README.md

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
# 监控HTTP数据
22

33
## 依赖
4-
- 必须:https://github.com/shirou/gopsutil
5-
- window必须:https://github.com/go-ole/go-ole
6-
- window必须:https://github.com/StackExchange/wmi
4+
- 必须:github.com/labstack/echo
75

86
## 编译方式
97
- go 1.5 一下使用:gox 多平台编译
10-
- go 1.5 以后使用:GOOS=linux GOARCH=amd64 go build -o ./bin/nsqProducer nsq_producer.go 进行编译
8+
- go 1.5 以后使用:GOOS=linux GOARCH=amd64 go build -o ./bin/nsqProducer nsq_producer.go
9+
- go 1.5 以后使用:GOOS=windows GOARCH=amd64 go build -o ./bin/nsqConsumer.exe nsq_consumer.go
1110

1211
## 编译平台参考
1312

demo/nsq-demo/nsq_consumer.go

+26-12
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,25 @@
11
package main
22

33
import (
4+
"encoding/json"
5+
"github.com/astaxie/beego/orm"
46
_ "github.com/go-sql-driver/mysql" // import your used driver
57
"github.com/nsqio/go-nsq"
68
"log"
7-
"github.com/astaxie/beego/orm"
8-
"fmt"
99
"time"
10-
"strconv"
1110
)
1211

13-
func init() {
14-
orm.RegisterDataBase("default", "mysql", "root:@tcp(172.16.50.143:4000)/shtelecom?charset=utf8", 30)
15-
orm.Debug = true
12+
type ActBody struct {
13+
Openid string `json:"openid"` // 主体内容
14+
Acttime string `json:"acttime"` // 活动时间
15+
Type string `json:"type"` // 类型
16+
Note string `json:"note"` // 备注
17+
Uuid string `json:"uuid"` // UUID
18+
}
1619

20+
func init() {
21+
orm.RegisterDataBase("default", "mysql", "mohoo:mohoo@tcp(172.16.50.143:4000)/shtelecom?charset=utf8", 30)
22+
orm.Debug = false
1723
}
1824

1925
func main() {
@@ -26,19 +32,27 @@ func main() {
2632
}
2733
// 设置消息处理函数
2834
consumer.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error {
29-
log.Println(string(message.Body))
30-
i := time.Now().Unix()
31-
res, err := o.Raw(" INSERT INTO openid_active (openid, acttime, type, note) VALUES(?, ?, ?, ?); ", string(message.Body), strconv.FormatInt(i, 10), "BIND", "WX").Exec()
35+
var actBody ActBody
36+
errJson := json.Unmarshal(message.Body, &actBody)
37+
if errJson != nil {
38+
return err
39+
}
40+
_, err := o.Raw("INSERT INTO openid_active (openid, acttime, type, note, uuid) VALUES(?, ?, ?, ?, ?); ", actBody.Openid, actBody.Acttime, actBody.Type, actBody.Note, actBody.Uuid).Exec()
3241
if err == nil {
33-
num, _ := res.RowsAffected()
34-
fmt.Println("mysql row affected nums: ", num)
42+
log.Println("id:", actBody.Openid, " time:", actBody.Acttime)
43+
} else {
44+
log.Fatal(err.Error())
45+
panic(1)
3546
}
36-
time.Sleep(3 * time.Millisecond)
47+
time.Sleep(5 * time.Millisecond)
3748
return nil
3849
}))
3950
// 连接到单例nsqd
4051
if err := consumer.ConnectToNSQD("172.16.50.143:4150"); err != nil {
4152
log.Fatal(err)
4253
}
54+
//if err := consumer.ConnectToNSQD("127.0.0.1:4150"); err != nil {
55+
// log.Fatal(err)
56+
//}
4357
<-consumer.StopChan
4458
}

demo/nsq-demo/nsq_producer.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@ func init() {
3131
cfg := nsq.NewConfig()
3232
var err error
3333
producer, err = nsq.NewProducer("172.16.50.143:4150", cfg)
34+
//producer, err = nsq.NewProducer("127.0.0.1:4150", cfg)
3435
if err != nil {
3536
log.Fatal(err)
37+
} else {
38+
log.Println("nsq 链接正常")
3639
}
3740
}
3841

@@ -42,7 +45,7 @@ func main() {
4245
body := new(ProBody)
4346
var err error
4447
if err = c.Bind(body); err != nil {
45-
return c.JSON(http.StatusMethodNotAllowed, "内容体不对")
48+
return c.JSON(http.StatusMethodNotAllowed, "JSON body 内容体不对"+err.Error())
4649
}
4750
if body.Body == "" {
4851
return c.JSON(http.StatusMethodNotAllowed, "body不能为空")

labs/buffered-channels/main.go

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func main() {
6+
ch := make(chan int, 2)
7+
ch <- 1
8+
ch <- 2
9+
fmt.Println(<-ch)
10+
fmt.Println(<-ch)
11+
}

labs/channels/main.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func sum(s []int, c chan int) {
6+
sum := 0
7+
for _, v := range s {
8+
sum += v
9+
}
10+
c <- sum // 将和送入 c
11+
}
12+
13+
func main() {
14+
s := []int{7, 2, 8, -9, 4, 0}
15+
16+
c := make(chan int)
17+
go sum(s[:len(s)/2], c)
18+
go sum(s[len(s)/2:], c)
19+
x, y := <-c, <-c // 从 c 中接收
20+
21+
fmt.Println(x, y, x+y)
22+
}

labs/goroutine/main.go

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"time"
6+
)
7+
8+
func say(s string) {
9+
for i := 0; i < 5; i++ {
10+
time.Sleep(100 * time.Millisecond)
11+
fmt.Println(s)
12+
}
13+
}
14+
15+
func main() {
16+
go say("world")
17+
say("hello")
18+
}

labs/range-and-close/main.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
func fibonacci(n int, c chan int) {
8+
x, y := 0, 1
9+
for i := 0; i < n; i++ {
10+
c <- x
11+
x, y = y, x+y
12+
}
13+
close(c)
14+
}
15+
16+
func main() {
17+
c := make(chan int, 10)
18+
go fibonacci(cap(c), c)
19+
for i := range c {
20+
fmt.Println(i)
21+
}
22+
}

labs/test-benchmark/add_test.go

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package main
2+
3+
import "testing"
4+
5+
func Add(x int, y int) (z int) {
6+
z = x + y
7+
return
8+
}
9+
10+
type ForTest struct {
11+
num int
12+
}
13+
14+
func (this *ForTest) Loops() {
15+
for i := 0; i < 10000; i++ {
16+
this.num++
17+
}
18+
}
19+
20+
type AddArray struct {
21+
result int
22+
add_1 int
23+
add_2 int
24+
}
25+
26+
func BenchmarkLoops(b *testing.B) {
27+
var test ForTest
28+
ptr := &test
29+
// 必须循环 b.N 次 。 这个数字 b.N 会在运行中调整,以便最终达到合适的时间消耗。方便计算出合理的数据。 ( 免得数据全部是 0 )
30+
for i := 0; i < b.N; i++ {
31+
ptr.Loops()
32+
}
33+
}
34+
35+
func TestAdd(t *testing.T) {
36+
var test_data = [3]AddArray{
37+
{2, 1, 1},
38+
{5, 2, 3},
39+
{4, 2, 2},
40+
}
41+
for _, v := range test_data {
42+
if v.result != Add(v.add_1, v.add_2) {
43+
t.Errorf("Add( %d , %d ) != %d \n", v.add_1, v.add_2, v.result)
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)