Go语言环境安装完成后,可以使用 go env命令查看环境变量,打开命令终端执行go env命令,输出内容如下:
~~~
GOARCH="amd64"
GOBIN="/Users/***/Desktop/go/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/***/Desktop/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin\_amd64"
GCCGO="gccgo"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/pr/llzpdzcn6n7crtrjmpmwyjxm0000gn/T/go-build496244169=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO\_ENABLED="1"
CGO\_CFLAGS="-g -O2"
CGO\_CPPFLAGS=""
CGO\_CXXFLAGS="-g -O2"
CGO\_FFLAGS="-g -O2"
CGO\_LDFLAGS="-g -O2"
PKG\_CONFIG="pkg-config"
~~~
~~~
> runtime 包 包含与 Go 的运行时系统交互的操作,例如控制 goroutines 的函数。
> 也包含 reflect 包使用的低级别的类型信息;查看 reflect 的文档了解运行时类型的可编程接口。
> 以下环境变量($name 或 %name% 取决于主机操作系统)控制 Go 程序的运行时行为,其含义和用途可能会随版本发布而变化。
~~~
### GOGC
`GOGC`变量设置初始垃圾收集目标百分比。
当新分配的数据与上一次收集后剩余的活动数据的比率达到此百分比时,将触发收集。
默认值为`GOGC = 100`。
设置`GOGC = off`会完全禁用垃圾收集器。
`runtime/debug`包的`SetGCPercent`函数允许在运行时更改此百分比。
### GODEBUG
`GODEBUG`变量控制运行时内的调试变量。
它是以逗号分隔的`name = val`对列表,用于设置这些命名变量:
~~~
allocfreetrace:设置 `allocfreetrace = 1` 会导致对每个对象的分配和释放进行概要分析和栈跟踪。
clobberfree:设置 `clobberfree = 1` 使垃圾回收器在释放对象时用错误内容破坏对象的内存内容。
cgocheck:
设置 `cgocheck = 0` 禁用使用 cgo 将 Go 指针错误传递到非 Go 代码的所有包检查。
设置 `cgocheck = 1`(默认值)可以启用相对便宜的检查,这些检查可能会遗漏一些错误。
设置 `cgocheck = 2` 启用昂贵的检查,这些检查不会遗漏任何错误,但是会导致程序运行速度变慢。
efence:
设置 `efence = 1` 会导致分配器以某种模式运行,在该模式下每个对象都分配在一个唯一的页面上,地址永远不会被回收。
gccheckmark:
设置 `gccheckmark = 1` 可以通过在 STW 时执行第二次标记传递来验证垃圾收集器的并发标记阶段。
如果第二次传递找到了一个并发标记未找到的可达对象,垃圾收集器将 panic。
gcpacertrace:设置 `gcpacertrace = 1` 会导致垃圾收集器打印有关并发 pacer 内部状态的信息。
gcshrinkstackoff:
设置 `gcshrinkstackoff = 1` 禁止将 goroutines 移动到较小的栈上。
在这种模式下,goroutine 的栈只能增长。
gcstoptheworld:
设置 `gcstoptheworld = 1` 禁用并发垃圾收集,使每个垃圾收集成为一个 STW 事件。
设置 `gcstoptheworld = 2` 还会在垃圾收集完成后禁用并发清除。
~~~
* * *
~~~
gctrace:
设置 `gctrace = 1` 会导致垃圾收集器在每次收集时向标准错误输出发出一行,
汇总收集的内存量和暂停的长度。此行的格式可能会发生变化。
目前格式是:
gc # @#s #%: #+#+# ms clock, #+#/#/#+# ms cpu, #->#-># MB, # MB goal, # P
其中字段含义如下('#' 代表数字):
gc # 每次 GC 时递增的 GC 编号
@#s 程序运行的秒数
#% 自程序启动后在 GC 中花费的时间百分比
#+...+# GC 各阶段的挂钟时间(wall-clock)/CPU 时间
#->#-># MB GC 开始时的堆大小、GC 结束时的堆大小和活动堆大小
# MB goal 目标堆大小
# P 使用的处理器数量
这些阶段是 stop-the-world(STW)清除终止(sweep termination),
并发标记和扫描,以及 STW 标记终止(mark termination)。
`mark/scan` 的 CPU 时间被分解为辅助时间(根据分配执行的 GC)、后台 GC 时间和空闲 GC 时间。
如果该行以 `"(forced)"` 结尾,则此 GC 由 `runtime.GC()` 调用强制执行。
~~~
> **挂钟时间:**
>
> 根据计算机的内部时钟流逝的时间,这应该与外界的时间相匹配。
>
> 这与 CPU 使用率无关; 它仅供参考。
>
>
> 如果挂钟时间 < CPU 时间,那么您正在并行执行一个程序。
>
>
>
> 如果挂钟时间 > CPU时间,则表示您正在等待磁盘,网络或其他设备。
~~~
将 `gctrace` 设置为任何大于 0 的值也会导致垃圾收集器在将内存释放回系统时发出摘要。
将内存返回到系统的这个过程称为清除(`scavenging`)。
此摘要的格式可能会更改。
目前格式是:
scvg#: # MB released printed only if non-zero
scvg#: inuse: # idle: # sys: # released: # consumed: # (MB)
其中字段含义如下('#' 代表数字):
scvg# 清除周期数,每次清除时递增
inuse: # MB 已使用或部分使用的 spans
idle: # MB spans 待清除
sys: # 从系统映射的 MB
released: # 释放到系统的 MB
consumed: # 从系统中分配的 MB
~~~
* * *
~~~
madvdontneed:
设置 madvdontneed = 1 当将内存返回到内核时,将在 Linux 上使用 MADV_DONTNEED 而不是 MADV_FREE。
这效率较低,但会导致 RSS(resident set size 常驻内存集)数量下降得更快。
~~~
> madvise() 系统调用允许一个了解其内存行为的进程将其描述给系统,给予使用内存的建议。
>
>
>
> **int
> madvise(void \*addr, size\_t len, int advice);**
>
>
> 系统可以使用传入的建议来更改其虚拟内存分页策略。
>
>
> 此建议可以提高应用程序和系统性能。建议有很多种其中两种:
>
>
> **MADV\_DONTNEED:**
> 表示应用程序不希望很快访问此地址范围。
>
>
> **MADV\_FREE:**
> 表示应用程序不需要此地址范围中包含的信息,因此可以立即重用这些页面。
> 地址范围仍然有效。
~~~
memprofilerate:
设置 `memprofilerate = X` 将更新 runtime.MemProfileRate 的值。
设置为 0 时,禁用内存分析。
MemProfileRate 控制在内存概要文件中记录和报告的内存分配比例。
分析器的目标是对每 `MemProfileRate` 字节的平均分配进行抽样。
要在概要文件中包含每个已分配的块,请将 `MemProfileRate` 设置为 1。
要完全关闭分析,请将 `MemProfileRate` 设置为 0。
处理内存概要文件的工具假设概要文件速率在程序的整个生命周期中是恒定的,并且等于当前值。
更改内存分析速率的程序应该只改变一次,在程序执行过程中越早越好(例如,在 `main` 的开头)。
var MemProfileRate int = 512 * 1024
~~~
* * *
~~~
invalidptr:
默认 `invalidptr = 1`,如果在指针类型的位置中发现无效的指针值(例如,1),
则会导致垃圾收集器和栈复制器使程序 crash。
设置 `invalidptr = 0` 将禁用此检查。
这应该只被用作诊断错误代码的临时解决方案。
真正的解决方案是不将整数存储在指针类型的位置。
~~~
* * *
~~~
sbrk:
设置 `sbrk = 1` 用一个简单的分配器替换内存分配器和垃圾收集器,
该分配器从操作系统获取内存并且永远不会回收任何内存。
~~~
* * *
~~~
scavenge:
`scavenge = 1` 启用堆清除程序的调试模式。
~~~
* * *
~~~
scheddetail:
设置 `schedtrace = X` 和 `scheddetail = 1` 会导致调度程序每 `X` 毫秒发出一次详细的多行信息,
描述`调度程序`,`处理器`,`线程` 和 `goroutines` 的状态。
schedtrace:
设置 `schedtrace = X` 使调度程序每 `X` 毫秒发出一行标准错误,汇总调度程序状态。
~~~
* * *
~~~
tracebackancestors:
设置 `tracebackancestors = N` 使用创建 `goroutines` 的栈扩展回溯,
其中 `N` 限制要报告的祖先 `goroutines` 的数量。
这也扩展了 `runtime.Stack` 返回的信息。
祖先的 `goroutine IDs` 将引用创建时 goroutine 的 ID;
这个 ID 有可能被重用于另一个 goroutine。
将 `N` 设置为 0 将不报告任何祖先信息。
~~~
`net`,`net/http`和`crypto/tls` 也引用`GODEBUG`中的调试变量,有关详细信息,请参阅这些包的文档。
### GOMAXPROCS
`GOMAXPROCS`变量限制了可以同时执行用户级 Go 代码的操作系统线程数
(即,可以同时执行的最大`CPU`数)。
代表 Go 代码在系统调用中可以阻塞的线程数没有限制;那些不计入`GOMAXPROCS`限制。
该包的`GOMAXPROCS`函数查询并更改限制。
### GOTRACEBACK
`GOTRACEBACK`变量控制 Go 程序因未恢复的`panic`或意外的运行时条件而失败时生成的输出量。
默认情况下,失败会打印当前`goroutine`的栈跟踪,省略运行时系统内部的函数,然后使用退出代码`2`退出。
如果当前`goroutine`或者故障都不在运行时内部,则故障会打印所有`goroutines`的栈跟踪。
* `GOTRACEBACK = none`完全省略了 goroutine 栈跟踪。
* `GOTRACEBACK = single`(默认值)的行为如上所述。
* `GOTRACEBACK = all`为用户创建的所有 goroutines 添加栈跟踪。
* `GOTRACEBACK=system`就像`"all"`,但为运行时函数添加了栈帧,并显示了运行时内部创建的 goroutine。
* `GOTRACEBACK=crash`就像`"system"`,但是以特定于操作系统的方式 crash 而不是退出。例如,在`Unix`系统上,`crash`引发`SIGABRT`以触发核心转储(`core dump`)。
由于历史原因,`GOTRACEBACK`设置`0`,`1`和`2`分别是`none`,`all`和`system`的同义词。
`runtime/debug`包的`SetTraceback`函数允许在运行时增加输出量,但不能减少到低于环境变量指定的输出量。
- 序言
- 目录
- 环境搭建
- Linux搭建golang环境
- Windows搭建golang环境
- Mac搭建golang环境
- Go 环境变量
- 编辑器
- vs code
- Mac 安装vs code
- Windows 安装vs code
- vim编辑器
- 介绍
- 1.Go语言的主要特征
- 2.golang内置类型和函数
- 3.init函数和main函数
- 4.包
- 1.工作空间
- 2.源文件
- 3.包结构
- 4.文档
- 5.编写 Hello World
- 6.Go语言 “ _ ”(下划线)
- 7.运算符
- 8.命令
- 类型
- 1.变量
- 2.常量
- 3.基本类型
- 1.基本类型介绍
- 2.字符串String
- 3.数组Array
- 4.类型转换
- 4.引用类型
- 1.引用类型介绍
- 2.切片Slice
- 3.容器Map
- 4.管道Channel
- 5.指针
- 6.自定义类型Struct
- 流程控制
- 1.条件语句(if)
- 2.条件语句 (switch)
- 3.条件语句 (select)
- 4.循环语句 (for)
- 5.循环语句 (range)
- 6.循环控制Goto、Break、Continue
- 函数
- 1.函数定义
- 2.参数
- 3.返回值
- 4.匿名函数
- 5.闭包、递归
- 6.延迟调用 (defer)
- 7.异常处理
- 8.单元测试
- 压力测试
- 方法
- 1.方法定义
- 2.匿名字段
- 3.方法集
- 4.表达式
- 5.自定义error
- 接口
- 1.接口定义
- 2.执行机制
- 3.接口转换
- 4.接口技巧
- 面向对象特性
- 并发
- 1.并发介绍
- 2.Goroutine
- 3.Chan
- 4.WaitGroup
- 5.Context
- 应用
- 反射reflection
- 1.获取基本类型
- 2.获取结构体
- 3.Elem反射操作基本类型
- 4.反射调用结构体方法
- 5.Elem反射操作结构体
- 6.Elem反射获取tag
- 7.应用
- json协议
- 1.结构体转json
- 2.map转json
- 3.int转json
- 4.slice转json
- 5.json反序列化为结构体
- 6.json反序列化为map
- 终端读取
- 1.键盘(控制台)输入fmt
- 2.命令行参数os.Args
- 3.命令行参数flag
- 文件操作
- 1.文件创建
- 2.文件写入
- 3.文件读取
- 4.文件删除
- 5.压缩文件读写
- 6.判断文件或文件夹是否存在
- 7.从一个文件拷贝到另一个文件
- 8.写入内容到Excel
- 9.日志(log)文件
- server服务
- 1.服务端
- 2.客户端
- 3.tcp获取网页数据
- 4.http初识-浏览器访问服务器
- 5.客户端访问服务器
- 6.访问延迟处理
- 7.form表单提交
- web模板
- 1.渲染终端
- 2.渲染浏览器
- 3.渲染存储文件
- 4.自定义io.Writer渲染
- 5.模板语法
- 时间处理
- 1.格式化
- 2.运行时间
- 3.定时器
- 锁机制
- 互斥锁
- 读写锁
- 性能比较
- sync.Map
- 原子操作
- 1.原子增(减)值
- 2.比较并交换
- 3.导入、导出、交换
- 加密解密
- 1.md5
- 2.base64
- 3.sha
- 4.hmac
- 常用算法
- 1.冒泡排序
- 2.选择排序
- 3.快速排序
- 4.插入排序
- 5.睡眠排序
- 限流器
- 日志包
- 日志框架logrus
- 随机数验证码
- 生成指定位数的随机数
- 生成图形验证码
- 编码格式转换
- UTF-8与GBK
- 解决中文乱码
- 设计模式
- 创建型模式
- 单例模式
- singleton.go
- singleton_test.go
- 抽象工厂模式
- abstractfactory.go
- abstractfactory_test.go
- 工厂方法模式
- factorymethod.go
- factorymethod_test.go
- 原型模式
- prototype.go
- prototype_test.go
- 生成器模式
- builder.go
- builder_test.go
- 结构型模式
- 适配器模式
- adapter.go
- adapter_test.go
- 桥接模式
- bridge.go
- bridge_test.go
- 合成/组合模式
- composite.go
- composite_test.go
- 装饰模式
- decoretor.go
- decorator_test.go
- 外观模式
- facade.go
- facade_test.go
- 享元模式
- flyweight.go
- flyweight_test.go
- 代理模式
- proxy.go
- proxy_test.go
- 行为型模式
- 职责链模式
- chainofresponsibility.go
- chainofresponsibility_test.go
- 命令模式
- command.go
- command_test.go
- 解释器模式
- interpreter.go
- interperter_test.go
- 迭代器模式
- iterator.go
- iterator_test.go
- 中介者模式
- mediator.go
- mediator_test.go
- 备忘录模式
- memento.go
- memento_test.go
- 观察者模式
- observer.go
- observer_test.go
- 状态模式
- state.go
- state_test.go
- 策略模式
- strategy.go
- strategy_test.go
- 模板模式
- templatemethod.go
- templatemethod_test.go
- 访问者模式
- visitor.go
- visitor_test.go
- 数据库操作
- golang操作MySQL
- 1.mysql使用
- 2.insert操作
- 3.select 操作
- 4.update 操作
- 5.delete 操作
- 6.MySQL事务
- golang操作Redis
- 1.redis介绍
- 2.golang链接redis
- 3.String类型 Set、Get操作
- 4.String 批量操作
- 5.设置过期时间
- 6.list队列操作
- 7.Hash表
- 8.Redis连接池
- 其它Redis包
- go-redis/redis包
- 安装介绍
- String 操作
- List操作
- Set操作
- Hash操作
- golang操作ETCD
- 1.etcd介绍
- 2.链接etcd
- 3.etcd存取
- 4.etcd监听Watch
- golang操作kafka
- 1.kafka介绍
- 2.写入kafka
- 3.kafka消费
- golang操作ElasticSearch
- 1.ElasticSearch介绍
- 2.kibana介绍
- 3.写入ElasticSearch
- NSQ
- 安装
- 生产者
- 消费者
- zookeeper
- 基本操作测试
- 简单的分布式server
- Zookeeper命令行使用
- GORM
- gorm介绍
- gorm查询
- gorm更新
- gorm删除
- gorm错误处理
- gorm事务
- sql构建
- gorm 用法介绍
- Go操作memcached
- beego框架
- 1.beego框架环境搭建
- 2.参数配置
- 1.默认参数
- 2.自定义配置
- 3.config包使用
- 3.路由设置
- 1.自动匹配
- 2.固定路由
- 3.正则路由
- 4.注解路由
- 5.namespace
- 4.多种数据格式输出
- 1.直接输出字符串
- 2.模板数据输出
- 3.json格式数据输出
- 4.xml格式数据输出
- 5.jsonp调用
- 5.模板处理
- 1.模板语法
- 2.基本函数
- 3.模板函数
- 6.请求处理
- 1.GET请求
- 2.POST请求
- 3.文件上传
- 7.表单验证
- 1.表单验证
- 2.定制错误信息
- 3.struct tag 验证
- 4.XSRF过滤
- 8.静态文件处理
- 1.layout设计
- 9.日志处理
- 1.日志处理
- 2.logs 模块
- 10.会话控制
- 1.会话控制
- 2.session 包使用
- 11.ORM 使用
- 1.链接数据库
- 2. CRUD 操作
- 3.原生 SQL 操作
- 4.构造查询
- 5.事务处理
- 6.自动建表
- 12.beego 验证码
- 1.验证码插件
- 2.验证码使用
- beego admin
- 1.admin安装
- 2.admin开发
- beego 热升级
- beego实现https
- gin框架
- 安装使用
- 路由设置
- 模板处理
- 文件上传
- gin框架中文文档
- gin错误总结
- 项目
- 秒杀项目
- 日志收集
- 面试题
- 面试题一
- 面试题二
- 错题集
- Go语言陷阱和常见错误
- 常见语法错误
- 初级
- 中级
- 高级
- Go高级应用
- goim
- goim 启动流程
- goim 工作流程
- goim 结构体
- gopush
- gopush工作流程
- gopush启动流程
- gopush业务流程
- gopush应用
- gopush新添功能
- gopush压力测试
- 压测注意事项
- rpc
- HTTP RPC
- TCP RPC
- JSON RPC
- 常见RPC开源框架
- pprof
- pprof介绍
- pprof应用
- 使用pprof及Go 程序的性能优化
- 封装 websocket
- cgo
- Golang GC
- 查看程序运行过程中的GC信息
- 定位gc问题所在
- Go语言 demo
- 用Go语言计算一个人的年龄,生肖,星座
- 超简易Go语言实现的留言板代码
- 信号处理模块,可用于在线加载配置,配置动态加载的信号为SIGHUP
- 阳历和阴历相互转化的工具类 golang版本
- 错误总结
- 网络编程
- 网络编程http
- 网络编程tcp
- Http请求
- Go语言必知的90个知识点
- 第三方库应用
- cli应用
- Cobra
- 图表库
- go-echarts
- 开源IM
- im_service
- 机器学习库
- Tensorflow
- 生成二维码
- skip2/go-qrcode生成二维码
- boombuler/barcode生成二维码
- tuotoo/qrcode识别二维码
- 日志库
- 定时任务
- robfig/cron
- jasonlvhit/gocron
- 拼多多开放平台 SDK
- Go编译
- 跨平台交叉编译
- 一问一答
- 一问一答(一)
- 为什么 Go 标准库中有些函数只有签名,没有函数体?
- Go开发的应用
- etcd
- k8s
- Caddy
- nsq
- Docker
- web框架