使用Go开发一个简单的服务器程序
最近有个小项目,需要一个简单的后台程序来支撑,本来想用Nodejs来做,但是由于本人js一直很菜,并且很讨厌callback,虽然我也很喜欢异步模型,但我一直都觉得JS是反人类的。后台就用了go处理,数据存储使用的mongodb。怎么说来着,从生成数据的角度来讲,这东西把C#+SQLCE甩出好几条街。生成go+mongodb 大约,10秒左右,而后者只是大约需要5分钟。当然,这个完全是写法问题。因为是写一条,就保存一下,如果C#那边一次保存的话性能也不会很差。但考虑的部署问题,因为GO只要2个exe和一个mongodb就可以搞定,而C#需要IIS。比较烦
package main import(
"encoding/json"
"fmt"
"log"
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
"net/http"
"strconv"
) type Room struct {
Id bson.ObjectId `bson:"_id"`
Name string `bson:"name"`
Type string `bson:"type"`
Status int `bson:"status"`
Price string `bson:"price"`
Area string `bson:"area"`
BuildId int `bson:"buildId"`
} //查询售楼信息
func rooms(rw http.ResponseWriter, req *http.Request){
req.ParseForm() //解析参数,默认是不会解析的
sess, err := mgo.Dial("127.0.0.1")
if err != nil {
fmt.Printf("连接数据库失败");
}
defer sess.Close()
log.Println("id的值:", req.FormValue("id"))
sess.SetSafe(&mgo.Safe{})
col := sess.DB("estates").C("room")
rooms := []Room{}
buildId, err := strconv.Atoi(req.FormValue("id"))
err = col.Find(bson.M{"buildId":buildId}).All(&rooms)
result,_ := json.Marshal(rooms)
fmt.Fprintf(rw, string(result));
} //更新售房信息
func updateRoom(rw http.ResponseWriter, req *http.Request) {
req.ParseForm(); sess, err := mgo.Dial("127.0.0.1")
if err != nil {
fmt.Fprintf(rw, "连接数据库失败");
}
defer sess.Close()
sess.SetSafe(&mgo.Safe{})
status,err := strconv.Atoi(req.FormValue("status"))
_id := req.FormValue("id")
log.Println(_id,status)
col := sess.DB("estates").C("room")
err = col.Update(bson.M{"_id":bson.ObjectIdHex(_id)}, bson.M{"$set":bson.M{"status":status}})
if err != nil {
log.Println(err)
fmt.Fprintf(rw, "false")
} else {
fmt.Fprintf(rw, "true")
}
} func main() {
http.HandleFunc("/build", rooms)
http.HandleFunc("/updateRoom", updateRoom)
log.Fatal(http.ListenAndServe(":8002", nil))
}
mgo的安装 请参见 http://labix.org/mgo
另由于最近的工作一直需要2台电脑。一台mac本,另一台win。所以经常2台电脑间要copy文件。很蛋疼。用go写了个简单的文件服务器。用上之后,周大爷@kklldog
再也不用担心我的文件分享了
package main import (
"net/http"
"flag"
"os"
"fmt"
"log"
) func main() {
flag.Parse()
arg := flag.Arg(0);
if(arg == "") {
fmt.Println("请输入服务地址")
os.Exit(1)
}
port := flag.Arg(1)
if port == "" {
port = "88"
}
http.Handle("/", http.FileServer(http.Dir(arg)));
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d",port), nil))
}
使用Go开发一个简单的服务器程序的更多相关文章
- 【Flask系列】开发一个简单的Flask程序
知识点 初始化:每一个flask程序都必须创建一个程序实例,遵循WSGI(Web Server Gateway interface)协议,把请求->flask Obj; 创建实例: app = ...
- 一个简单的flask程序
初始化 所有Flask程序都必须创建一个程序实例. 程序实例是Flask类的对象,经常使用下述代码创建: from flask import Flask app = Flask(__name__) F ...
- Python开发一个简单的BBS论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- 编写一个简单的C++程序
编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...
- 初学Node(六)搭建一个简单的服务器
搭建一个简单的服务器 通过下面的代码可以搭建一个简单的服务器: var http = require("http"); http.createServer(function(req ...
- 利用JSP编程技术实现一个简单的购物车程序
实验二 JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...
- Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状)
Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状) 本篇博客来给大家介绍怎样使用Lua这门语言来开发一个简单的小游戏-记数字踩白块. 游戏的流程是这种:在界面上生成5个数1~5字并显 ...
- 《用Java写一个通用的服务器程序》01 综述
最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的协议,处理请求,返回结果.每次写新程序时都把老代码拿来,修改一下协议解析部分和业务处理部分,然后就一个 ...
- Java入门篇(一)——如何编写一个简单的Java程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
随机推荐
- hibernate工具类HibernateUtil详解
1.为什么要用hibernateUtil这个类,先看这段代码: //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他 Con ...
- 警惕rapidxml的陷阱:添加节点时,请保证变量的生命周期
http://www.cnblogs.com/chutianyao/p/3246592.html 项目中要使用xml打包.解析协议,HQ指定了使用rapidxml--号称是最快的xml解析器. 功能很 ...
- Qt之QLabel
简述 QLabel提供了一个文本或图像的显示,没有提供用户交互功能. 一个QLabel可以包含以下任意内容类型: 内容 设置 纯文本 使用setText()设置一个QString 富文本 使用setT ...
- UVa (二分) 11627 Slalom
题意: 有宽度相同的水平的n个旗门,水平(纵坐标严格递增)滑行的最大速度为Vh(水平速度可以任意调节).然后还有S双滑雪板,每双滑雪板的垂直速度一定. 然后求能通过的滑板鞋的最大速度. 分析: 显然, ...
- hadoop1常见配置含义
参数 取值 备注 fs.default.name NameNode ...
- BZOJ 1803 Query on a tree III
树上主席树. 我靠这是第k小吧..... #include<iostream> #include<cstdio> #include<cstring> #includ ...
- 纵观minecraft 游戏作者的世界观
minecraft 这款游戏 独特的游戏背景 与 模式 深受我爱 ,游戏的音乐制作方面也是独具一格 但是 整个游戏的风气 充满孤独的色彩 抑郁惆怅的音乐 每当在日出时 响起 ,当你进入生存模式之后 开 ...
- ecshop 更新首页flash样式
未测试 ECSHOP默认的只有几种很普通的FLASH图片切换样式,想不想自己也换一种呢? 今天摸索了下,算是弄懂了,和大家分享下 首先在网上找到你想要的FLASH切换样式[google一下],把那个S ...
- 标准IO库函数复习
打开文件,打开文件一定要成对写,养成好习惯很重要.比如 fopen()fclose<ol> <li>fopen()</li> <pre lang=" ...
- HDU 4627 The Unsolvable Problem 2013 Multi-University Training Contest 3
给你一个数 n ( 2 <= n <= 109 ),现在需要你找到一对数a, b (a + b = n),并且使得LCM(a, b)尽可能的大,然后输出最大的 LCM(a, b). (为什 ...