高手问答第 302 期 —— 如何快速编写出高质量的 Go 应用程序?

小白兔爱吃大灰狼 发布于 2023/06/13 15:11
阅读 9K+
收藏 6

【深圳】源创会:5.26下午、轰趴馆等你”

Go语言(Golang)是一种由Google开发的静态类型编程语言,旨在提供高效的并发编程能力和简洁的语法。同时Go语言是云原生软件栈的主要编程语言之一,在服务器端、云计算、物联网、人工智能等领域都有着广泛的应用,其重要性不言而喻。随着Go语言越来越受欢迎,越来越多的开发者开始学习和使用Go语言。与Go相关的语法并不难学,但很少有人能通过语法快速掌握Go语言的内部运作机制,以及背后的实现原理。

希望通过本期活动,让大家学会如何快速编写出高质量的Go应用程序。

OSCHINA 本期高手问答 (6 14 - 6 20) 我们请来了@恋恋美食(任洪彩)和大家一起探讨关于Go语言、源码相关的问题。

可讨论的问题包括但不限于:

1.Go语言中,如何处理并发编程中的竞态条件和死锁问题?

2.Go语言的标准库提供了很多实用的包,比如netfmtmath等,你是如何利用这些包进行开发和实践的?

3.相较于其他静态类型编程语言,Go语言在编写代码时有哪些优势和不足?如何扬长避短?

4.Go语言对于新手友好,但在实践中可能会遇到一些比较难理解的概念,比如指针、goroutinechannel等,你是如何克服这些难点的?

5.随着Go语言的发展,未来的应用场景会更加广泛,你认为Go语言在哪些领域会有更大的发展前景?

或者其他与Go、并发编程、源码相关的问题,也欢迎大家积极提问!

嘉宾简介

任洪彩

华为云原生开源团队成员,CNCF(云原生计算基金会)官方大使,KubernetesKarmada等项目的资深维护者。

华为员工培训中心讲师,负责Go语言培训及软件工程能力建设。

Nokia、华为等公司参与过多个大型项目的研发与重构,对GoC/C++PythonSwift等语言均有深入的研究与实践。


为了鼓励踊跃提问,@博文视点 会在问答结束后从提问者中抽取 5 名幸运会员赠予《Go专家编程》(第2版)一书。

京东购买链接:

https://item.jd.com/13710415.html

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就Go、并发编程相关相关问题向 @恋恋美食 提问,请直接回帖提问。

加载中
0
clearsky1991
clearsky1991

@恋恋美食 你好,对于go小白,想问你这几个问题:

  1. 在高并发的应用场景下,如何通过使用 sync 包中的锁来保证数据同步性,并提高程序的性能和响应速度?
  2. 在 web 开发中,Go 语言常用的 web 框架有哪些?它们的特点和适用场景是什么?
  3. 在使用 Go 进行网络编程时,如何处理常见的网络异常情况,如连接超时、连接中断等?有哪些常用的网络调试和优化工具在 Go 中可用?
恋恋美食
恋恋美食
几个方法论的建议: 1. 减小锁的粒度,用完即时释放 2. 读多写少场景,考虑使用读写锁 另外可以尝试下不用锁,原子操作。
-1
alien_hjy
alien_hjy
不写错误处理就好了(误)
-1
gpress
gpress

@恋恋美食 go支持wasm比较弱,有推荐go的wasm开发框架吗?

-1
dwingo
dwingo

@恋恋美食 Go语言现在已经比较稳定了, 未来还可能会加入重要的新特性吗? 有计划推出Go 2.0吗?

恋恋美食
恋恋美食
很难再有像泛型同等粒度的更新了,没了解到Go 2.0的计划。
-1
李隆鸡
李隆鸡

@恋恋美食

java里面有线程池,也就是说一般不直接用线程,而是用线程池。go里面也是这样吗,是不是go也不推荐直接 go xxx(),而是用go的携程池。

儒雅随和大师兄
儒雅随和大师兄
这是肯定的,数量不可控的情况下,太多的协程反而使得性能下降
-1
七进制1
七进制1
错误处理能更优雅处理就更好了
-1
taadis
taadis

@恋恋美食 Go在服务端/网络端/云计算/云原生等场景下的应用非常繁荣和普及了,但在GUI场景貌似没有什么比较重量级的应用,能否介绍下Go在GUI方面的优劣势,以及现有的一些Go相关的GUI库或框架?

恋恋美食
恋恋美食
没有GUI开发的经验,但从谷歌自家项目中使用情况来看,确实也没用Go来构建GUI,这方面Go的生态还没成型。
oschina4cyy
oschina4cyy
回复 @Francesca : gioui , fyne , gogi
F
Francesca
Go似乎没有看到开发GUI的案例
-1
静了禅音

@恋恋美食 go如合面对像rust这样无gc语言的竟争,如何合理规避像由gc带来的性能问题?由此gc的存在,会让go在底层级别的系统编写带来无法规避的劣势吗?

飞酒
飞酒
全民机器人时代来临后,rust的时代就来了,go这方面跟不上,注定会在这方面被甩下
恋恋美食
恋恋美食
回复 @SunnyGo : 是的,每种语言都有自身优势,Go语言也没必要朝Rust进向,其编译器和运行时也在不断地优化和改进。
SunnyGo
SunnyGo
go的机理就是go routine,没于gc不太可能。你可以作一部分手动gc
-1
Doeeking
Doeeking

@恋恋美食 Go 的error在编写多了程序后确实比较繁琐,虽然其官方有新的error处理方案但迟迟没有实现,因此请问如何优雅地处理error?此外虽然个人常常编写一些go语言命令行、gui、web程序,但公司实际业务没用上,请介绍一些其他公司已使用的实际应用场景,以便更好的了解go其他使用。谢谢

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部