golang web sample

一、学习想法   用两天的时间学习golang,但这次是先不看书的,直接写代码先。   我们常习惯边看书边学习写代码,但发现过程是比较缓慢的,所以我就先想写代码, 边写边查。就我们所知,web app一般是基于MVC框架,那么我可以先写数据层,从先写 数据库查数据开始,可以用DAO模式,但这里我只是用一个简单的sample,没有那么复杂。   接着写完数据层,再写视图层,视图层即为app逻辑层;之后再写http前端渲染层。 一步一步,遇到不懂就查。 二、学习资源   Golang电子书   An...阅读全文

博客园 2014-08-04 01:18 zhuangzebo

golang系统性能监控初探

系统服务(这里不局限于golang写的后台服务,也包括c++,java等后台语言)需要考虑的两个问题 1. 系统的资源使用情况(cpu利用率,内存分配情况等,runtime和syscall都提供了支持,这个是系统内部性质,往往是设计系统资源问题,需要在设计的时候慎重考虑) 2. 系统的服务情况(就是服务时延,这个是client可以直接感知的,往往是client最关注的,决定了服务的qps)      提前评估系统的资源消耗是很重要的,在公司里面,能提供选择的机器类型是很多种的。比如腾讯,往往动则...阅读全文

博客园 2014-09-13 22:57 weijiaen

ubuntu下使用golang、qml与ubuntu sdk开发桌面应用 (简单示例)

找了很长时间go的gui库,试了gtk,准备试qt的时候发现了这个qml库,试了下很好用。 ##准备工作 **1、Go 1.2RC1** go的版本应该不能低于这个,我是在1.2RC发布当天升级后发现的qml,并测试的。 **2、qml** 项目主页 https://github.com/niemeyer/qml 目前还是alpha版。 项目主页里面有各个平台的安装方法 装好后会顺带把qtcreator的ubuntu sdk plugin也给装上。 然后运行qml的示例程序 g...阅读全文

博客园 2013-09-23 00:43 hangxin1940

golang的闭包和普通函数调用区别

先看一段程序     package main import (  "fmt") func main() {   a := []int{1, 2, 3}   for _, i := range a {     fmt.Println(i)     defer p(i)   } }  func p(i int) {  fmt.Println(i) } 运行这段程序,输出结果为 1 2 3 3 2 1 这里就是普通的函数调用,每次调用func p时,完成 i 的值复制,然后打印,此时 i 值复制了3...阅读全文

博客园 2014-08-11 16:36 liangDream

golang:高性能消息队列moonmq的简单使用

在上一篇moonmq的介绍中(这里),我只简短的罗列了一些moonmq的设计想法,可是对于怎样使用并没有具体说明,公司同事无法非常好的使用。 对于moonmq的使用,事实上非常easy,例子代码在这里,我们仅仅须要处理好broker,consumer以及publisher的关系就能够了。 首先,我们须要启动一个broker,由于moonmq如今仅仅支持tcp的自己定义协议,所以broker启动的时候须要指定一个listen address。 #启动broker ./simple_broker...阅读全文

博客园 2014-06-04 12:03 zfyouxi

golang web编程:简单的会话(使用sessions包)

网站不能根据来访的ip来确定来访者的身份,ip加端口号也不行.一般都是通过用户名密码来确定用户身份的,但用户也不能每次访问网页时都手动输入一次用户名和密码啊,这样太累了. 一个最简单的想法就是让浏览器帮我们输入,但是http协议本身没有夹带用户名密码的功能,而且有时我们的需求又不只是用户名和密码这么简单,比如说我们还想在浏览器和网页服务器之间传递用户的id,上次访问网站的时间等,每个网站的要求都不一样,所谓众口难调. 现在的做法是,浏览器允许网页服务器在浏览器里存一小段数据,什么数据都行,你自己...阅读全文

博客园 2013-03-29 09:38 deansinaean

golang使用pprof检查goroutine泄露

