go的web编程里,也出现了一个web框架 https://github.com/astaxie/beego
有朋友用过,感觉不错。。。
安装 ,大家要是安装不了,就下载源码编译,看readme 。。。。
easy_install mercurial or yum install mercurial hg clone -r release https://go.googlecode.com/hg/ go cd go/src ./all.bash #打开/etc/profile在最后添加下面两行 export GOROOT=/usr/local/go export PATH=GOROOT/bin:$PATH
先来一个小demo 哈~
一个简单的http~ 简单的输出print
package main
import (
"fmt"
"net/http"
"strings"
"log"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析参数,默认是不会解析的
fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
fmt.Println(r.Form["url_long"])
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "这里是峰云的测试页面哈~!") //这个写入到w的是输出到客户端的
fmt.Fprintf(w, "\n") //这个写入到w的是输出到客户端的
}
func main() {
http.HandleFunc("/", sayhelloName) //设置访问的路由
err := http.ListenAndServe("0.0.0.0:9090", nil) //设置监听的端口
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
这里介绍一个老外写的web框架
写的风格很像web.py flask 。 喜欢这样的东东。
package main
import (
"github.com/hoisie/web"
)
func hello(ctx *web.Context, val string) {
for k,v := range ctx.Params {
println(k, v)
}
}
func main() {
web.Get("/(.*)", hello)
web.Run("0.0.0.0:9999")
}
让我们简单的测试下~
客户端:
服务端:
看起来是没有问题,当然用for curl的方法测试,确实有点搓。。。
我们用ab测试下~
用了 2.1秒左右~ 这个还是单核的vm
我们来深入一下这个框架的功能~
提交后的结果~
这里分享一个go调用外部命令的代码~
package main
import (
"fmt"
"io/ioutil"
"os/exec"
)
func main() {
cmd := exec.Command("/bin/sh", "-c", `ps aux`)
stdout, err := cmd.StdoutPipe()
if err != nil {
fmt.Println("StdoutPipe: " + err.Error())
return
}
stderr, err := cmd.StderrPipe()
if err != nil {
fmt.Println("StderrPipe: ", err.Error())
return
}
if err := cmd.Start(); err != nil {
fmt.Println("Start: ", err.Error())
return
}
bytesErr, err := ioutil.ReadAll(stderr)
if err != nil {
fmt.Println("ReadAll stderr: ", err.Error())
return
}
if len(bytesErr) != 0 {
fmt.Printf("stderr is not nil: %s", bytesErr)
return
}
bytes, err := ioutil.ReadAll(stdout)
if err != nil {
fmt.Println("ReadAll stdout: ", err.Error())
return
}
if err := cmd.Wait(); err != nil {
fmt.Println("Wait: ", err.Error())
return
}
fmt.Printf("stdout: %s", bytes)
}
大家都会懂的哦~ 和python一样也是调用os模块来执行命令。
大家可以在页面上接收参数,用os模块来执行外部的命令。
完事了,先这么招吧。
今天有点忙,等我把一个需求解决了后,然后咱们继续搞~