不知不觉用 Go 开发也两年多了. 筹备点经验汇总, 方便后面的同学能快速上手. 
提纲
    1. Go 安装
    2. Go ide 搭建
    3. Go modules 模块管理
    4. Go unit test
    5. Go debug 调试
    6. Go pprof 火焰图 
    7. Go online 调试
    8. Go future 思考
 
1. Go 安装
    Golang   官网 https://golang.org/
    Download 页面 https://golang.org/dl/
    Install  页面 https://golang.org/doc/install 
登录 Golang 官网. 如果访问有问题, 请激发这辈子最大潜力去深入突破此间魔障. 
    别问
    问
    就是不合适
    别多想
    想
    就是没缘分
然后[2019/10/21]点到下载页面, 这里下载的是 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 查看安装版本
 
原本是想通过 window 平台带大家演示一遍提纲中内容. 不过经常待在 ubuntu 旁边, 
只能顺手用 linux 环境给同学演示一遍. 有心人可自行选择环境实操, 思路都差不多.
2. Go ide 搭建
    Download VSCode https://code.visualstudio.com/
这里推荐 VSCode 搭建 Golang 开发换机, 下载 deb 包并安装.
sudo dpkg -i code_1.39.2-1571154070_amd64.deb
筹备下面环境
 
点击 [Install] -End-> [F1] -> [Go: Install/Update Tools] -> [全选] -> [确定]
大概齐都成功后, 对着项目来下 [F5] 跑起来
 
别惊讶, 咱们的 IDE 已经 OK 了!
3. Go modules 模块管理
    Go modules 是 Go 解决包依赖管理方面特别棒的一次尝试. 这里带大家简单先用起来.
有心的同学可以查询更多的相关资料, 或者通过 go mod help 自行晋升. 开始准备素材
code/arithmetic/div.go
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
}
 
code/main.go
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)
}
 
有了上面这些, 开始着手构建
go mod init code
go build
./code
 
越纯粹越懂自己
4. Go unit test
code/arithmetic/div_test.go
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++ { ... } }
有测试比没有要好很多 /(ㄒoㄒ)/~~
5. Go debug 调试
    别深究
    深究
    就是 F5 F10 F11 go -race
 
6. Go pprof 火焰图
筹备素材
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/
更加详细的可以一块查看一下 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=: /home/zhi/pprof/pprof.code.samples.cpu..pb.gz
全有了, 是否如虎添翼不知道, 但知道, 你应对问题的方式方法会多一些.
7. Go online 调试
    delve https://github.com/go-delve/delve
抛开看日志, 也可以在服务摘除后, 通过 delve 进行 b r n c ...
 
佛度有缘人
8. Go future 思考
    Go 许多理念都很普通, 实现方面也很取舍, 没想到最后居然如此的实在, 开发工程杠杠的. 
    个人觉得其一大亮点是为实际生产的工程师服务, 其次为机器服务, 合理的解决二者的痛点.
    关于 Go 未来的思考, 很期待泛型模式的到来. 

  

  
 
 

