go原生协程测试
2011 年 1 月 17 日
静态化处理提高运行效率,可以编译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没有后台运行的意思;&才是后台运行