Go 零基础 30 min 入门
不知不觉用 Go 开辟也两年多了. 筹备点履历汇总, 方便后面的同学能快速上手.<br />
提要
<br />
1. Go 安装
2. Go ide 搭建
3. Go modules 模块管理
4. Go unit test
5. Go debug 调试
6. Go pprof 火焰图
7. Go online 调试
8. Go future 思考
<strong>1. Go 安装</strong>
<br />
Golang 官网 https://golang.org/
Download 页面 https://golang.org/dl/
Install页面 https://golang.org/doc/install
<br />
登录 Golang 官网. 假如访问有标题, 请激发这辈子最大潜力去深入突破此间魔障.
<br />
别问
问
就是不合适
<br />
别多想
想
就是没缘分
<br />
然后点到下载页面, 这里下载的是 go1.12.12.linux-amd64.tar.gz
随后按照安装页面提示操纵. 这里简单梳理以下脚本
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.12.12.linux-amd64.tar.gz
sudo vi /etc/profile
Shift + G
i
export PATH=$PATH:/usr/local/go/bin
~
wq!
source /etc/profile
通过 go version 查察安装版本
<div align="center"></div>
原本是想通过 window 平台带大家演示一遍提要中内容. 不过常常待在 ubuntu 旁边,
只能顺手用 linux 环境给同学演示一遍. 故意人可自行选择环境实操, 思路都差不多.
<br />
<strong>2. Go ide 搭建</strong>
<br />
Download VSCode https://code.visualstudio.com/
<br />
这里推荐 VSCode 搭建 Golang 开辟换机, 下载 deb 包并安装.
sudo dpkg -i code_1.39.2-1571154070_amd64.deb
筹备下面环境
<div align="center"></div>
点击 -End-> -> -> [全选] -> [确定]
<div align="center"></div>
<br />
大概齐都乐成后, 对着项目来下 跑起来
<div align="center"></div>
别惊奇, 咱们的 IDE 已经 OK 了!
<br />
<strong>3. Go modules 模块管理</strong>
<br />
Go modules 是 Go 解决包依靠管理方面特别棒的一次实验. 这里带大家简单先用起来.
故意的同学可以查询更多的相关资料, 大概通过 go mod help 自行晋升. 开始准备素材
<br />
<strong>code/arithmetic/div.go</strong>
package arithmetic
import "errors"
// Div 除法操纵
func Div(a, b int) (c int, err error) {
if b == 0 {
err = errors.New("divisor is 0")
return
}
c = a / b
return
}
<strong>code/main.go</strong>
package main
import (
"fmt"
"code/arithmetic"
)
func main() {
println("Hello, 世界")
c, err := arithmetic.Div(1, 0)
fmt.Printf("c = %d, err = %+v\n", c, err)
}
<div align="center"></div>
有了上面这些, 开始着手构建
go mod init code
go build
./code
<div align="center"></div>
越纯粹越懂本身
<br />
<strong>4. Go unit test</strong>
<br />
<strong>code/arithmetic/div_test.go</strong>
package arithmetic
import (
"testing"
"math/rand"
)
func TestDiv(t *testing.T) {
var (
a, b, c int
err error
)
a, b = 1, 2
c, err = Div(a, b)
t.Logf("a = %d, b = %d, c = %d, err = %+v", a, b, c, err)
a, b = 1, 0
c, err = Div(a, b)
t.Logf("a = %d, b = %d, c = %d, err = %+v", a, b, c, err)
}
func BenchmarkDiv(b *testing.B) {
for i := 0; i < b.N; i++ {
Div(rand.Int(), rand.Int())
}
}
Go 中单元测试好简单, 特殊一点要求就是定名, 总结起来有下面几小点
1. 文件命必须是 *_test.go
2. 测试函数 func Test*(t *testing.T) { ... }
3. 性能测试函数 func Benchmark*(b *testing.B) { for i := 0; i < b.N; i++ { ... } }
<div align="center"></div>
有测试比没有要好很多 /(ㄒoㄒ)/~~
<br />
<strong>5. Go debug 调试</strong>
<br />
别深究
深究
就是 F5 F10 F11 go -race
<div align="center"></div>
<br />
<strong>6. Go pprof 火焰图</strong>
<br />
筹备素材
package main
import (
"fmt"
"log"
"time"
"net/http"
_ "net/http/pprof"
"code/arithmetic"
)
func main() {
println("Hello, 世界")
c, err := arithmetic.Div(1, 0)
fmt.Printf("c = %d, err = %+v\n", c, err)
for i := 0; i < 1000000; i++ {
go func() {
time.Sleep(time.Second * 10)
}()
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {})
err = http.ListenAndServe(":8088", nil)
if err != nil {
log.Fatalf("ListenAndServe: %+v\n", err)
}
}
启动服务, 查察程序运行状态
go pprof debug http://127.0.0.1:8088/debug/pprof/
<div align="center"></div>
<br />
更加详细的可以一块查察一下 cpu 运行火焰图
go tool pprof http://127.0.0.1:8088/debug/pprof/profile -seconds 10
随后会生成一个 profile 相关文件, 用工具打开 pprof.code.samples.cpu.001.pb.gz
go tool pprof -http=:8081 /home/zhi/pprof/pprof.code.samples.cpu.001.pb.gz
<div align="center"></div>
全有了, 是否为虎傅翼不知道, 但知道, 你应对标题标方式方法会多一些.
<br />
<strong>7. Go online 调试</strong>
<br />
delve https://github.com/go-delve/delve
<br />
抛开看日志, 也可以在服务摘除后, 通过 delve 举行 b r n c ...
<div align="center"></div>
佛度有缘人
<br />
<strong>8. Go future 思考</strong>
<br />
Go 很多理念都很平凡, 实现方面也很弃取, 没想到末了居然云云的着实, 开辟工程杠杠的.
个人觉得其一大亮点是为实际生产的工程师服务, 其次为呆板服务, 合理的解决二者的痛点.
<br />
关于 Go 未来的思考, 很等候泛型模式的到来.
<p> </p>
<p> </p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/life2refuel/p/11729063.html" target="_blank">https://www.cnblogs.com/life2refuel/p/11729063.html</a>
页:
[1]