go原生协程测试

静态化处理提高运行效率,可以编译go文件到二进制脚本。进阶使用

1.安装golang环境

a.本机测试

wget -O /tmp/go.tgz "https://dl.google.com/go/go1.12.7.src.tar.gz"
tar -C /usr/local -xzf /tmp/go.tgz && rm -f /tmp/go.tgz
ln -s /usr/local/go/bin/* /usr/local/bin/
[]:~/tmp/dk/golang# vim test.go 
package main

import "fmt"

func main() {
    fmt.Println("hello go!")
}

可以直接go run test.go测试效果,使用go build test.go生成二进制代码:test文件,看到权限自动调整好了不用再chmod,运行./test 得到hello go!。

b.docker容器

docker-hub的 golang官方示例

docker pull golang
# -w:指定工作目录
docker run --name golang -v ~/tmp/dk/golang:/usr/src/app \
    -w /usr/src/app -itd golang

进入容器中使用编译。

2.go的并发测试

这里Windows电脑端编辑器使用VScode,设置参考《 2019 VS Code 远程开发配置(热乎的)
Go 语言 IDE 之 VSCode 配置使用
》。
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")
}

上面主进程先退出,子进程会执行不完。
b.连接数据库

参考《 go语言之行–golang操作redis、mysql大全

go get https://github.com/go-redis/r…

go get “github.com/go-sql-driver/mysql”
go get “github.com/jmoiron/sqlx”
使用golang实现计算CRC-16

3.
nohup和&的区别
& : 指在后台运行
nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行