使用Go开发一个简单的服务器程序

释放双眼,带上耳机,听听看~!

最近有个小项目,需要一个简单的后台程序来支撑,本来想用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

再也不用担心我的文件分享了

给TA打赏
共{{data.count}}人
人已打赏
安全技术

c++ list, vector, map, set 区别与用法比较

2022-1-11 12:36:11

安全技术

Android、JUnit深入浅出(三)——JU…

2022-1-11 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索