Go-知识 版本演进
Go-知识 版本演进
- Go release notes
- r56(2011/03/16)
- r57(2011/05/03)
- Gofix 工具
- 语言
- 包
- 工具
- 小修订
- r58(2011/06/29)
- 语言
- 包
- 工具
- 小修订
- r59(2011/08/01)
- 语言
- 包
- 工具
- r60(2011/09/07)
- 语言
- 包
- 工具
- [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)
- [go1.1 2013-05-13](https://golang.google.cn/doc/devel/release#go1.1)
- [go1.2 2013-12-01](https://golang.google.cn/doc/devel/release#go1.2)
- [go1.3 2014-06-18](https://golang.google.cn/doc/devel/release#go1.3)
- [go1.4 2014-12-10](https://golang.google.cn/doc/devel/release#go1.4)
- [go1.5 2015-08-19](https://golang.google.cn/doc/devel/release#go1.5)
- [go1.6 2016-02-17](https://golang.google.cn/doc/devel/release#go1.6)
- [go1.7 2016-08-15](https://golang.google.cn/doc/devel/release#go1.7)
- [go1.8 2017-02-16](https://golang.google.cn/doc/devel/release#go1.8)
- [go1.9 2017-08-24](https://golang.google.cn/doc/devel/release#go1.9)
- [go1.10 2018-02-16](https://golang.google.cn/doc/devel/release#go1.10)
- [go1.11 2018-08-24](https://golang.google.cn/doc/devel/release#go1.11)
- [go1.12 2019-02-25](https://golang.google.cn/doc/devel/release#go1.12)
- [go1.13 2019-09-03](https://golang.google.cn/doc/devel/release#go1.13)
- [go1.14 2020-02-25](https://golang.google.cn/doc/devel/release#go1.14)
- [go1.15 2020-08-11](https://golang.google.cn/doc/devel/release#go1.15)
- [go1.16 2021-02-16](https://golang.google.cn/doc/devel/release#go1.16)
- [go1.17 2021-08-16](https://golang.google.cn/doc/devel/release#go1.17)
- [go1.18 2022-03-15](https://golang.google.cn/doc/devel/release#go1.18)
- [go1.19 2022-08-02](https://golang.google.cn/doc/devel/release#go1.19)
- [go1.20 2023-02-01](https://golang.google.cn/doc/devel/release#go1.20)
- [go1.21.0 2023-08-08](https://golang.google.cn/doc/devel/release#go1.21.0)
- [go1.22.0 2024-02-06](https://golang.google.cn/doc/devel/release#go1.22.0)
- [go1.23.0 2024-08-13](https://golang.google.cn/doc/devel/release#go1.23.0)
- 总结
Go release notes
Go 源码:
https://github.com/golang/go.git
官网:
https://go.dev/
早期:
https://golang.google.cn/doc/devel/pre_go1
当前:
https://golang.google.cn/doc/devel/release#pre.go1
下面将按照时间顺序进行梳理下Go语言的演进。
2009-12-09~2012-03-27 (Go 1) 的周会记录:https://golang.google.cn/doc/devel/weekly
r56(2011/03/16)
r56 版本是第一个稳定版本,对应于 weekly.2011-03-07.1
。编号从 56 开始,因为在此版本之前,我们现在认为的每周快照被称为版本。
对应的周会记录:
https://golang.google.cn/doc/devel/weekly#2011-03-07
周会记录原文:
This release includes changes to the reflect and path packages.
Code that uses reflect or path may need to be updated.The reflect package's Value.Addr method has been renamed to Value.UnsafeAddr.
Code that uses the Addr method will have to call UnsafeAddr instead.The path package has been split into two packages: path and path/filepath.
Package path manipulates slash-separated paths, regardless of operating system.
Package filepath implements the local operating system's native file paths.
OS-specific functionality in package path, such as Walk, moved to filepath.Other changes:
* build: fixes and simplifications (thanks Dave Cheney),move $GOBIN ahead of /bin, /usr/bin in build $PATH.
* bzip2: speed up decompression.
* cgo: fix dwarf type parsing (thanks Gustavo Niemeyer),put temporary source files in _obj (thanks Roger Peppe),fix bug involving 0-argument callbacks.
* compress/lzw: optimizations.
* doc: add FAQ about "implements",add FAQ about large binaries ,add FAQ about stack vs heap allocation,add internationalization to roadmap,describe platform-specific conventions in code.html.
* fmt: allow recursive calls to Fscan etc (thanks Roger Peppe),make %#p suppress leading 0x.
* gc, gopack: add some missing flags to the docs.
* gc: fix init of packages named main (thanks Gustavo Niemeyer),
* gob: make recursive map and slice types work, and other fixes.tentative support for GobEncoder/GobDecoder interfaces.
* gobuilder: add -package flag to build external packages and -v for verbose.
* gofmt: exclude test file that is not legal Go.
* goinstall: protect against malicious filenames (thanks Roger Peppe).
* goyacc: provide -p flag to set prefix for names, documentation update.
* http: add cookie support (thanks Petar Maymounkov),allow handlers to send non-chunked responses,export ParseHTTPVersion,expose Client's Transport,use WriteProxy,rename ClientTransport to Transport.
* http/cgi: new package.
* http/httptest: new package.
* image: add a decoding test for common file formats.
* io/ioutil: add TempDir.
* mime/multipart: Header changed from map to MIMEHeader
* path/filepath: new OS-specific path support (thanks Gustavo Niemeyer).
* reflect: add PtrTo, add Value.Addr (old Addr is now UnsafeAddr).
* runtime: use kernel-supplied compare-and-swap on linux/arm.
* spec: minor clarification of scope rule for functions.
* sync/atomic: new package to expose atomic operations.
* syscall: regenerate zerrors_freebsd_amd64.go (thanks Mikio Hara),work around FreeBSD execve kernel bug (thanks Devon H. O'Dell).
* template: document the delimiters.
* testing: run GC before each benchmark run (thanks Roger Peppe).
* unsafe: fix the documentation.
* websocket: use httptest.Server for tests (thanks Robert Hencke).
* xml: permit nested directives (thanks Chris Dollin).
简单总结一下:
主要更改概述
-
reflect 包:
Value.Addr
方法重命名为Value.UnsafeAddr
。
-
path 包:
- 拆分为两个包:
path
(处理斜杠分隔路径)和path/filepath
(处理本地操作系统的文件路径)。 - OS-specific 功能(如 Walk)已移至
filepath
。
- 拆分为两个包:
其他重要更改
- 构建系统: 修复和简化,调整
$GOBIN
的位置。 - 性能优化:
- bzip2 解压缩速度提升。
- compress/lzw 优化。
- 文档更新: 添加多个常见问题解答,更新代码文档。
- HTTP 包:
- 新增 cookie 支持。
- 允许非分块响应。
- 重命名 ClientTransport。
- 新包: 新增
http/cgi
和http/httptest
包。 - 其他改进:
io/ioutil
添加TempDir
。mime/multipart
的 Header 类型更改。sync/atomic
新增原子操作包。testing
在基准测试前运行 GC。
其他修复和改进
- 修复了多个包中的错误和文档问题,增强了安全性和功能性。
r57(2011/05/03)
r57 版本 weekly.2011-04-27
与附加错误修复相对应。
Gofix 工具
新的gofix工具会查找使用旧 API 的 Go 程序,并重写它们以使用较新的 API。在您更新到新的 Go 版本后,gofix 会帮助对您的程序进行必要的更改。Gofix 将处理下面描述的 http、os 和 syscall 包更改,我们将更新程序以跟上库的未来更改。Gofix 无法完美处理所有情况,因此请在提交更改之前阅读并测试它所做的更改。有关更多信息,请参阅gofix 博客文章。
这应该是为了处理兼容的一个升级工具。
语言
多重赋值语法取代了closed
函数。通道接收的语法允许可选的第二个赋值,即一个布尔值,表示通道是否关闭。此代码:
v := <-ch if closed(ch) { // 通道已关闭}
现在应该写成:
v, ok := <-ch if !ok { // 通道已关闭}
未使用的标签现在是非法的,就像未使用的局部变量一样。
包
gob 包现在将对实现GobEncoder和 GobDecoder接口的类型的值进行编码和解码 。这允许具有未导出字段的类型传输自洽描述;示例包括 big.Int和big.Rat。
http 包已经重新设计。对于客户端,有了新的 Client和Transport 抽象,可以更好地控制 HTTP 细节,例如发送的标头和随后的重定向。这些抽象可以轻松实现添加功能(例如OAuth2 )的自定义客户端。对于服务器,ResponseWriter 已删除其非必要方法。Hijack 和 Flush 方法不再是需要的;代码可以通过检查特定值是否实现 Hijacker或Flusher来测试它们。RemoteAddr 和 UsingTLS 方法被Request的 RemoteAddr 和 TLS 字段取代。SetHeader 方法被 Header 方法取代;其结果为Header类型,实现了 Set 和其他方法。
net 包 删除了Dialladdr
中的参数 和LookupHost中的返回值。现在,实现使用cgo来实现网络名称查找,如果可能的话,使用 C 库 getaddrinfo(3) 函数。这确保了 Go 和 C 程序以相同的方式解析名称,同时还避开了 OS X 应用程序级防火墙。 cname
os 软件包 引入了简化的Open 和Create函数。原来的 Open 函数现在可用作OpenFile 函数。StartProcess函数的最后三个参数已被指向ProcAttr 的 指针所取代。
重新设计了 reflect 包。Type现在是一个实现所有可能的类型方法的接口。类型开关不再是 Type ,而是 switch on 。Value 现在是一个实现所有可能的值方法的结构体值。类型开关不再是 Value ,而是switch on 。Typeof 和 NewValue 现在被称为TypeOf和ValueOf 。 要创建可写的 Value ,请使用而不是。有关完整详情,请参阅变更说明 。新 API 允许更有效地实现 Value ,从而避免了以前 API 所需的许多分配。 t``t.Kind()``v``v.Kind()``New(t).Elem()``Zero(t)
请记住,gofix 将处理这些包 API 更改所需的大部分重写。
工具
上面介绍了一个新的命令Gofix 。
Gotest现在是一个 Go 程序,而不是 shell 脚本。新-test.short
标志与包测试的 Short 函数相结合,允许您编写可以在正常或“短”模式下运行的测试;all.bash 以短模式运行测试以减少安装时间。Makefile 知道该标志:使用make testshort
。
这可能就是 go test 的雏形
运行时支持现在实现了 CPU 和内存分析。Gotest 的新 -test.cpuprofile
和 -test.memprofile
标志使分析测试变得容易。要将分析添加到您的 Web 服务器,请参阅http/pprof 文档。有关其他用途,请参阅运行时/pprof文档。
go 的 pprof 的雏形
小修订
r57.1 修复了http.FormFile 中的零指针取消引用。
r57.2 修复了程序中误用未初始化内存的问题goto
。
r58(2011/06/29)
r58 版本 weekly.2011-06-09
与附加错误修复相对应。
语言
此版本修复了程序中滥用未初始化内存的问题goto
。
包
与往常一样,gofix将处理这些包 API 更改所需的大部分重写。
包 http删除了Client.GetfinalURL
方法的返回值。该值现在可通过http.Response上的新字段获取。map[string][]string 类型的大多数实例已被新的Values类型替换。 Request
包 exec已经重新设计,具有更方便、更简洁的 API。
包 strconv的Quote函数现在仅转义那些未被unicode.IsPrint 归类为可打印的 Unicode 代码点。以前 Quote 会转义所有非 ASCII 字符。这也会影响fmt包的"%q"
格式化指令。以前的引用行为仍可通过 strconv 的新QuoteToASCII函数获得。
包 os/signal的 Signal和 UnixSignal类型已被移至 os包。
包 image/draw是 的新名称 exp/draw
。 中的 GUI 相关代码exp/draw
现在位于exp/gui包中。
工具
Goinstall现在观察 GOPATH 环境变量来在 Go 树之外构建和安装您自己的代码和外部库(并避免编写 Makefile)。
小修订
r58.1 增加了 构建和 运行时 更改,以使 Go 在 OS X 10.7 Lion 上运行。
r59(2011/08/01)
r59 版本对应于 weekly.2011-07-07
。
语言
此版本包含一项语言更改,限制了 的使用 goto
。本质上,goto
块外的语句不能跳转到该块内的标签。如果您的代码使用 ,则可能需要进行更改goto
。请参阅此变更集,了解新规则如何影响 Go 树。
包
与往常一样,gofix将处理这些包 API 更改所需的大部分重写。
软件包 http有一个新的 FileSystem接口,可用于访问文件。FileServer助手现在接受 参数,FileSystem
而不是显式文件系统根目录。通过实现您自己的功能,FileSystem
您可以使用它 FileServer
来提供任意数据。
软件包 os的ErrorString
类型已被隐藏。 的大部分用法都可以用os.NewErroros.ErrorString
代替 。
reflect 包支持一种新的结构标签方案,允许在多个包之间共享结构标签。在此方案中,标签必须采用以下格式:
`key:"value" key2:"value2"`
StructField类型的 Tag 字段现在具有StructTag类型,它具有一个 方法。json 和 xml 的客户端需要更新 。代码 如下Get
type T struct {X int "name"
}
应该成为
type T struct {X int `json:"name"` // or `xml:"name"`
}
使用govet来识别需要更改以使用新语法的结构标签。
go vet 的雏形
包 sort的IntArray
类型已重命名为IntSlice , Float64Slice和 StringSlice也类似 。
包 strings的Split
函数本身已被拆分为Split和 SplitN。 SplitN
与旧的相同Split
。新的Split
相当于SplitN
最后一个参数为 -1。
包 image/draw的 Draw函数现在接受一个附加参数,即合成运算符。如有疑问,请使用draw.Over。
工具
Goinstall现在可以从任意远程存储库(不仅仅是 Google Code、GitHub 等)安装软件包和命令。有关详细信息,请参阅goinstall 文档。
go install 的雏形
r60(2011/09/07)
r60 版本对应于 weekly.2011-08-17
。
语言
现在,“else”块必须带有括号,除非“else”的主体是另一个“if”。由于 gofmt 始终会添加这些括号,因此 gofmt 格式的程序不会受到影响。要修复其他程序,请运行 gofmt。
包
软件包 http的 URL 解析和查询转义代码(例如ParseURL
和URLEscape
)已移至新的url 软件包,并对名称进行了一些简化。客户端代码可以使用 gofix 自动更新。
软件包 imagePix
对结构类型(如 image.RGBA和 image.NRGBA )的字段进行了重大更改 。但是, image.Image接口类型没有改变,如果您没有明确引用字段,则无需更改代码Pix
。例如,如果您使用image/jpeg软件包解码多个图像,使用 image/draw合成它们,然后使用 image/png对结果进行编码,那么您的代码应该仍能像以前一样工作。如果您的代码确实引用了Pix
字段,请参阅 weekly.2011-07-19 快照说明,了解如何更新代码。
模板包已被替换为新的模板包(以前为exp/template
)。原始模板包仍可用作old/template。该old/template
包已弃用并将被删除。Go 树已更新为使用新的模板包。我们鼓励旧模板包的用户切换到新模板包。使用 template
或 的代码exp/template
需要将其导入行分别更改为"old/template"
或"template"
。
工具
Goinstall现在使用新的标签选择方案。下载或更新时,goinstall 会查找具有 "go."
与本地 Go 版本相对应的前缀的标签或分支。对于 Go, release.r58
它会查找go.r58
。如果未找到特定go.X
标签或分支,它会选择最接近的早期版本。如果找到合适的标签或分支,goinstall 将使用该版本的代码。否则,它使用版本控制系统选择的默认版本。鼓励库作者在其存储库中使用适当的标签或分支名称,以使他们的库更易于访问。
小修订
go1 2012-03-28
Go 1 是 Go 的一个主要版本,将长期保持稳定。
我们的目标是,为 Go 1 编写的程序将在 Go 1 的未来版本中继续正确编译和运行,无需任何更改。
这是 go 语言保证向后兼容。
go1 版本对应的是 weekly.2012-03-27
。
小修订
go1.0.1(发布于 2012-04-25)是为了 修复可能导致内存损坏的逃逸分析错误而发布 的 。它还包括一些小的代码和文档修复。
go1.0.2 (发布于 2012-06-13) 发布,用于修复使用结构体或数组键的映射实现中的两个错误: 问题 3695和 问题 3573。它还包括许多小代码和文档修复。
go1.0.3(发布于 2012-09-21)包含一些小代码和文档修复。
go1.1 2013-05-13
go 1.1 的 release notes
https://golang.google.cn/doc/go1.1
语言特性
- 除0异常: 整数除以常数零会产生运行时恐慌
- Unicode 增强
- 方法
- 不强制要求 return
更新
- gcc 和 go 版本存在差距
- go 工具传参格式(后续 flag 相关)
- 明确数字类型:int => int32,in64,uint32,uint64
- 堆大小扩大(64位os)
- unicode 代理不支持的 utf-8
- race:竞态检测
工具
- go vet 对上述更新的支持
- go build 更详细的信息
- go get 需要先配置 $GOPATH
- go test 允许保留输出文件
- go fix 不在推荐使用: go fix 是为了解决go每次不兼容更新的代码重写的,现在 go 已经保证了向后兼容,go fix 就没有意义了。
性能优化
标准库更新
- 输入输出提供简单易用的函数
bufio.Scanner
- net 库对 地址的检测
- reflect 包对类型的支持
- time 包对时间的精度处理
- 新增 go fmt
go/format
包 net/http/cookie
对 cookie 的支持runtime/race
这个是竞态检测的运行时实现- 其他库的调整
go1.2 2013-12-01
go 1.2 的 release notes
https://golang.google.cn/doc/go1.2
语言特性
- 空指针nil: 编译器会检测nil地址的访问,同时运行时如果访问nil地址,会导致程序 panic https://go.googlesource.com/proposal/+/refs/heads/master/design/4238-go12nil.md
- 切片支持三个参数,start,end,cap https://blog.csdn.net/a18792721831/article/details/135716705
更新
- goroutine 调度防止饿死,可进行抢占
- 设置默认1万的goroutine数,可设置
- 扩充 goroutine 的堆栈大小 4k->8k
- go vet 和 godoc 调整为 tools子库(当前go doc 和 godoc 不是同一个)
- go test 支持覆盖率 支持-cover 参数,运行后将进行插桩,运行结束后会统计覆盖率
- 删除 go doc ,保留了 godoc
标准库更新
- tar,zip 的性能优化
- 新增 encoding 包
- fmt 对格式串的增强
- template 的模板语法中,对运算符的支持,并且增强了 if-else : https://blog.csdn.net/a18792721831/article/details/144357215
- 新增
image/color/palette
包 - 其他库的调整
go1.3 2014-06-18
go 1.3 的 release notes
https://golang.google.cn/doc/go1.3
兼容的os
- 不在支持 win 2000
- 支持 DragonFly BSD,FreeBSD,Solaris,Plan 9
语言特性
- 明确了channel 的一些特性:https://github.com/golang/go/issues/6242,https://blog.csdn.net/a18792721831/article/details/135885482
更新
- goroutine 的堆栈分配从分段调整为连续模型:https://docs.google.com/document/d/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ/pub
- 将整数类型值使用
unsafe.Pointer
转为指针是非法的 - map 的迭代随机,多次迭代,不保证顺序相同,防止出现顺序依赖编码:https://blog.csdn.net/a18792721831/article/details/135886263 next调用
- Build 优化
- go test , go run 支持 -exec ,godoc 支持 -analysis (更加丰富的 doc )
- bench 的 优化:https://blog.csdn.net/a18792721831/article/details/140094738
- 性能优化:defer , gc, race ,regexp
标准库更新
- Crypto/tls 中 TLS 的强制验证
- 新类型
sync.Pool
testing.B
支持 RunParallel:https://blog.csdn.net/a18792721831/article/details/140094738- 其他库的更新
go1.4 2014-12-10
go 1.4 的 release notes
https://golang.google.cn/doc/go1.4
操作系统
- 安卓:go 1.4 可以为 android 的 arm 处理器构建二进制文件,还可以构建库,让安卓程序使用:https://docs.google.com/document/d/1N3XyVkAP8nmWjASz8L_OjjnjVKxgeVBjIsTr5qIUcA4/edit?tab=t.0#heading=h.9habv2sr5bec
- 支持arm的 native client
- 支持Plan9的amd64处理器
语言特性
- for循环支持 for range x ,比如进行x 次循环
- 不支持双重指针:var x **T 这是不允许的,go语言自动解引用一次,但是不能解两次,而且会编译报错
兼容性说明
- 使用 unsafe 包,不会保证百分百兼容。因为 unsafe 包本身就是直接使用数据或者地址,破坏go类型系统的操作。所以go不会保证unsafe的编码也是完全兼容的。
更新
-
go 的 gc 使用go编码实现,之前是 c和汇编,之前是不同的语言,导致获取信息可能会有偏差等转换,现在使用相同的语言,那么信息就可以无缝获取和查询,性能会更好:https://docs.google.com/document/d/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ/pub
因为不需要做转换,所以程序的堆会更小,并且堆栈不在分段,堆栈满了就申请一个更大的堆栈。分段堆栈->连续堆栈
使用了连续堆栈,初始堆栈的大小从 8192 -> 2048 也就是2k.并且不会受到限制,2k不够用了,会申请一个更大的。
-
降低了go调用汇编程序的难度,只需要在go里面声明汇编
-
新增“内部包”,将不希望公开的代码放在 internal (子)目录下,就不会被公开,从1.5 开始强制执行:https://docs.google.com/document/d/1e8kOo3r51b2BWtTs_1uADIA5djfXhPT36s6eHVRIvaU/edit?tab=t.0
-
当一个包有多个路径(存档)时,可以指定使用哪个:https://docs.google.com/document/d/1jVFkZTcYbNLaTxXD9OcGfn7vYv5hWtPx9–lTx1gPMs/edit?tab=t.0
-
go的代码库从 code.google.com 调整为 golang.org
-
新增 go generate 工具
-
根据文件名控制是否参与编译。test_arm.go,test_windows.go 。在不同的编译环境中,选择不同的文件进行编译
-
go test 支持 -o 参数,允许编译生成 测试执行文件,并且会编译 *_test.go 文件,并不会因为没有测试函数而忽略
-
一些杂项信息从go中移出:https://golang.google.cn/wiki/IDEsAndTextEditorPlugins
标准库更新
- Scanner 包修复bug
- syscall 被冻结,取之的是 sys 包
- Testing.M 的支持:https://blog.csdn.net/a18792721831/article/details/140094681
- 其他库的更新
go1.5 2015-08-19
go 1.5 的 release notes
https://golang.google.cn/doc/go1.5
操作系统
- 逐步减少 32 位的 x86 架构
- 新增 darwin/arm, darwin/arm64,linux/arm64
语言特性
- map 的初始化简化,不需要列出key的类型,可以省略key的类型
更新
-
go 的编译彻底与 gcc 分开,不在依赖gcc。
-
编译后可执行文件的后缀做了处理,直接是二进制文件
-
并发gc:https://docs.google.com/document/d/16Y4IsnNRCN43Mx0NZc5YXZLovrHvvLhK_h0KN8woTO4/edit?tab=t.0 , https://golang.google.cn/talks/2015/go-gc.pdf
从线性关系变成常数关系,牛
-
新增参数定义核心数 GOMAXPROCS
-
go vet 和 go cover 移动存储位置(还是能用的,只是源码结构调整)
-
内部包开始强制执行
-
vendor开始试验:https://go.googlesource.com/proposal/+/master/design/25719-go15vendor.md
-
go tool trace 跟踪工具支持:https://golang.google.cn/talks/2015/dynamic-tools.slide#1
-
go doc 的增加,go doc 适合在命令行下使用,godoc 适合窗口下使用
标准库更新
- flag 的 优化
- Math/big的Float 支持任意精度浮点数
- net库的DSN解析优先使用go访问,而不是cgo
- reflect包新增ArrayOf和FuncOf
- 模糊测试 Fuzz 的强化:https://blog.csdn.net/a18792721831/article/details/140361151
- 其他库的更新
go1.6 2016-02-17
go 1.6 的 release notes
https://golang.google.cn/doc/go1.6
操作系统
- Linux/mips64,linux/mips64le 试验
- android/386试验
- 在 FreeBSD上,使用 clang而不是gcc
更新
- cgo中go和c共享内存
- 编译器的优化
- go doc 的优化,优先使用已下载副本
性能优化
compress/bzip2
,compress/gzip
、 crypto/aes
、 crypto/elliptic
、 crypto/ecdsa
,sort
包性能提升 10% 以上
标准库更新
- HTTP/2 的支持
- go程序对操作系统更丰富的信号量处理
encoding/json,encoding/xml
的优化- Sort 包重写
- template语法支持忽略空:https://blog.csdn.net/a18792721831/article/details/144357215
- 其他库的更新
go1.7 2016-08-15
go 1.7 的 release notes
https://golang.google.cn/doc/go1.7
操作系统
- macOS 10.12 Sierra 支持
- Linux/s390x , plan9/arm 支持
- Linux/mips64,linux/mips64le支持
更新
- go get 支持 git.openstack.org
- go doc 支持函数类型分组
- go tool dist list 打印支持的os
- go tool trace 的优化
标准库更新
- 支持子测试:https://blog.csdn.net/a18792721831/article/details/140398359
- Context 升级为标准库中的包:https://blog.csdn.net/a18792721831/article/details/139374825
- 引入 httptrace
- 程序所有问题都统一到 error
- 性能优化
- TLS 支持加强
- Unicode 升到 9.0
- 其他标准库的更新(挺多的)
go1.8 2017-02-16
go 1.8 的 release notes
https://golang.google.cn/doc/go1.8
语言特性
- 当两个 struct 除 tag 之外的其他结构都相同时,允许进行互转
操作系统
- 仍然支持 OS X 10.8 且可能是最后一个支持的 Go 版本
- 最后一个支持 ARMv5E和ARMv6的版本
更新
- 删除了go tool yacc 工具,从 1.7 开始编译器不在使用 yacc
- pprof支持http分析
- go tool trace 支持 -pprof 参数
- GOPATH 有默认值,$HOME/go ,%USERPROFILE%/goWindows
- go bug 命令在 github 上报 issues ,并预填信息
- go gc 的 STW 平均在 100 微秒以下:https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md
- defer 函数的开销减少一半:https://blog.csdn.net/a18792721831/article/details/140734394
- Http 的 Shutdown 优雅停止
- sql支持context
- 标准库的更新
go1.9 2017-08-24
go 1.9 的 release notes:
https://golang.google.cn/doc/go1.9
语言特性
- 类型别名 : type S1 = S2,S1和S2都表示同一种类型
更新
- 并行编译,充分利用多核优势,默认启用
- go env -json 支持json 格式输出
- go test 支持 -list regexp 进行执行测试
标准库更新
- Math/bits 位操作的视线
- Sync 包的支持
- sync.Mutex优化:https://blog.csdn.net/a18792721831/article/details/139377732
go1.10 2018-02-16
go 1.10 的 release notes
https://golang.google.cn/doc/go1.10
语言特性
- 支持位操作结果作为索引:x[2<<y]
更新
- GOROOT 和 GOTMPDIR 尝试从可执行文件的目录推断
- GOPATH 的调整:https://blog.csdn.net/a18792721831/article/details/142862157
- go install 不在下载依赖包
- go test 缓存结果
go1.11 2018-08-24
go 1.11 的 release notes
https://golang.google.cn/doc/go1.11
JavaScript
- WebAssembly 实验性端口
- 支持syscall调用 js
- 支持 *_js.go
更新
- module 试验:https://blog.csdn.net/a18792721831/article/details/143203722 , https://blog.csdn.net/a18792721831/article/details/143722028 , https://blog.csdn.net/a18792721831/article/details/144210904
- go 不支持导入 含有 @ 的路径
- 构建缓存
- godoc命令行将不在支持,使用 go doc 进行命令行查看
- go run 支持dir,pkg,.
- template支持变量
go1.12 2019-02-25
go 1.12 的 release notes
https://golang.google.cn/doc/go1.12
操作系统
- race 支持 linux/arm64
更新
- go tool vet 不在支持,而是使用 go vet
- go 教程不在包含在发行文件中了,需要手动安装
- module 的进一步增强,包括 go.mod,go get ,go list ,go mod download 等
标准库更新
- TSL 1.3 支持
- template的错误信息不会被截断了
go1.13 2019-09-03
go 1.13 的 release notes
https://golang.google.cn/doc/go1.13
语言特性
- 多进制支持:2,8,16,虚数
操作系统
- 兼容 android 10
更新
- module 默认为 auto,支持 GOPRIVATE,GOPROXY,GONOSUMDB等变量
- go env -w 的支持
- go get -u 和 go get -u all
- 对 +incompatible 的处理
- 支持伪版本
- defer 性能提升 30%:https://blog.csdn.net/a18792721831/article/details/140734394
标准库更新
- TLS 1.3 支持
- 支持 %w 的error包装:https://blog.csdn.net/a18792721831/article/details/140430350
go1.14 2020-02-25
go 1.14 的 release notes
https://golang.google.cn/doc/go1.14
语言特性
- 支持重复命名:https://github.com/golang/proposal/blob/master/design/6977-overlapping-interfaces.md
操作系统
- 进一步不在支持 32位os
更新
-
vendor 的正式使用
-
module 进一步优化
-
+incompatible 的支持
-
Go.mod 文件的维护
-
goroutine 支持异步抢占
标准库更新
- hash 包的增加,基于字节的 hash
- 进一步优化 TSL 1.3
- template 错误提示优化
go1.15 2020-08-11
go 1.15 的 release notes
https://golang.google.cn/doc/go1.15
更新
- GOPROXY 支持跳过返回错误的代理
- go test 关于 缓存和timeout的优化
- GOMODCACHE 环境变量支持
标准库更新
- Time/tzdata 允许将时区数据库集成到程序中
- Flag 对于no-flag 的处理
go1.16 2021-02-16
go 1.16的 release notes
https://golang.google.cn/doc/go1.16
更新
- Module 默认启用
- go build 和 go test 不在修改 go.mod 和 go.sum
- go install 支持 version
- go mod tidy 和 go mod vendor 支持 -e 表示出错继续
- io 取代 fs 包
- ioutil的函数移动到os或者io包
- Template 支持更多加载方式
go1.17 2021-08-16
go 1.17 的release notes
https://golang.google.cn/doc/go1.17
语言特性
- 切片到数组指针的转换
- Unsafe 包的增强
更新
- module 进一步支持,并转为正式,支持 go mod tidy -go=1.17, go mod tidy -compat=1.17 等
- Go mod graph 的支持性更强
- go.mod 的进一步增强
- vendor 的增强:https://blog.csdn.net/a18792721831/article/details/143027712
- // go:build 优先使用
- go run 支持version
- 关于 errors 的方法增强
- 标准库 URL 的校验,针对 query 参数的强化
- go test 支持 shuffle
go1.18 2022-03-15
go 1.18 的 release notes
https://golang.google.cn/doc/go1.18
语言特性
- 支持泛型,这是一个很大的变化:https://blog.csdn.net/a18792721831/article/details/142862019 , https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
- 基于泛型,增加的 sdk constraints,slices,maps 的相关方法
更新
- 编译期间,如果有定义但未使用的变量,将给出提示,并阻止编译
- 对模糊测试的增强并正式发布:https://github.com/golang/go/issues/44551 , https://blog.csdn.net/a18792721831/article/details/140361151
- go work 的支持,支持工作区模式
- 新的 net/netip 包
- 默认禁用 TSL 1.0 和 1.1
- go test 中对 regexp 进一步增强
- template 的 for-condition 的支持
go1.19 2022-08-02
go 1.19 的 release notes
https://golang.google.cn/doc/go1.19
内存模型
- 与其他语言保持一致的内存模型:https://golang.google.cn/ref/mem , https://blog.csdn.net/a18792721831/article/details/137244768
- Sync.atomic 的引入,提供了一些原子操作
更新
- 对注释的增强:https://blog.csdn.net/a18792721831/article/details/144833294
- go generate,go test,go env ,go list 的强化
- 支持设置程序的内存空间 , SetMemoryLimit
- 对 switch 使用跳转表优化,性能优化 20%
go1.20 2023-02-01
go 1.20 的 release notes
https://golang.google.cn/doc/go1.20
语言特性
- go 1.17 支持从切片到数组指针的转换,go 1.20 支持从切片到数组的转换
- unsafe 包增强
- 可比较类型:实现了 comparable 接口
更新
- go 1.20 是最后一个支持 win 7 的版本,后面要求 win10
- go test -json 继续加强
- go build 和 go test 不支持 -i 参数(从1.16开始标记弃用)
- go test 和 go generate 支持 -skip
- 升级了 errors的个数,从单个变成多个,支持包装多个
- Fmt.Errorf支持多个%w包装
go1.21.0 2023-08-08
go 1.21 的 release notes
https://golang.google.cn/doc/go1.21
兼容性
- 改进兼容性声明:https://golang.google.cn/doc/go1.21#tools
- 版本编号更改:从2位版本号,变成三位版本号,换句话说,go 1.21 正确的版本应该是 go 1.21.0
语言特性
- 新增内置函数 : min,max,clear
- 优化包初始化顺序:对导入包排序,查找第一个导入包并从列表删除(不断循环重复)
- 提升类型推断的能力和精度,因为在 go 1.18 中加入了泛型,那么对类型推断来说是个很大的挑战:https://golang.google.cn/ref/spec#Type_inference
- for 循环考虑迭代,而不是循环,这表示后续可能支持在 for 循环中对被迭代对象进行操作。一边遍历一边删除
更新
- go test 多个参数的能力增强
- 编译优化 pgo(go 1.20 加入) 构建速度提升 6%
- 堆栈打印不在打印前100个堆栈,而是前50个和后50个
- 新增 log/slog 包,用于结构化日志
- 切片的操作增强
- map的操作增强
- cmp包对排序的增强
- Context 的增强
- Sync.Once 的增强
go1.22.0 2024-02-06
go 1.22.0 的 release notes
https://golang.google.cn/doc/go1.22
语言特性
- for 循环中,不在共享变量,解决了for循环中如果是指针,那么闭包取到最后一个元素的问题:https://blog.csdn.net/a18792721831/article/details/135886263
- for 循环可以遍历整数 for range 10
更新
- go work 支持设置 vendor 目录
- 优化 go tool trace 的ui
- pgo的更大规模的取消虚拟调用,进一步优化编译速度
- 标准sdk中第一个 v2 包,math/rand/v2 ,v2 表示不兼容升级,所以才会增加
- http 路由的增强
go1.23.0 2024-08-13
go 1.23.0 的 release notes
https://golang.google.cn/doc/go1.23
语言特性
- For-range 循环支持迭代器函数:https://golang.google.cn/issue/56413 , https://golang.google.cn/blog/range-functions
- 对泛型类型别名的支持
更新
-
go 工具开始收集使用情况和故障统计信息,帮助 go 分析go 工具的使用和后续演变: https://telemetry.go.dev/
可以看出,大部分go的使用者还是使用 go 1.17
-
go mod tidy -diff 展示差异,不会修改文件
-
对 time.Timer和time.Ticker 进行优化,不在复用相关对象,而是用完马上回收,并且触发操作变为非阻塞:https://blog.csdn.net/a18792721831/article/details/142415290
-
新的 unique 包,规范化值的操作
-
迭代器 iter 包,支持用户自定义迭代
总结
梳理一下go语言发展历史,可以看到一个编程语言,从发布第一版,到快速迭代,到标准规范,到逐渐趋于稳定,到对更多的os的支持,到性能的不断提升和优化。
梳理一遍go语言发展历史,可以对go语言的过去,当下和未来有了更清晰的认知。
算算日子,go 1.24.0 差不多在 2025-02 到来,不知道又会有哪些优化呢
https://tip.golang.org/doc/go1.24
go 1.24.0 包含的变更
相关文章:
Go-知识 版本演进
Go-知识 版本演进 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具语言包工具小修订 r58(2011/06/29)语言包工具小修订 r59(2011/08/01)语言包工具 r60(2011/09/07)语言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…...
企业级NoSQL数据库Redis
1.浏览器缓存过期机制 1.1 最后修改时间 last-modified 浏览器缓存机制是优化网页加载速度和减少服务器负载的重要手段。以下是关于浏览器缓存过期机制、Last-Modified 和 ETag 的详细讲解: 一、Last-Modified 头部 定义:Last-Modified 表示服务器上资源…...
Android渲染Latex公式的开源框架比较
对比主流框架,介绍如下几款 1、AndroidMath 官网:https://github.com/gregcockroft/AndroidMath/tree/master 基于android原生view方式渲染 优点:速度快,开源协议 MIT license 缺点:不支持文字公式混合渲染 2、Ma…...
ARM学习(42)CortexM3/M4 MPU配置
笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…...
Sam Altman亲自确认:o3-mini即将上线!GPT和o系列模型合并!
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...
数据结构-队列
目录 前言一、队列及其抽象数据类型1.1 队列的基本概念1.2 队列的抽象数据类型 二、队列的实现2.1 顺序表示2.1.1 结构定义2.1.2 基本操作的实现 2.2 链式表示2.2.1 结构定义2.2.2 基本操作的实现 总结 前言 本篇文章介绍队列的基础知识,包括队列的抽象数据类型以及…...
Go Map 源码分析(一)
Go语言中的map是通过哈希表实现的,其底层结构和实现机制如下: 一、hash 结构 hmap结构体:是map的头部结构,主要字段及含义如下: count:表示当前哈希表中的元素数量,与len()函数相对应。flags…...
天机学堂5-XxlJobRedis
文章目录 梳理前面的实现:Feign点赞改进 day07-积分系统bitmap相关命令签到增加签到记录计算本月已连续签到的天数查询签到记录 积分表设计签到-->发送RabbitMQ消息,保存积分对应的消费者:**消费消息 用于保存积分**增加积分查询个人今日积…...
SpringBoot整合junit
SpringBoot 整合 junit 特别简单,分为以下三步完成: 1在测试类上添加 SpringBootTest 注解2使用 Autowired 注入要测试的资源3定义测试方法进行测试 1.实验准备: 创建一个名为 springboot_junit_test 的 SpringBoot 工程,工程目录结构如下…...
Jenkins-pipeline Jenkinsfile说明
一. 简介: Jenkinsfile 是一个文本文件,通常保存在项目的源代码仓库中,用于定义 Jenkins Pipeline 的行为。使用 Jenkinsfile 可以使 CI/CD 流程版本化,并且易于共享和审核。 二. 关于jenkinsfile: jenkins的pipeline…...
SpringMVC 实战指南:打造高效 Web 应用的秘籍
第一章:三层架构和MVC 三层架构: 开发服务器端,一般基于两种形式,一种 C/S 架构程序,一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序,B/S 架构又分成了三层架构三层架构: 表现…...
结合帧级边界检测和深度伪造检测,定位部分伪造音频攻击中的篡改区域
Integrating frame-level boundary detection and deepfake detection for locating manipulated regions in partially spoofed audio forgery 摘要: 部分伪造音频是一种深度伪造的变体,它通过引入伪造或外部来源的善意音频片段来操纵音频语句…...
人工智能之深度学习_[2]-PyTorch入门
文章目录 PyTorch1.PyTorch简介1.1 什么是PyTorch1.2 PyTorch特点1.3 PyTorch发展历史 2 张量创建2.1 什么是张量2.2 基本创建方式2.3 线性和随机张量2.4 0、1、指定值张量2.5 指定元素类型张量 3 张量类型转换3.1 张量转换为NumPy数组3.2 NumPy数组转换为张量3.3 提取标量张量…...
vue2与vue3的区别
目录 1. 性能 2. 组合式 API 3. 生命周期钩子 4. 片段(Fragments) 5. 递归组件 6. 自定义渲染器 7. 全局 API 8. 组件内部的 this 9. 模板语法 10. 兼容性 总结 Vue 2 和 Vue 3 是 Vue.js 框架的两个主要版本,它们在多个方面有所不…...
八股学习 Mysql
八股学习 Mysql 常见面试问题优化其他 定位慢查询方案一:开源工具方案二:MySQL自带慢日志 SQL执行计划示例场景名词解释 索引概念底层数据结构聚簇索引、二级索引(非聚簇索引)覆盖索引覆盖索引应用场景创建原则索引失效 SQL优化表…...
主从复制
简述mysql 主从复制原理及其工作过程,配置一主两从并验证。 主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二…...
服务器数据恢复—Zfs文件系统数据恢复案例
服务器数据恢复环境&故障: 一台zfs文件系统的服务器,管理员误操作删除了服务器上的数据。 服务器数据恢复过程: 1、将故障服务器中所有硬盘做好标记后取出,硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘…...
Linux安装docker,安装配置xrdp远程桌面
Linux安装docker,安装配置xrdp远程桌面。 1、卸载旧版本docker 卸载旧版本docker命令 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine现在就是没有旧版本的d…...
Windows11电脑总是一闪一闪的,黑一下亮一些怎么解决
Windows11电脑总是一闪一闪的,黑一下亮一些怎么解决 1. 打开设备管理器2. 点击显示适配器3. 更新下方两个选项的驱动3.1 更新驱动Inter(R) UHD Graphixs3.2 更新驱动NVIDIA GeForce RTX 4060 Laptop GPU 4. 其他文章快来试试吧🥰 1. 打开设备管理器 在电…...
Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?
Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控)的性能。现有的视频修复方法虽然取得了一些进展,但通常只能针对特定的退…...
使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发
开发一个完整的工作流系统使用 Blazor 和 Elsa Workflows 作为引擎,可以实现一个功能强大的工作流管理和设计系统。下面将提供详细的步骤和代码实现,展示如何在 Blazor 中开发一个基于 Elsa Workflows 的工作流系统。 项目概述 我们的工作流系统将包含以…...
调试Hadoop源代码
个人博客地址:调试Hadoop源代码 | 一张假钞的真实世界 Hadoop版本 Hadoop 2.7.3 调试模式下启动Hadoop NameNode 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中设置NameNode启动的JVM参数,如下: export HADOOP_NAMENODE_OPTS"-Xdeb…...
mkv转码mp4(ffmpeg工具)
基于windows,Linux也可以用,都是命令行 下载路径(https://github.com/BtbN/FFmpeg-Builds/releases) 下载安装包:ffmpeg-n6.1-latest-win64-lgpl-6.1.zip,(根据自己的平台选择下载)并…...
前端项目搭建和基础配置
这个模块主要是介绍从零开始搭建项目的一些操作,包含一些前端常用的配置,这里只是一部分,会在后续的文章中逐步进行补充和完善 一、创建项目 在项目路径下使用以下命令生成前后端项目 npm create vite输入项目名称,框架选择Vue…...
计算机网络 (49)网络安全问题概述
前言 计算机网络安全问题是一个复杂且多维的领域,它涉及到网络系统的硬件、软件以及数据的安全保护,确保这些元素不因偶然的或恶意的原因而遭到破坏、更改或泄露。 一、计算机网络安全的定义 计算机网络安全是指利用网络管理控制和技术措施,保…...
【Qt】02-信号与槽函数
发生的原因与事件 前言一、什么是信号与槽(Signals and Slots)?1.1 信号(Signals)1.2 槽(Slots)1.3 连接方式 二、调用基本的信号与槽函数2.1 代码分析connect()的用法 2.2 结果展示 三、自定义…...
CVPR 2024 机器学习方向总汇(多任务、联邦学习、迁移学习和对抗等)
1、Machine Learning(机器学习)多任务、联邦学习、迁移学习和对抗等 Molecular Data Programming: Towards Molecule Pseudo-labeling with Systematic Weak Supervision 👍摘要Improving Physics-Augmented Continuum Neural Radiance Field-Based Geometry-Agnos…...
spring中bean的循环依赖细节描述
首先,循环依赖不是一件好事,设计上几乎不会这么设计。但是总有时候要碰到一起奇怪的循环依赖。 spring bean循环依赖之所以能实现,也是有条件的,构造函数的依赖显然不行。而bean生命周期的实例化和属性设置是分阶段的,…...
LeetCode - #187 Swift 实现重复的DNA序列
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
【gin】gin中使用protbuf消息传输go案例
在 Gin 中使用 Protobuf 进行高效消息传输 Protobuf(Protocol Buffers)是一种高效的二进制序列化协议,广泛用于高性能场景的数据传输。相比 JSON,Protobuf 具有更小的体积和更快的解析速度,非常适合服务间通信或前后端…...
Vue.js 动态设置表格最大高度的实现
概述 在现代 Web 开发中,响应式设计至关重要,尤其是在处理复杂的布局和数据表格时。表格通常会受到多种因素的影响,如分页、合计行或动态内容,这可能导致表格高度的变化。本文将介绍一个基于 Vue.js 的方法 setMaxHeight…...
Springboot 注解缓存使用教程
Spring Boot Cache 注解使用教程 Spring Boot 提供了强大的缓存抽象,开发者可以通过注解快速实现缓存功能,从而提高系统性能。本教程将全面介绍 Spring Boot 提供的缓存相关注解及其作用,并结合示例讲解实际应用。 1. 常用缓存注解概览 Spring Boot 缓存提供以下核心注解…...
TCP协议与TCP SYN Flood攻击
✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一, TCP握手二…...
Cloud Foundry,K8S,Mesos Marathon弹性扩缩容特性对比
一、Cloud Foundry 使用Scaling an Application Using App Autoscaler插件,基于资源使用情况触发简单扩缩容 CPU、内存、Http带宽、延时等 监控这些资源的使用情况决定扩缩容策略:实例是增加还是减少 Instance Limits 限制实例数量范围,定义…...
python轻量级框架-flask
简述 Flask 是 Python 生态圈中一个基于 Python 的Web 框架。其轻量、模块化和易于扩展的特点导致其被广泛使用,适合快速开发 Web 应用以及构建小型到中型项目。它提供了开发 Web 应用最基础的工具和组件。之所以称为微框架,是因为它与一些大型 Web 框架…...
Git实用指南:忽略文件、命令别名、版本控制、撤销修改与标签管理
目录 1.忽略特殊文件 1.1.那如何配置我们需要忽略的文件的呢? 1.2.如何检验效果? 2.给命令配置别名 3.基本操作之版本回退 3.1.使用场景: 3.2.使用方法: 4.撤销修改 情况一:对于工作区的代码,还没…...
神经网络常见面试题
梯度消失和梯度爆炸 1. 梯度消失(Vanishing Gradient) 定义: 梯度消失是指在反向传播过程中,梯度逐渐变得非常小,导致前面几层的权重更新非常缓慢,甚至几乎不更新,从而影响网络的学习过程。特…...
数据结构漫游记:动态实现栈(stack)
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
PyTorch使用教程- Tensor包
### PyTorch使用教程- Tensor包 PyTorch是一个流行的深度学习框架,它提供了一个易于使用的API来创建和操作张量(Tensors)。张量是一个多维数组,类似于NumPy中的ndarray,但它是基于GPU的,支持自动求导。本文…...
在 Vue 3 项目中集成和使用 vue3-video-play
前言 随着视频内容的普及,视频播放功能在现代 Web 应用中变得越来越重要。如果你正在开发一个 Vue 3 项目,并且需要快速集成视频播放功能,vue3-video-play 是一个轻量级且易于使用的 Vue 3 组件。本文将介绍如何在 Vue 3 项目中使用 vue3-vi…...
02_登录窗口
新建场景 重命名为GameRoot 双击GameRoot进入新场景 同样摄像机清除格式 删除平行光并关闭渲染灯光的天空盒 新建空节点重命名为GameRoot GameRoot为游戏的根节点 在整个游戏中都不会被删除 在游戏的根节点下创建UI的根节点Canvas 创建一个空节点 作为UI根节点下的 登录场景UI…...
基于 JFinal 的国产微服务框架
Jboot 是一个基于 JFinal、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的国产框架。 其特点是: 1、基于 JFinal 完整的 MVC ORM 支持。2、支持多数据源、分库分表和分布式事务。3、支持 Dubbo RPC 的完整功能,有超过 1亿 用户产品正在使用…...
ASP.NET Core - 配置系统之配置提供程序
ASP.NET Core - 配置系统之配置提供程序 3. 配置提供程序3.1 文件配置提供程序3.1.1 JSON配置提供程序3.1.2 XML配置提供程序3.1.3 INI配置提供程序 3.2 环境变量配置提供程序3.3 命令行配置提供程序3.4 内存配置提供程序3.5 配置加载顺序 3.6 默认配置来源 3. 配置提供程序 前…...
Axios 封装:处理重复调用与内容覆盖问题
问题描述&背景 下拉选择框,支持搜索,搜索时携带参数调用接口并更新下拉选项下拉选择连续进行多次搜索,先请求但响应时间长的返回值会覆盖后请求但响应时间短的举例: 搜索后先清空选项,再输入内容进行搜索。清空后…...
MySQL程序之:使用DNS SRV记录连接到服务器
在域名系统(DNS)中,SRV记录(服务位置记录)是一种资源记录,它使客户端能够指定指示服务、协议和领域的名称。DNS查找该名称会返回一个回复,其中包含该领域中提供所需服务的多个可用服务器的名称。…...
Swift Parameter-free Attention Network模型详解及代码复现
研究动机 在深度学习领域,超分辨率技术的发展面临着 模型复杂度与推理速度 之间的权衡。传统的基于注意力的超分辨率网络虽然能提高性能,但往往需要较大的感受野和参数化的注意力图,这可能导致推理速度下降。 为了解决这一问题,研究人员提出了Swift Parameter-free Atten…...
React进阶之react.js、jsx模板语法及babel编译
React React介绍React官网初识React学习MVCMVVM JSX外部的元素props和内部的状态statepropsstate 生命周期constructorgetDerivedStateFromPropsrendercomponentDidMount()shouldComponentUpdategetSnapshotBeforeUpdate(prevProps, prevState) 创建项目CRA:create-…...
渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法
目录 原理 XML语言解释 什么是xml语言: 以PHP举例xml外部实体注入 XML语言结构 面试题目 如何寻找xxe漏洞 XEE漏洞修复域防御 提高版本 代码修复 php java python 手动黑名单过滤(不推荐) 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 原理 XXE&…...
macOS安装Gradle环境
文章目录 说明安装JDK安装Gradle 说明 gradle8.5最高支持jdk21,如果使用jdk22建议使用gradle8.8以上版本 安装JDK mac系统安装最新(截止2024.9.13)Oracle JDK操作记录 安装Gradle 下载Gradle,解压将其存放到资源java/env目录…...
openwrt下oaf插件编译安装,实现上网行为监控
文章目录 入门级APP青少年模式设备屏幕使用时间电脑浏览器使用时间限制Surpal 介绍安装使用进阶级专业级旁路由方案openwrt路由器固件编译OAF(Open App Filter)安装编译带有oaf的固件固件烧写设备上电启动应用特征库设置黑白名单及应用访问限制骨灰级ref守护孩子视力,用科技“…...