(golang学习)2.goroutine测试,beego框架安装、api测试(*)

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

1.并发测试

这里Windows电脑端编辑器使用 goland。

a.代码

goroutine.go:

package main

import (
    "fmt"
    "time"
)

func newTask() {
    i := 0
    for {
        i++
        fmt.Printf("-- new goroutine task: i = %d\n", i)
        time.Sleep(1 * time.Second) //延时1s
        if i >= 20 {
            break;
        }
    }
}

func main() {
    go newTask() //新建一个协程任务

    i := 0
    for {
        i++
        fmt.Printf("main task: i = %d\n", i)
        time.Sleep(1 * time.Second) //延时1s
        if i >= 10 {
            break;
        }
    }
    //这里被for阻塞
    fmt.Printf("main OK!\n")
}

上面主进程先退出,子进程会执行不完。

2.以docker镜像运行

a.安装beego

设置gopath路径,到工作目录:

[]:~/tmp/dk/golang# vim /etc/profile
export GOPATH=/root/tmp/dk/golang
export GOBIN=/usr/local/go/bin
export PATH=$PATH:$GOPATH:$GOBIN
[]:~/tmp/dk/golang# source /etc/profile
[]:~/tmp/dk/golang# . /etc/profile

查看go env

[]:~/tmp/dk/golang# go get github.com/astaxie/beego
[]:~/tmp/dk/golang# go get github.com/beego/bee
[]:~/tmp/dk/golang# ln -s /usr/local/go/bin/bee /usr/local/bin/bee

执行 bee new beego,go run src/beego/main.go 发现与已有端口冲突,修改src/github.com/astaxie/beego/config.go中219行HTTPPort为9600,框架启动正常。

b.web访问

Handler crashed with error can't find templatefile in the path:views/index.tpl

访问不了,查看src/beego/main.go文件发现,BeeApp.Run()运行依然在src/github.com/astaxie/beego/beego.go,修改src/github.com/astaxie/beego/config.go回到8080。因为是用bee命令创建的,修改app.conf端口后,所以进入项目根目录使用bee run即可,web打开正常。注意使用bee工具。
参考官网,添加一个页面:

# 编辑routers/route.go,添加
beego.Get("/hi",func(ctx *context.Context){
    ctx.Output.Body([]byte("hello world"))
})
# import添加
"github.com/astaxie/beego/context"

访问 http://remote_host:9600/hi 输出 hello world ,正常。

c.api项目

参考《官方api文档》:
go get -u github.com/beego/bee
go get -u github.com/astaxie/beego
然后进入到你的GOPATH/src目录,执行命令bee api beeapi,进入目录cd beeapi,执行命令bee run -downdoc=true -gendoc=true.

# 注意所在目录位置,生成到src目录下:
[]:~/tmp/dk/golang# bee api beeapi
[]:~/tmp/dk/golang/src/beeapi# bee generate appcode -driver=mysql -conn="root:123456@tcp(172.1.11.11:3306)/test"
[]:~/tmp/dk/golang/src/beeapi# bee run -downdoc=true -gendoc=true

输入bee help 可以看到api的参数,bee generate官方文档。修改端口为9601,进入swapper的web页面,找到user-->try复制请求 curl -X GET "http://x.x.x.x:9601/v1/user/?query=id%3A1" -H "accept: application/json" 返回及解析正常。

3.容器化运行

参考官网《如何为你的Go应用创建轻量级Docker镜像?》、《dockerfile方式创建beego镜像》。主要分为编译阶段和生产阶段:

a.编译阶段

#为下面构建的镜像命名
FROM golang AS gobuild 

#设置环境变量
ENV GOROOT /usr/local/go
ENV GOPATH /home/go
ENV PATH $PATH:$GOROOT/bin:$GOPATH/bin 
#安装beego依赖
RUN go get github.com/astaxie/beego
RUN go get github.com/beego/bee
RUN go get github.com/astaxie/beego/orm
RUN go get github.com/go-sql-driver/mysql

# 设置我们应用程序的工作目录,与开发环境一致
WORKDIR $GOPATH/src/beeapi
# 添加所有需要编译的应用代码
ADD src/beeapi .

# 编译一个静态的go应用(在二进制构建中包含C语言依赖库)
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo .

# 设置我们应用程序的启动命令
CMD ["./beeapi"]

RUN pwd && ls -l
#beeapi端口,可以不设置
#EXPOSE 9601

docker build -t beeapi .
docker run -it --name beeapi -p 9601:9601 --rm beeapi
容器启动正常,网页访问 http://xx.xx:9601/swagger/ 失败。查看宿主机端口监听正常,进入容器 docker exec -it beeapi bash,bee run main.go,启动完成后网页可以访问(报了个数据库连接超时的错误),刷新web端可以访问。
两点问题:编译的beeapi有16M,./beeapi可以运行,但交互日志不正常;mysql连接超时。

b.第一阶段的问题解决

e.后台运行

nohup和&的区别
& : 指在后台运行

nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行
bohup CMD &
针对git clone下载过慢的问题


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

本文来自:Segmentfault

感谢作者:沧浪水

查看原文:(golang学习)2.goroutine测试,beego框架安装、api测试(*)

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

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