使用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的基础知识以及如何 ...
随机推荐
- aopalliance.jar —— 下载地址
下载地址:http://sourceforge.net/projects/aopalliance/files/aopalliance/1.0/aopalliance.zip/download TIPS ...
- HDU 4638 Group(分组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 题意:给出一个数列,若干询问.每次询问区间[L,R]的最少有多少段?每一段是连续的一段且这段内的 ...
- linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用
---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10 一.虚拟网络三种连接方式 当在V ...
- jboss jndi配置部分参数详解
使用的是jboss7.1.1, jndi的配置在$JBOSS_HOME/standalone/configuration/standalone.xml中进行配置.配置jndi时有很多参数,解释下用到的 ...
- linux系统下怎么安装.deb文件
linux系统下怎么安装.deb文件? deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式. 他们不通用(虽然可以转换一下). deb是de ...
- Python3 学习第十弹: 模块学习三之数字处理
math模块 提供基础的数学函数, cos(3.14) = -0.999..(弧度制) acos(1) = 0.0 sqrt(9) = 3.0 degrees(3.14) = 179.9999..(弧 ...
- C#判断字符串为空的几种方法和效率判断
C#判断字符串为空的几种方法和效率判断 string定义 1.1 string str1="":会定义指针(栈),并在内存里划一块值为空的存储空间(堆),指针指向这个空间.1.2 ...
- jQuery1.9+中删除了live以后的替代方法
.live() removed The .live() method has been deprecated since jQuery 1.7 and has been removed in 1.9. ...
- gcc g++ 参数介绍
C和C++ 编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).源 ...
- Maven 安装Jar包到本地仓库
开始cmd: 例1: mvn install:install-file -DgroupId=Issues -DartifactId=beautyeye -Dversion=3.5 -Dpackagin ...