一图看尽 Go 1.16 变更

本文详细介绍了Go语言的最新特性,包括gomod模块管理的改进,如GO11MODULE环境变量的变更,以及//go:embed注解带来的内嵌文件功能,替代了go-bindata。此外,goget和goinstall命令的更新增强了安全性与灵活性。在gobuild方面,不再更新mod依赖并支持生成ASLR的Windows DLL。运行时优化了内存管理,提供性能排查工具。链接器改进提升了编译速度和内存效率。基础库方面,io/ioutil被废弃,相关功能迁移至其他包,crypto/dsa因安全性和低使用率被弃用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

	工具链					
		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的文档		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值