Go 零基础 30 min 入门的更多相关文章

  1. 零基础程序员入门Linux系统 !如何快速恢复系统?

    新手在学习Linux系统的时候,难免会遇到命令输错,或系统出错的难题.那么如何快速解决呢?本文就先给你一个后悔药,让你快速备份并恢复Linux系统.本文将以Ubuntu为例,在这之前,你需要一台服务器 ...

  2. 【干货】零基础30分钟让你拥有一个完整属于自己的短视频APP系统

      目录 一.附言: 1 二.购买域名和购买服务器: 2 三.搭建服务器环境: 5 四.配置APP前端部分: 8 1.工具以及文件准备: 9 2.配置后端接口地址 11 3.配置APP启动图和启动图标 ...

  3. 【零基础】快速入门爬虫框架HtmlUnit

    迅速的HtmlUnit htmlunit是一款开源的web页面分析工具,理论上来说htmlunit应用于网页的自动化测试,但是相对来说更多人使用它来进行小型爬虫的快速开发.使用htmlunit进行爬虫 ...

  4. php编程零基础如何快速入门。门头沟编程

    昨天遇到一个人,说知道thinktphp,不过几年前的事了. 我先跟他讲了下,xyhcms后台功能,各个版块,以及数据库都介绍了一下. 跟他说了一个功能现场实现,说了实现方法. 然后上机操作,发现他表 ...

  5. 零基础一分钟入门Python

    这篇文章面向所有想学python的小伙伴(甚至你从没听过编程),这篇文章将会带你以最快的速度入门python.赶快上车,时间来不及了... 一,下载和安装python 1.下载: 1.1 python ...

  6. 零基础小白Python入门必看:面向对象之典型魔术方法

  7. 深入浅出java 8 lambda表达式--零基础一分钟入门

    lambda从使用上来说,第一感觉直白的理解就是,少了很多不必要的匿名回调类的写法,比如: public static void main(String[] args) { PlatformQuery ...

  8. 零基础大数据入门教程:Java调用阿里云短信通道服务

    这里我们使用SpringBoot 来调用阿里通信的服务. 阿里通信,双11.收到短信,日发送达6亿条.保障力度非常高. 使用的步骤: 1.1. 第一步:需要开通账户 1.2. 第二步:阅读接口文档 1 ...

  9. 学习笔记(1):零基础掌握 Python 入门到实战-列表与元祖到底该用哪个?(二)...

    立即学习:https://edu.csdn.net/course/play/26676/338778?utm_source=blogtoedu 列表不能通过增加索引增加元素 可以使用list中的app ...

随机推荐

  1. springboot 多模块项目创建

    1.File>new>project  直接点击next 2.输入groupId  .artifactId 3.选择项目保存路劲  finish 4.成功创建多模块项目的根模块 5.创建子 ...

  2. EasySwoole+ElasticSearch打造 高性能 小视频服务系统

    EasySwoole+ElasticSearch打造高性能小视频服务 第1章 课程概述 第2章 EasySwoole框架快速上手 第3章 性能测试 第4章 玩转高性能消息队列服务 第5章 小视频服务平 ...

  3. input和btton的相互使用————小程序

    input和btton的相互使用----小程序 index.js data: { userxx:'1111', }, changeSum(){ // this.data.userxx="ch ...

  4. Java程序语言的后门-反射机制

    在文章JAVA设计模式-动态代理(Proxy)示例及说明和JAVA设计模式-动态代理(Proxy)源码分析都提到了反射这个概念. // 通过反射机制,通知力宏做事情 method.invoke(obj ...

  5. 从零开始入门 K8s | 应用编排与管理(酒祝)

    一.需求来源 背景问题 首先来看一下背景问题.如下图所示:如果我们直接管理集群中所有的 Pod,应用 A.B.C 的 Pod,其实是散乱地分布在集群中. 现在有以下的问题: 首先,如何保证集群内可用 ...

  6. 彻底关闭Windows10的更新

    Windows10的自动更新太恶心,关闭之后总能死灰复燃,更新偶尔占用大量的CPU内存,非常影响使用.而网上大多数都是关闭服务之类的方法,但是关闭之后没过多久又会重新自动启动,如何彻底摆脱wiondo ...

  7. JAVASE知识点总结(二)

    第十三章:多态  一.instanceof 判断一个类是否是指定的类 真则返回true 假则返回false.  二.字段没有多态,只有方法有多态,字段前面是的什么类型,字段就调用谁的,在编译时就已经确 ...

  8. WPF中资源的引用方法

    一.引用同一个程序中的资源 1.使用相对Uri来引用资源,如下所示 img.Source=new BitmapImage(new Uri(@"d"\iamges\Backgroun ...

  9. C#实现请求唯一性校验支持高并发

    使用场景描述: 网络请求中经常会遇到发送的请求,服务端响应是成功的,但是返回的时候出现网络故障,导致客户端无法接收到请求结果,那么客户端程序可能认为判断为网络故障,而重复发送同一个请求.当然如果接口中 ...

  10. Spring框架(三)

    对象依赖关系 Spring中,如何给对象的属性赋值?  [DI, 依赖注入] 1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间 4)自动装配(了解) 5) 注解 代码示例: &l ...