5月 30

golang获取unix time和随机数

比较简单,不做解释。

package main

import(
    "fmt"
    "time"
    "math/rand"
)

func main(){
    //获取unix time
    var a string 
    a = fmt.Sprint(time.Now().UnixNano())
    //获取随机数
    var b string
    ra := rand.New(rand.NewSource(time.Now().UnixNano()))
    b= fmt.Sprint(ra.Intn(10))
    //打印结果
    fmt.Println(a)
    fmt.Println(b)
}

golang获取unix time和随机数

5月 29

post数据到golang服务和python的pypy服务后数据入库库效率测试

  在测试go语言和pypy接收post参数后,数据入库的效率。服务器使用阿里云的基础服务器,512内存单核CentOS6.3 64位服务器。测试还有上传文件部分。此处只列出了部分代码。
  python使用tornado在pypy1.9环境,python代码没有列出。
  go语言代码如下。数据库配置部分写成可以全局调用的。

package main

import (
	"fmt"
        "database/sql"
        _ "github.com/go-sql-driver/mysql"
	"net/http"
)

func mydb()*sql.DB {
    //配置数据库连接地址
    db, e:= sql.Open("mysql", "test:1111111@tcp(192.168.1.130:3306)/test?charset=utf8")
    checkErr(e)
    fmt.Println(db)
    return db
}

func checkErr(err error) {
    if err != nil {
        panic(err)
    }
}

func IndexHandler(w http.ResponseWriter, r *http.Request) {
        //用于获取插入数据的表id
        var get_id string
	if r.Method == "POST" {
            r.ParseForm()
	    //获取获得的参数
	    get_time:=r.FormValue("time")
            get_mac:=r.FormValue("mac")
            get_md5:=r.FormValue("md5")
	    //插入数据
            stm, e := mydb().Prepare("INSERT INTO `video` set mac=?, md5=?, createDate=?")
            checkErr(e)
            result,e:=stm.Exec(get_mac, get_md5, get_time)
            checkErr(e)
	    //获取插入后数据的id
            id,e:= result.LastInsertId()
            checkErr(e)
	    //返回给客户
            get_id = fmt.Sprint(id)
            context := "Insert id:" + get_id
	    w.Write([]byte(context))
        }
}

func main() {
     http.HandleFunc("/", IndexHandler)
     http.ListenAndServe(":8899", nil)
}

  测试结果:单进程情况下,go语言的速度比pypy的稍慢,基本持平相差不到5%。但是go使用内存量占到45%,cpu使用8%左右。pypy使用内存20%,cpu使用在5%左右。如果多进程pypy可以启动4个,go只能启动两个。这样pypy比go的处理速去应该快一倍多。java代码也有测试,使用tomcat7,因为逻辑更复杂,所以不能参加对比,粗略估计go会比java快40%。
测试代码

12月 05

go语言跑在Raspberry pi 上

  之前go语言在HTC的android手机上运行正常,所以在raspberry pi上也应该没有问题。所以测试一下,如果可以又多了一种开发方法。下载go1.0.3.

安装需要的包
$ sudo apt-get install mercurial bison gcc libc6-dev ed gawk make git

配置环境变量,将以下配置放在profile文件的最底部,为了方便直接用go源码编译,直接放在家目录里。
$ sudo vi /etc/profile
export GOARM=5
export GOROOT=/home/pi/go
export GOARCH=arm
export GOOS=linux
export PATH=$PATH;/home/pi/go/bin/

开始编译
$ cd go/src/
$ time ./all.bash

经过漫长的等待终于编译完了,耗时如下。
real 49m48.591s
user 44m33.760s
sys 2m7.540s

直接用之前的代码测试http://www.simonzhang.net/?p=1346。运行成功。

9月 14

golang使用参数

  备忘
package main

import (“fmt”
“flag”
)
//参数名, 参数默认值,参数说明
var (loopnum =flag.Int(“l”,10,”loop num.”)
loopurl =flag.String(“u”,”www.simonzhang.net”,”get url.”)
)

func main() {
flag.Parse()
fmt.Println(“loop num:”, loopnum)
fmt.Println(“url:”, *loopurl)
}

编译后使用
flag -l=11 -u=http://www.simonzhang.net