分享
  1. 首页
  2. 文章

关于Golang语言的web编程的实例及常见问题

rfyiamcool · · 1786 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

多核处理器越来越普及。有没有一种简单的办法,能够让我们写的软件释放多核的威力?是有的。随着Golang, Erlang, Scala等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式有一个极其简洁的内核,还有在此之上丰富的外延。可以解决现实世界中各种各样的问题。


她的logo~

172139800.jpg


Go语言的一个很大的优势就是内置了goroutine机制,使得开发者可以方便地编写并发程序。



go的web编程里,也出现了一个web框架 https://github.com/astaxie/beego

有朋友用过,感觉不错。。。

安装 ,大家要是安装不了,就下载源码编译,看readme 。。。。

Python
1
2
3
4
5
6
7
8
9
easy_install mercurial
oryum install mercurial
hg clone-rrelease https://go.googlecode.com/hg/go
cdgo/src$./all.bash
#打开/etc/profile在最后添加下面两行
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH

先来一个小demo 哈~

153541360.jpg

一个简单的http~ 简单的输出print

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main
import(
"fmt"
"net/http"
"strings"
"log"
)
func sayhelloName(whttp.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"])
fork,v:=ranger.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)//设置监听的端口
iferr!=nil{
log.Fatal("ListenAndServe: ",err)
}
}



154747736.jpg


这里介绍一个老外写的web框架

https://github.com/hoisie/web

写的风格很像web.py flask 。 喜欢这样的东东。

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main
import(
"github.com/hoisie/web"
)
func hello(ctx*web.Context,val string){
fork,v:=rangectx.Params{
println(k,v)
}
}
func main(){
web.Get("/(.*)",hello)
web.Run("0.0.0.0:9999")
}

164820292.jpg

让我们简单的测试下~

客户端:

170048980.jpg


170048122.jpg

服务端:

170221542.jpg

看起来是没有问题,当然用for curl的方法测试,确实有点搓。。。

我们用ab测试下~

源地址 http://rfyiamcool.blog.51cto.com/1030776/1285325

170709839.jpg

用了 2.1秒左右~ 这个还是单核的vm


我们来深入一下这个框架的功能~

234859552.jpg

提交后的结果~

234938762.jpg

这里分享一个go调用外部命令的代码~

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main
import(
"fmt"
"io/ioutil"
"os/exec"
)
func main(){
cmd:=exec.Command("/bin/sh","-c",`ps aux`)
stdout,err:=cmd.StdoutPipe()
iferr!=nil{
fmt.Println("StdoutPipe: "+err.Error())
return
}
stderr,err:=cmd.StderrPipe()
iferr!=nil{
fmt.Println("StderrPipe: ",err.Error())
return
}
iferr:=cmd.Start();err!=nil{
fmt.Println("Start: ",err.Error())
return
}
bytesErr,err:=ioutil.ReadAll(stderr)
iferr!=nil{
fmt.Println("ReadAll stderr: ",err.Error())
return
}
iflen(bytesErr)!=0{
fmt.Printf("stderr is not nil: %s",bytesErr)
return
}
bytes,err:=ioutil.ReadAll(stdout)
iferr!=nil{
fmt.Println("ReadAll stdout: ",err.Error())
return
}
iferr:=cmd.Wait();err!=nil{
fmt.Println("Wait: ",err.Error())
return
}
fmt.Printf("stdout: %s",bytes)
}

大家都会懂的哦~ 和python一样也是调用os模块来执行命令。

大家可以在页面上接收参数,用os模块来执行外部的命令。

100902372.jpg

完事了,先这么招吧。


今天有点忙,等我把一个需求解决了后,然后咱们继续搞~


有疑问加站长微信联系(非本文作者)

本文来自:峰云就她了

感谢作者:rfyiamcool

查看原文:关于Golang语言的web编程的实例及常见问题

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1786 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