(golang學習)2.goroutine測試,beego框架安裝、api測試(*)

1.併發測試

這裏Windows電腦端編輯器使用 goland。php

a.代碼

goroutine.go:mysql

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")
}

上面主進程先退出,子進程會執行不完。linux

2.以docker鏡像運行

a.本地安裝beego

設置gopath路徑,到工做目錄:git

sed -i '$a export GOROOT=/usr/local/go' /etc/profile
sed -i '$a export GOBIN=$GOROOT/bin' /etc/profile
sed -i '$a export GOPATH=$HOME/gocode' /etc/profile
sed -i '$a export PATH=$PATH:$GOPATH:$GOBIN' /etc/profile
#容器能夠把source換成點 . 
source /etc/profile

查看go env正常。github

[]:~/tmp/dk/golang# go get github.com/astaxie/beego
[]:~/tmp/dk/golang# go get github.com/beego/bee
[]:~/tmp/dk/golang# go get github.com/astaxie/beego/orm
[]:~/tmp/dk/golang# go get github.com/go-sql-driver/mysql
[]:~/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,框架啓動正常。golang

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工具。
參考官網,添加一個頁面:web

# 編輯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 ,正常。sql

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.docker

# 注意所在目錄位置,生成到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.api容器化運行

參考官網《如何爲你的Go應用建立輕量級Docker鏡像?》、《dockerfile方式建立beego鏡像》。主要分爲編譯階段和生產階段:

a.編譯階段

Dockerfile:

FROM alpine:3.10 


#MAINTAINER 維護者信息
MAINTAINER cffycls@foxmail.com

# dependencies required for running "phpize"
ENV GOLANG_VERSION 1.12.7

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    && apk update && cd /tmp \
    && apk add --no-cache --virtual .build-deps \
        bash \
        gcc \
        musl-dev \
        openssl \
        go \
    && wget -O go.tgz "https://studygolang.com/dl/golang/go${GOLANG_VERSION}.src.tar.gz" \
    && mkdir -p /usr/local/go && cd /usr/local/go \
    && tar -xzf go.tgz --strip-components 1 \
    && rm -f /tmp/go.tgz \
    #默認安裝包的路徑
    && sed -i '$a export GOROOT=/usr/local/go' /etc/profile \
    && sed -i '$a export GOBIN=$GOROOT/bin' /etc/profile \
    && sed -i '$a export GOPATH=$HOME/gocode' /etc/profile \
    && sed -i '$a export PATH=$PATH:$GOPATH:$GOBIN' /etc/profile \
    && source /etc/profile && echo $PATH \
    #安裝beego依賴
    && go get github.com/astaxie/beego \
    && go get github.com/beego/bee \
    && go get github.com/astaxie/beego/orm \
    && go get github.com/go-sql-driver/mysql
    
#源碼路徑。按照golang默認約定,go run,go install等命令的當前工做路徑(即在此路徑下執行上述命令)。
WORKDIR $GOPATH/src
#添加全部須要編譯的應用代碼
COPY beeapi .

# 編譯一個靜態的go應用(在二進制構建中包含C語言依賴庫)
#RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo .
RUN CGO_ENABLED=0 GOOS=linux bee build -a -installsuffix cgo .

# 設置咱們應用程序的啓動命令
#CMD ["./beeapi"]

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端能夠訪問。

b.目標是代碼提交重啓服務自動更新api

e.後臺運行

nohup和&的區別
& : 指在後臺運行

nohup : 不掛斷的運行,注意並無後臺運行的功能,,就是指,用nohup運行命令能夠使命令永久的執行下去,和用戶終端沒有關係,例如咱們斷開SSH鏈接都不會影響他的運行,注意了nohup沒有後臺運行的意思;&纔是後臺運行
bohup CMD &
針對git clone下載過慢的問題

相關文章
相關標籤/搜索