工具链
go mod
GO11MODULE 环境变量从默认 auto 改成了 on
mod 功能从1.11以来终于彻底成熟了
//go:embed
通过 //go:embed 注解的方式内嵌文件
go-bindata 的活被干了
通过在变量上方添加注解来实现内嵌文件
一个文件
//go:embed hello.txt
支持变量类型
string
[]byte
文件树
//go:embed image/*
//go:embed image/* template/*
//go:embed image template html/index.html
支持变量类型
fs.FS
go get
删除了 -insecure 标志,-insecure 用来让 go get 命令不校验CA证书
可以用 GOINSECURE 环境变量来指定
go env -w GOINSECURE=gihub.com
新增了 GOVCS 环境变量来让用户控制拉取方式
GOVCS=github.com:git,evil.com:off,*:git|hg
github.com 用 git 方式
evil.com 不允许使用版本控制
其他都可以用 git 或者 hg
默认都可以用 git 或者 hg
go install
支持带有版本后缀 github.com/proj/p1/cmd@v1.0.0
这种命令不会更新 go.mod 文件
用来在不影响 mod 依赖性的情况下安装可执行文件
go build
不会再更新 mod 依赖了,之前会导致 mod 依赖更新
c-shared 模式生成 windows dll 支持 ASLR
默认生成 ASLR dll(ASLR 是一种针对缓冲区移除的安全保护技术)
可以通过 --ldflags=-aslr=false 来 关闭 ASLR
扩展资料
安全保护技术
DEP
数据执行保护
通过在系统的内存页设置可执行标志位,CPU 在执行时如果发现当前执行的地址没有此标志位则禁止其执行
用来阻止溢出攻击
ASLR
地址空间布局随机化
通过对堆、栈和共享库映射等线性区布局随机化,增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,来达到阻止移除攻击的目的
简单说就是分配内存时,加入随机元素,不要每次按同样顺序分配的内存地址都是一样的。之前是我跑一次你的程序,分析后记住你脆弱地方的地址直接写死地址攻击你这里,因为你下次启动内存布局是不变的,现在随机了,你就不能这么干了。
用来阻止溢出攻击
运行时
默认积极(MADV_DONTNEED)向操作系统释放内存,之前是操作系统内存紧张(MADV_FREE)的时候才释放
设置 GODEBUG 为 inittrace=1 时,所有包会输出init的执行时间和内存分配,用于排查可能的性能瓶颈。
扩展资料
Go 底层用mmap申请的内存,会用madvise释放内存
madvise 将内存标记为不使用时,有两种方式
MADV_DONTNEED
标记过的内存如果再次使用,会触发缺页中断
MADV_FREE
标记过的内存内核会等到内存紧张时才会释放。在释放之前,这块内存依然可以复用。
链接器
将1.15 对 ELF OS 和 amd64 架构的改进扩展到所有架构和os组合
编译速度快20-25%
内存使用率减少5-15%
符号修修剪更严格,所以大多数时候编译的二进制文件也会比较小
基础库
io/fs
新增了 fs.FS 接口
用来抽象只读文件树
明显感觉这个变动是用来配合 //go:emded 做的更改
io/ioutil
不建议使用
容易产生歧义
通过名字你很难知道这个包是做什么用的
功能移动到其他包里了
Discard => io.Discard
NopCloser => io.NopCloser
ReadAll => io.ReadAll
ReadDir => os.ReadDir
ReadFile => os.ReadFile
TempDir => os.MkdirTemp
TempFile => os.CreateTemp
WriteFile => os.WriteFile
crypto/dsa
被弃用
使用率低(几乎未被使用)
DSA技术过时,并且不安全
生成速度慢
没办法快速验证
OpenSSH 7.0 在2015年禁用了DSA支持
FIPS标准也已经删除了有关DSA的文档
一图看尽 Go 1.16 变更
最新推荐文章于 2024-08-26 19:01:05 发布