有一段时间,我们的推送服务socket占用非常不正常,我们自己统计的同一时候在线就10w的用户,可是占用的socket居然达到30w,然后查看goroutine的数量,发现已经60w+。 每一个用户占用一个socket,而一个socket,有read和write两个goroutine,简化的代码例如以下: c, _ := listerner.Accept() go c.run() func (c *conn) run() { go c.onWrite() c.onRead(...阅读全文

博客园 2014-08-15 14:21 mfrbuaa

golang实现tcp接入服务器

接入服务器和后端业务服务其维持tcp连接,多个前端请求通过接入服务器访问后端业务服务器,接入服务器可以方便增加路由功能,维护多个业务服务器,根据消息ID路由到具体的业务服务器。 项目目录如下 simplelotus   src     lotus       main.go     lotuslib       tcplotus.go     test       tcpclient.go       tcpserver.go   install install源码如下: #!/usr/...阅读全文

博客园 2014-07-19 11:08 ciaos

我为什么选择go语言

这里,我并不打算引起语言争论的口水仗,我并不是什么大牛,对语言的造诣也不深,只是想通过自己实际的经历,来说说为什么我在项目中选择go。 其他语言的经历 C++ 在接触go之前,我已经有多年的c++开发经验。主要用在游戏服务端引擎开发以及P2P上面,那可是一段痛并快乐的时期,以至于我看到任何的程序钉子问题都觉得可以用c++这把锤子给敲定。但是对于互联网项目开发来说,除非你的团队整体的c++技术水平nb,并且有很强的代码规范,不然真可能是一场灾难,更别说我们现有团队几乎没其他人会这玩意了。 ...阅读全文

开源中国博客 2014-05-11 16:30 siddontang

golang 应用的部署相关技术

nohup命令 在 linux 下面部署,我们可以利用 nohup 命令,把应用部署在后端,如下所示: nohup ./yourapp & 这样你的应用就跑在了 Linux 系统的守护进程 nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。 一般如何如下两种方式使用它: nohup command 或者 ...阅读全文

博客园 2014-06-19 20:57 ghj1976

golang 处理Json 数组

今天遇到个接口需要处理一个json的map类型的数组,开始想法是用simple—json里的Array读取数组,然后遍历数组取出每个map,然后读取对应的值,在进行后续操作,貌似很简单的工作,却遇到了一个陷阱。 Json格式类似下边: {"code":0 ,"request_id": xxxx ,"code_msg":"" ,"body":[{ "device_id": "xxxx" ,"device_hid": "xxxx" }] , "count":0}  ...阅读全文

CSDN博客 2014-06-06 11:18 u010471121

golang 聊天室

最近看了一些关于golang的资料,发现它的WEBSOCKT实现真起来真的很容易,下面是代码 go.net/websocket是需要安装的,这个自己装上就行 package main import (     "container/list"     "fmt"     "go.net/websocket"     "io"     "net/http" ) var connid int var conns *list.List func Chat(ws *websocket.Conn)...阅读全文

CSDN博客 2014-07-25 11:56 lucifer_qiao

golang 中的 类型判断

golang 中的 类型判断 类似于javascript中typeof 和 java中 instanceof 比如 var a interface{} newA,ok:=a.(string) 如果ok 是 true 则说明 变量a 是字符串类型,而newA就是string类型的变量,a的实际值 a.(type) 返回的是 a的 类型, 注意他返回的不是一个 字符串表示 string int 这样表示a的类型 a.(type)是和switch 搭配使用的 switch vtype:=v.(type...阅读全文

CSDN博客 2013-04-15 23:51 suncaishen

golang实现的一个小游戏–猜数字

原文同步至:http://www.waylau.com/golang-game-guess-numbe/ 随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了, 代码如下: package main import ( "bufio" "fmt" "math/rand" "os" "strconv" "time" ) var ( endNum int //设置生成数的范围 ) func main() { i := createRandom...阅读全文

CSDN博客 2013-05-06 08:46 kkkloveyou