Golang是否适合作为首选的编程语言?
Golang是否适合作为首选的编程语言? 大家好! 恳请各位给予真诚的建议,所有帮助都将不胜感激。
我听说过Go语言及其出色的性能,因此对用它来开发我的Web系统很感兴趣。
注意:我只学过基础的PHP课程、基础Java和基础C#,因为我还没有决定选择哪种语言作为我的职业方向。
1- 在学完编程/算法逻辑后直接学习Go是否是个好主意?也就是说,Go能否作为我用于生产环境的第一门编程语言?
2- 还是说我应该先学习一门入门语言,比如PHP、C#等,深入学习面向对象和MVC,然后再来学习Go?
3- 与PHP、C#或Node.js相比,我使用Go入门会有同样的便捷性吗?
非常感谢!
你好 @Anielkis_Herrera,非常感谢!
Go 1.11(现在是1.11.1版本)支持模块功能,这将成为管理依赖关系的标准方式。
我找到的最简单的课程是这个:https://www.udemy.com/go-programming-by-example/
每个主题都包含了非常简单的原理解释……这帮助我加深了理解
您想学习的编程语言取决于您想要涉足的领域。如果讨论的是Web应用程序、网络服务器等方面,Go语言可能是非常好的选择;但如果您想编写图形界面应用程序,可能就不太适合了。假设我们讨论的是前一种情况:
- 绝对是肯定的
- 如果您最终目标是使用Go语言,为什么要花时间学习其他语言呢?另一方面,Go语言并非传统意义上的面向对象语言,因此学习面向对象编程总体上是有用的,但与Go语言的直接关联性不大。
- 由于Go语言的简洁性,您可以获得最轻松的学习起点。我推荐您从这本书籍开始学习。
Vinicius_Barreto:
我意识到大多数Go语言课程都假设学生已经是开发者
有相关背景会有帮助但不是必须的。我认为Go语言的语法与C语言非常接近这一点并不可怕,反而是一个优势。C语言语法非常简洁,从统计数据来看,用Go语言编写的代码会比许多其他"简单"语言更短小精悍。更重要的是,你能写出可读性强且易于维护的代码。如果谈到接口或并发,确实会复杂些,但在Web应用开发中并不会过多接触这些概念。
另一方面,编写自托管Web应用的便捷性相较于配置Web服务器而言可能是一大优势(至少在我看来如此)。
// 代码示例保留原文
1 - 有一场由Audrey Lim主讲的演讲,讲述了她将Go作为第一门编程语言学习的经历。现有大量学习资源可供参考,而且社区也非常乐于提供帮助。
2 - 另一方面,我认为先学习一门更面向对象编程的语言确实可能会更有益,特别是那种也能让你使用函数式范式进行编程的语言。JavaScript领域似乎正朝着这个方向发展。这样当你尝试学习Go语言时,能够以更具批判性的眼光看待它,如果你喜欢的话,还能更好地欣赏它的特性。
3 - 正如我所说,学习Go语言的资源非常丰富。特别是从Go 1.11版本开始支持模块功能后,入门变得更容易了。现在管理依赖项将会简单得多。
简短回答:我不会从Go语言开始学习。
详细说明:你或许应该从最简单但功能强大的语言开始:Python。学习设计模式,熟悉编程,更重要的是:完成一些让自己感到自豪的应用程序。
通过成功开发应用程序,你将首先感受到生活中成功的真正快乐(这个观点可能带有主观色彩)。
当你掌握了Python并感受到这种快乐后,不应该就此满足并说"是的,我能行",因为实际上你还不能。
相反,你应该选择另一种具有不同复杂度的语言。Go语言将是第二门语言的完美选择。虽然初期需要更多投入才能完成应用程序,但它在快速原型开发领域表现出色。
注意:为了真正享受Python编程的乐趣,请启用代码检查工具来强制你规范编写代码。=> Visual Code或Pycharm为你提供了开箱即用的Python代码检查体验。
1个点赞
你好,非常感谢你的回复!
1 - Audrey Lim 有一个关于她作为第一门编程语言学习 Go 的演讲。那里有很多资源,而且社区非常有帮助。
感谢分享这个视频!
2 - 另一方面,我认为是的,先学习一门更面向对象编程的语言可能是有益的,特别是那种也能让你用函数式范式编写的语言。JS 世界似乎正朝着那个方向发展。这样,当你尝试 Go 时,你就能以更批判的眼光看待它,并且如果你喜欢的话,还能更好地欣赏它。
是的,我也倾向于先用 JS 开始我的 Web 项目,同时从容地学习 Golang,然后将应用程序的后端迁移到 Golang。
3 - 正如我所说,有很多学习 Go 的资源。现在开始学习变得更容易了,特别是有了 Go 1.11 的模块支持。现在管理依赖关系会容易得多。
是的,确实如此!在我参加的一门 Go 课程中,我接触了用于依赖管理的 Godep,发现它非常有趣,并且为依赖管理提供了便利!
简短回答:我不会从Go语言开始学习。
详细说明:你或许应该从最简单但功能强大的语言入手:Python。学习设计模式,熟悉编码,更重要的是:完成一些让你自豪的应用程序。通过成功开发应用程序,你将首次感受到生活中成功的真正快乐(这带有个人偏见)。
当你学完Python并感受到快乐后,你不应该安于现状并说:“是的,我能行”,因为不,你还不能。相反,你应该尝试另一种具有不同复杂性的语言。Go语言将是第二语言的完美选择。最初开发应用程序需要更多投入,但在快速原型开发领域非常强大。
注意:为了真正享受Python编程,请启用代码检查工具来强制你正确编写代码。=> Visual Code或Pycharm为你提供了开箱即用的Python代码检查体验。
你好 @AlexisTM,非常感谢你的回复!
正如你从我之前的评论中所见,我得出了与你相似的结论。
然而,我相信未来当Go语言像PHP、Java或Python一样著名时,将会出现更多针对刚完成编程逻辑基础课程的初学者的教程,从而使初学者更容易进步并很好地吸收Go语言的知识。
但我想强调,我不会放弃Go语言,我会逐步学习它。一步一个脚印。
Python是我尚未尝试过的少数语言之一。它比JavaScript更容易吗?
你好 @geosoft1 非常感谢你的回复!
geosoft1: 你想学习的语言取决于你想接触的领域。如果我们讨论的是Web应用程序、网络服务器等,Go可能是非常好的选择;但如果你想编写图形界面应用程序,可能就不太合适了。假设我们讨论的是前者情况:
- 绝对是肯定的
- 如果你最终想使用Go,为什么还要花时间学习其他语言呢?另一方面,Go不像其他语言那样是面向对象的语言,因此学习面向对象编程通常是有用的,但与Go的直接关联性不大。
是的,我的主要意图是开发Web应用程序。 我是一个真正的初学者,对选择哪种编程语言充满疑惑,并且面临着最基础的困难。 我注意到大多数Go课程都假设学生已经是开发者,因此跳过了一些基础解释,特别是关于Golang从C语言继承的语法。
所以我考虑是否应该尝试接受一个比我现在能力更大的挑战。这让我思考,先学习另一种更简单的编程语言(PHP 7、JS或C#)来完成当前Web项目,同时非常缓慢且不着急地学习Golang,等到将来有经验、对使用Golang开发感到安心,并且应用程序性能至关重要时,再将Web应用程序迁移到Golang,这样是否更合适。
geosoft1: 3. 使用Go你可以获得最简单的入门体验,因为这门语言很简单。我推荐你从这本书开始。
非常感谢你分享这本书。 它将对我有巨大帮助!
你好@geosoft1,非常感谢你的回复!
geosoft1: 如果有相关背景知识会有帮助但不是必须的。我认为Go语言的语法与C语言非常接近这一点并不可怕,反而是一个优势。C语言语法非常简洁,从统计数据来看,用Go语言编写的代码会比许多其他"简单"语言更短小精悍。
是的,我完全同意。通过学习更简单但更冗长的语言时,我总是带着批判和深思的眼光看待事物。虽然我还没有深入研究这些语言,但我在思考为什么需要写这么多代码才能让程序运行(在我学习Java和C#时就有这种感受)。
Go语言在这方面赢得了我的钦佩。
虽然我没有机会在哈佛大学学习,但我心中一直有个理念:“一切都可以改进。”(我不确定这是否真实,但我听说这是哈佛的原则之一)
我认为Go语言的创造者在决定创建Go时也怀着同样的想法。
因此我成为了这门编程语言的崇拜者,并渴望学习它。
geosoft1: 更重要的是,你将能编写可读性和可维护性强的代码。如果我们讨论接口或并发,嗯…这些确实比较复杂,但在Web应用开发中你不需要过多接触这些概念。
是的,目前我认为并发对我来说是高级话题。
我承认仅通过YouTube和在线课程来真正学习面向对象是非常困难的。我知道学习Go语言的某些部分也会面临同样的情况。但我不会轻易放弃。
geosoft1: 另一方面,编写自托管Web应用的便捷性相比配置Web服务器来说可能是个巨大优势(至少从我的角度来看)。
我完全同意。能够包含自托管Web功能真是太棒了。
以下是我的个人观点…
-
在学习C语言之前,我接触过其他语言,但学习C语言时遇到了困难,因为当时它相对较新,并且基于比我之前接触过的更高级的概念。但在学会之后,我再也不想用任何其他语言编程了。Go语言是我自20世纪80年代初以来遇到的第一个让我觉得比C语言更喜欢的语言。所以,如果你学习了Go语言,你可能就很难再降级使用其他语言了。
-
(重申,这是我的个人看法!)PHP和C#并非入门语言。Go语言的入门语言是C语言(它是PHP、C#、C++、Java、Javascript等语言的始祖)以及其他Algol系列的语言,如Pascal和Modula 2。此外,Go语言允许面向对象和函数式编程,但它实际上是一种面向数据的命令式语言。在Go语言中,最重要的是理解计算机硬件的工作原理。计算机是一台具有冯·诺依曼架构的真实电子数据处理机器,而不是某种抽象的数学概念。所以,如果你想研究面向对象编程范式,请忘掉Go语言,去尝试C++或Java。如果你在学习Go语言之前先学习了这两种或其他OOP语言,甚至可能会给你带来问题。
-
如果你想学好Go语言,在某些方面会比PHP、Python或Javascript这类解释型语言更困难。但与C、C++或Java相比,Go语言要容易和简单得多。(至少对我来说是这样。)学习Go语言的好处不仅仅是效率,还有生产力。Go语言是类型安全和内存安全的,因此你可以花更少的时间调试,而将更多时间用于编写新代码。
希望你能得到更多回复,因为我对这个问题很有主见,而且我的观点并不常见。请仅将我写的内容作为参考,不必过于认真。
我认为应该抛开特定编程语言,先学习计算机科学/工程相关主题:算法、数据结构、逻辑与形式语言、计算复杂度、数字系统、计算机体系结构、软件工程(即设计模式)、并发编程、编译器、操作系统、分布式系统等(如果这些术语听起来有些奇怪请见谅,我只是临时翻译)。这样编程语言就变成了工具,最佳选择是更适合工作的那种,或者当多种语言都适用时选择你最熟悉的那种。C#、Java、Go等语言都适合作为学习这些主题的起点,至少前几个主题没问题。但话说回来,你的职业规划是什么?你学习编程的目的是什么?
除了这种更宏观的学习路径,如果你想讨论具体语言的话,我建议从C语言开始:你会学到内存管理、类型系统,以及许多后续语言都借鉴的语法等等。这并不是说你不能从Java(我就是这样开始的)、C#或Go开始学习,但务必要理解这些语言在背后帮你处理了哪些底层细节(比如内存管理),以免日后踩坑。这也是为什么我不推荐从Ruby、Python等动态语言入门的原因。我也会避开Javascript和PHP,它们实在不够完善。虽然你可能迟早会接触到这些语言,也应该学习它们,但我不建议用它们来打基础。另外,MVC、OOP等都是编程原则,并不与特定语言绑定。某些语言或框架可能更倾向于某种范式,但这不代表你不能单独学习这些概念本身。
我知道第一段的建议可能要求太高,也许你只是想学些编程基础。但你确实提到了"职业发展"这个词,而我坚信比起具体语言,编程思维才是核心。掌握扎实的编程原则并能跨语言运用,会比单纯精通某门语言让你成为更优秀的程序员。
不过如果你问的是Go语言,它确实是个不错的选择:语法简洁,你可以用它学习算法、数据结构、设计模式和并发编程等重要基础知识。
Go语言完全适合作为首选的编程语言,特别是对于Web系统开发。以下是对你问题的具体回答:
1. Go作为第一门生产环境语言
是的,Go可以作为你的第一门生产环境编程语言。Go语法简洁,标准库强大,特别适合Web后端开发。你无需先学习其他语言,因为Go的设计目标之一就是降低学习曲线。例如,以下是一个简单的HTTP服务器代码:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
})
http.ListenAndServe(":8080", nil)
}
这段代码直接运行即可启动一个Web服务器,比许多语言更简单。
2. 直接学习Go与先学其他语言的比较
你不需要先深入学习PHP或C#的面向对象和MVC。Go有自己的并发模型和结构化方式,学习它可以直接掌握现代后端开发的核心概念。Go的接口和组合机制提供了清晰的代码组织,例如:
type Handler interface {
ServeHTTP(http.ResponseWriter, *http.Request)
}
type MyHandler struct{}
func (h MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Handled request"))
}
这避免了传统面向对象语言的复杂继承层次。
3. Go与PHP、C#、Node.js的入门便捷性对比
Go在入门便捷性上优于PHP、C#和Node.js:
- 安装简单:官方提供单一二进制分发,无需复杂环境配置。
- 编译快速:代码直接编译为本地可执行文件,部署方便。
- 并发原生支持:Goroutine和channel简化了并发编程,而Node.js的异步回调或PHP的多进程模型更复杂。
例如,并发处理HTTP请求:
package main
import (
"net/http"
"time"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
go processRequest() // 使用goroutine处理并发
w.Write([]byte("Request received"))
})
http.ListenAndServe(":8080", nil)
}
func processRequest() {
time.Sleep(2 * time.Second) // 模拟处理耗时
}
相比之下,PHP或Node.js需要额外配置或回调嵌套。
总结:Go语言设计现代,文档完善,社区活跃,是理想的入门和生产语言。直接学习Go可以让你快速构建高效Web系统,无需绕道其他语言。


