鉴于当前形势,加之对云原生技术的爱好,所以想从用一些云原生组件到开发一些 operator ,这就要用到 go 语言了。 所以想请教一下大佬们,现在开发 go 语言,都用什么版本比较好啊,就像 java 的话 java8 用的人比较多一样,go 有这个说法么? 另外有啥好的学习资料可以推荐么? 抱拳.jpg
1
thoo61871 168 天前 1
go 没这么多包袱,用最新稳定版就好了。看看语法一天就直接上手写项目
|
2
Smilencer 168 天前 via iPhone 1
菜鸟教程 go 看一遍,直接上手写,遇到不会的问问 ChatGPT
|
3
UxwVI042kEc5pNx6 168 天前 3
要兼容 Win7 等老系统用 go1.20 或更低版本,在 Win10 及以上系统上不需要兼容老旧系统直接最新稳定版。
|
4
nanmu42 168 天前 via iPhone 6
Golang 第二语言指南: 学习路径、最佳实践以及工程化
https://nanmu.me/zh-cn/posts/2021/way-to-go/ |
5
Cannian 168 天前 2
注意一下你的开发环境和运行环境的系统,如果都满足条件就用最新的
比如说提案上写着将来 go1.24 需要 Linux 3.17 kernel ,也就是不支持 centos7.x 。https://github.com/golang/go/issues/67001 |
6
redbule 168 天前 1
别纠结版本,用最新的就行了,go 的新版本特性不多,兼容性也是保障的
|
7
AEnjoyable 168 天前 via Android 1
云原生+go = Linux 容器中运行 没有兼容性包袱 用最新就行
|
8
lifei6671 168 天前 2
按照我厂给的规范,生产使用的版本要落后官方一个大版本。也就是官方现在推出的事 1.23 ,我们就推荐使用 1.22.
|
9
dhb233 168 天前 1
go 的优势就是上手比较容易,有一点点难度的可能就是 interface 了。直接用最新版就可以,感觉没多大差别
|
10
koplonjaslon02 168 天前
生产项目都直接用最新版,而且还用上了 exp 的一些函数,项目组很多兼容性写法都被领导批没必要。项目编写时,go 也发展了几个版本,旧版写法也是非必要就不怎么动,新版写法也时不时会用一下。
|
12
guanzhangzhang 168 天前
看官方版本,例如现在 1.23 的小版本号是.3 ,而 1.22 版本是 1.22.9 ,那优先使用 1.22 版本
|
13
BinaryDH 168 天前
抓紧入云原生的坑, 现在还有点点红利可图.
现在的招聘最后几条, 都是会云原生的优先! |
14
whyso 168 天前
go 没有那么多道道,就是简单直接,干就完了
|
16
afxcn 168 天前
不要相信学 go 一天上手这样的说法,如果你有其它语言的知识背景,倒是可以快速上手。
|
17
Richared 168 天前
一天上手?是上手 hello world 么。。。
|
18
lasuar 168 天前
go 没有 java 那个习惯,新版本基本上兼容旧版本代码。一般建议用次新版本,另外,1.18 是首个泛型版本注意。
|
19
slion 168 天前 1
有别的语言基础,几天上手没有太大问题,使用 web 框架就可以开始写一些简单的业务了,但如要深入得花不少时间,我用 go 好几年了,日常工作大部分都是 CRUD 。
goroutine ,channel ,并发编程,网络编程,GMP 调度模型,GC 原理,逃逸分析,runtime 等,都是值的深入研究的。 |
20
shinession 168 天前 1
@nanmu42 不错, 我收藏了
|
21
XIU2 168 天前
话说,有没有人遇到过 Go 编译出来的文件被误报毒的问题?
几年前的时候,我就遇到过,我升级最新的 Go 1.16 版本并编译发布新版本后,就开始有人反馈出现各杀毒软件报毒的情况,临时装个旧 Go 版本编译就正常,新版本 1.16 的 Go 哪怕只写个 Hello, World! 都报毒(而且经过观察似乎只针对 Windows 64 位 的编译版本),给我整不会了,最后我只能去各杀毒软件提交申诉,不过只有个别杀毒软件回复解决了,有些就石沉大海或者干脆找不到申诉入口。 不过后来似乎就没人反馈误报毒了,似乎是各杀毒软件对 Go 新版本特殊处理了? 我后来也在官网看到官方提到了误报的事情,似乎是很普遍的情况? Why does my virus-scanning software think my Go distribution or compiled binary is infected? This is a common occurrence, especially on Windows machines, and is almost always a false positive. Commercial virus scanning programs are often confused by the structure of Go binaries, which they don't see as often as those compiled from other languages. If you've just installed the Go distribution and the system reports it is infected, that's certainly a mistake. To be really thorough, you can verify the download by comparing the checksum with those on the downloads page. In any case, if you believe the report is in error, please report a bug to the supplier of your virus scanner. Maybe in time virus scanners can learn to understand Go programs. 因为这个原因,导致我对更新 Go 版本非常谨慎,担心再次出现该问题,目前我还停留在 1.18 版本。。。 所以我想知道,现在的 Go 新版本还存在这类问题么? 是不是应该像楼上所说,最多只更新到次于最新版本( 1.22.0 )的版本号( 1.21.0 )? |
22
Pierro 168 天前
java 转 go 第一步先忘记 java
|
23
crackidz 168 天前
Go 的版本都是跟着公司走的,公司你说了算就可以最新版,虽然实现可能有变更,但是兼容老版本编译。你不会没有自动化测试的吧,对吧...
@XIU2 这种东西都是开白名单的,小众编程语言都有这个问题,只是其他的更新没那么快,Go 就显得比较特殊了,Go 现在变大众了,就没这些问题了 |
24
yyancy517 168 天前
之前尝试过 go, 它的错误处理和日志没有堆栈真的反人类. 想问下实际项目中, 真的所有方法都返回一个 err 处理吗, 那这不和 java 中的 throws Exception 一样吗.
|
25
charslee013 168 天前
@XIU2 找到有人曾在官方的 GitHub 上反馈过这个问题 https://github.com/golang/go/issues/44323 ,现在来看应该就是 1.16 版本被误报了,最新的应该没问题
|
26
pkoukk 168 天前
|
27
ExplodingFKL 168 天前
|
28
PN27149 168 天前
operator 不一定要用 go 写,别的语言也能写
|
31
Ipsum 167 天前
直接最新的完事。
|
32
UxwVI042kEc5pNx6 167 天前
@lysShub 是吗?官方文档写的是 Go 1.21 开始至少需要 Windows 10 或 Server 2016 ,而不是停止维护。而且在 https://go.dev/dl/ 可以看到 Go 1.21 开始的包大小( 70MB 左右)比 Go 1.20 ( 100MB 左右)小了三四十兆,不是移除了对旧系统的支持应该小不了这么多。
https://go.dev/doc/go1.20#windows |
33
wwqgtxx 167 天前
@Seves 其实并没有什么关系,事实上直到 go1.21.3 还是能在 win7 上正常运行的,只是 1.21.4 调用了一个新的 win32 api 后才导致无法启动的
|
34
wwqgtxx 167 天前
对于 go1.21 来说,影响 win7 兼容性的 commit 只有一个
https://github.com/golang/go/commit/9e43850a3298a9b8b1162ba0033d4c53f8637571 对于 go1.22 来说,也就只有三个 https://github.com/golang/go/commit/693def151adff1af707d82d28f55dba81ceb08e1 https://github.com/golang/go/commit/7c1157f9544922e96945196b47b95664b1e39108 https://github.com/golang/go/commit/48042aa09c2f878c4faa576948b07fe625c4707a 然而这些 commit 都不可能导致包大小有 30m 的变动,当你手动 revert 这些 commit 后可以在 win7 上正常运行,同时也不会增加编译出的文件大小 |
35
wwqgtxx 167 天前 1
翻阅了一下相关 commit ,@Seves 提到的包减小了是因为
https://go-review.googlesource.com/c/go/+/475378 这个提交将 pkg/tool 中二进制文件的 debug info 信息删除所以才减小了那么多,和移除了对旧系统的支持无关 |
36
UxwVI042kEc5pNx6 167 天前
@wwqgtxx #33 哦哦,这样啊。很好奇那三十四兆是怎么减小的。
|
37
UxwVI042kEc5pNx6 167 天前
@wwqgtxx #35 原来如此,感谢。
|
38
UxwVI042kEc5pNx6 167 天前
@wwqgtxx #33 我在 Win7 上从 go1.21.3 往下试到 go1.20.14 ,go1.21 的版本都会报错:
fatal error: kernel32.dll not found runtime: panic before malloc heap initialized 只有用 go1.20 编译的程序可以正常运行,所以还是有关系的。 |
40
UxwVI042kEc5pNx6 167 天前
@wwqgtxx #39 所以为了同时兼容 32 和 64 位的老系统,最好还是不要用 go1.20 以上版本。
|
41
wwqgtxx 167 天前 1
@Seves 这么说也确实没问题,我这边的实测是 1.21.3 编译出来的 386/amd64 产物均可以在 win7 64bit 下正常运行,去除#34 提到的指定 commit 的 go1.21 和 go1.22 也都可以在 win7 64bit 下正常运行
至于 32 位系统下为何不行,但是在 64 位系统下 wow64 可以的问题我没有深入测试过,能找到的资料也非常有限,一直没人深究到底是哪个 commit 的改动引发了这个不兼容 |
43
wwqgtxx 165 天前
@Seves #38 我手动装了一下 win7 32 位版本的系统,和你的版本一样也是 7601 ,但是我安装了 kb4474419 ,之后运行 golang1.21 版本编译出来的文件一切正常,你也可以测试一下我 patch 后的 1.22 编译出来的二进制兼容性如何
https://github.com/MetaCubeX/mihomo/releases/download/v1.18.5/mihomo-windows-386-v1.18.5.zip |
44
UxwVI042kEc5pNx6 165 天前
|
46
wwqgtxx 165 天前
@Seves #44 我再次重新安装了一次 win7 ,在没有安装 kb4474419 的时候出现了和你一样的报错,安装后即可正常启动了
https://www.catalog.update.microsoft.com/search.aspx?q=kb4474419 实际上很多非 golang 程序的安装也必须要建立在安装 kb4474419 之后(如 vmtools ),具体原因还需要探究 |
47
UxwVI042kEc5pNx6 165 天前
@wwqgtxx #46 我最后安装的补丁是 KB2534111 ,安装 KB4474419 后确实可以运行了。🤙🤙🤙
|
48
nextvay 165 天前
1.8 以上吧,泛型 挺好的,适合封装些小工具
|
49
wwqgtxx 165 天前
@Seves 找到原因了
https://github.com/golang/go/commit/a17d959debdb04cd550016a3501dd09d50cd62e7 根据 msdn 文档: Windows 7 、Windows Server 2008 R2 、Windows Vista 和 Windows Server 2008:LOAD_LIBRARY_SEARCH_标志在安装了 KB2533623 的系统上可用。 若要确定标志是否可用,请使用 GetProcAddress 获取 AddDllDirectory 、RemoveDllDirectory 或 SetDefaultDllDirectories 函数的地址。 如果 GetProcAddress 成功,LOAD_LIBRARY_SEARCH_ 标志可以与 LoadLibraryEx 一起使用。 所以在缺乏补丁的 win7 上就会出现找不到系统 dll 的问题 |
50
kevinpendragon 160 天前
版本别太老比如 1.9 这种,1.11 之后的区别不是很大
|