最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都觉得JS是反人类的。后台就用了go处理,数据存储使用的mongodb。怎么说来着,从生成数据的角度来讲,这东西把C#+SQLCE甩出好几条街。生成go+mongodb 大约,10秒左右,而后者只是大约需要5分钟。当然,这个完全是写法问题。因为是写一条,就保存一下,如果C#那边一次保存的话性能也不会很差。但考虑的部署问题,因为GO只要2个exe和一个mongodb就可以搞定,而C#需要IIS。比较烦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 11 package main 2 3 import( 4 "encoding/json" 5 "fmt" 6 "log" 7 "labix.org/v2/mgo" 8 "labix.org/v2/mgo/bson" 9 "net/http"
210 "strconv"
311 )
412
513 type Room struct {
6 14 Id bson.ObjectId `bson:"_id"`
715 Name string `bson:"name"`
816 Type string `bson:"type"`
917 Status int `bson:"status"`
1018 Price string `bson:"price"`
1119 Area string `bson:"area"`
1220 BuildId int `bson:"buildId"`
1321 }
1422
1523 //查询售楼信息
1624 func rooms(rw http.ResponseWriter, req *http.Request){
1725 req.ParseForm() //解析参数,默认是不会解析的
1826 sess, err := mgo.Dial("127.0.0.1")
1927 if err != nil {
20 28 fmt.Printf("连接数据库失败");
2129 }
22
2330 defer sess.Close()
24
2531 log.Println("id的值:", req.FormValue("id"))
2632 sess.SetSafe(&mgo.Safe{})
2733 col := sess.DB("estates").C("room")
2834 rooms := []Room{}
29 35 buildId, err := strconv.Atoi(req.FormValue("id"))
3036 err = col.Find(bson.M{"buildId":buildId}).All(&rooms)
3137 result,_ := json.Marshal(rooms)
32 38 fmt.Fprintf(rw, string(result));
3339 }
3440
3541 //更新售房信息
3642 func updateRoom(rw http.ResponseWriter, req *http.Request) {
3743 req.ParseForm();
38
3944
4045 sess, err := mgo.Dial("127.0.0.1")
4146 if err != nil {
42 47 fmt.Fprintf(rw, "连接数据库失败");
4348 }
44
4549 defer sess.Close()
46
4750 sess.SetSafe(&mgo.Safe{})
4851 status,err := strconv.Atoi(req.FormValue("status"))
4952 _id := req.FormValue("id")
5053 log.Println(_id,status)
51
5254 col := sess.DB("estates").C("room")
5355 err = col.Update(bson.M{"_id":bson.ObjectIdHex(_id)}, bson.M{"$set":bson.M{"status":status}})
5456 if err != nil {
55 57 log.Println(err)
56
5758 fmt.Fprintf(rw, "false")
5859 } else {
59 60 fmt.Fprintf(rw, "true")
6061 }
61
6262 }
63 63
6464 func main() {
6565 http.HandleFunc("/build", rooms)
6666 http.HandleFunc("/updateRoom", updateRoom)
6767 log.Fatal(http.ListenAndServe(":8002", nil))
6868 }
69
mgo的安装 请参见 http://labix.org/mgo
另由于最近的工作一直需要2台电脑。一台mac本,另一台win。所以经常2台电脑间要copy文件。很蛋疼。用go写了个简单的文件服务器。用上之后,周大爷@kklldog
再也不用担心我的文件分享了