使用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的基础知识以及如何 ...
随机推荐
- Volley HTTP库系列教程(5)自定义一个Volley请求
Implementing a Custom Request Previous Next This lesson teaches you to Write a Custom Request parse ...
- Sencha CMD 4- 安装与首次使用
哥英文不好,网上搜索好多中文教程都是抄来抄去没有完整的介绍.所以写出来让与我一样的小伙伴惊呆下! 这篇主要是安装,后续慢慢更新 一.Sencha CMD是干啥滴!? 它是服务使用EXTJS SDK开发 ...
- 多个MapReduce作业相互依赖时,使用JobControl进行管理
要处理复杂关系的数据,一个工程里面绝对不止一个MapReduce作业,当有多个MapReduce作业时, 并且每个作业之间有依赖关系,所谓的依赖就是一个作业得到的结果是另外一个作业的输入, ...
- Codeforces 435 B Pasha Maximizes【贪心】
题意:给出一串数字,给出k次交换,每次交换只能交换相邻的两个数,问最多经过k次交换,能够得到的最大的一串数字 从第一个数字往后找k个位置,找出最大的,往前面交换 有思路,可是没有写出代码来---sad ...
- HDU 2122 HDU Today【Floyd】
题意:给出n条路,起点和终点,问最短距离 用map处理一下地名,再用floyd 可是不懂的是:为什么INF定义成0x7fffffff就输出一堆奇怪的东西,改成100000000就可以了 #includ ...
- 淘宝主搜索离线集群完成Hadoop 2
淘宝搜索离线dump集群(hadoop&hbase)2013进行了几次重大升级,本文中将这些升级的详细过程.升级中所遇到的问题以及这些问题的解决方案分享给大家.至此,淘宝主搜索离线集群完全进入 ...
- Java 图片转换为字符图 CharMaps (整理)
/* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...
- 【英语】Bingo口语笔记(19) - 如何用英语叙旧
- Oracle时间函数numtoyminterval()
格式:NumToYMInterval(n, interval_unit); n: 数值类型 interval_unit: 'YEAR', 'MONTH' ,或其他可以转换成这两个值之一的表达式 N ...
- unity, audio falloff
要达到声音随距离衰减的效果,需要使用3D音效,即把Spatial Blend设为1,然后再调节Min Distance和Max Distance(蓝色线框球体),并选择合适的Volume Rollof ...