Go 的 main 函数必须位于 main 包且无参数无返回值,Python 的 main 无此限制;Go 的 append() 返回新切片需赋值,Python 的 append() 原地修改;Go 并发靠 goroutine/channel,Python 受 GIL 和异步生态约束。

Go 的 main 函数必须在 main 包里,Python 没这限制
Go 编译型语言,入口强约束:找不到 package main 或没 func main() 就直接报错 no main package in。Python 是解释执行,任意文件都能跑,if __name__ == '__main__': 只是约定,不写也不拦你。
实操建议:
- 新建 Go 文件第一行必须是
package main,否则go run直接失败 - Python 脚本可以没有
if __name__ == '__main__':,但模块被 import 时会执行顶层代码——这点常导致意外初始化 - Go 的
main函数不能带参数、不能有返回值;Python 的main()函数完全自由,甚至可以不叫main
Python 的 list.append() 是原地修改,Go 的 append() 返回新切片
这是最常踩坑的语义差异:Python 列表方法基本都改原对象,Go 的 append() 不动原切片,而是返回扩容后的新底层数组引用——如果忽略返回值,就等于什么都没加。
常见错误现象:append(s, x) 后打印 s 还是老长度,以为没生效。
立即学习“Python免费学习笔记(深入)”;
实操建议:
- Go 中必须写
s = append(s, x),漏掉赋值就白调了 - Python 的
lst.append(x)不用接返回值,它没有返回值(返回None) - Go 的
append()在底层数组满时会分配新内存,旧引用可能失效;Python 的list自动扩容,但所有引用仍指向同一对象
HTTP 服务启动方式不同:http.ListenAndServe 阻塞,flask.run 默认也阻塞但可关
两者默认都是“一启就卡住”,但机制和可控性差别大。Go 的 http.ListenAndServe 是纯阻塞调用,不抛异常、不返回,除非端口被占报 listen tcp :8080: bind: address already in use;Python 的 flask.run() 默认也阻塞,但加 debug=True 会开重载+调试器,容易误以为“它更智能”。
实操建议:
- Go 中想后台启 HTTP 服务,得显式起 goroutine:
go http.ListenAndServe(":8080", nil),否则后续代码不执行 - Python 的
flask.run()在生产环境严禁使用,必须配 WSGI(如gunicorn);Go 的http.ListenAndServe倒是可以直面公网(当然要配 TLS 和超时) - 两者都默认不设读写超时——线上必加:
http.Server{ReadTimeout: 5 * time.Second}/app.config['PERMANENT_SESSION_LIFETIME']不解决这个问题
并发模型根本不同:Go 用 goroutine + channel,Python 用 threading + asyncio 混搭
Go 的并发是语言级原语,goroutine 开销极小(KB 级栈),调度由 runtime 掌控;Python 的 GIL 让多线程无法真正并行 CPU 密集任务,asyncio 又要求全链路异步(包括 DB 驱动、HTTP 客户端),否则一个 time.sleep(1) 就卡死整个 event loop。
实操建议:
- Go 中并发 HTTP 请求直接上
go func() { ... }()+chan收集结果,几十万goroutine很常见 - Python 里想并发发 100 个 HTTP 请求,用
asyncio.gather()前得确认aiohttp或httpx.AsyncClient在用,普通requests.get()会阻塞整个协程 - Go 的
select可以安全等多个chan,Python 的asyncio.wait()或asyncio.as_completed()语义接近,但没内置超时 channel 机制
Go 和 Python 的差异不在语法糖多寡,而在运行时契约是否暴露——Go 把内存、调度、错误传播全摊开给你管;Python 把它们裹进解释器和标准库,换来的便利背后是隐式行为和边界模糊。写 Go 时少想“怎么简写”,多想“谁在管理这块内存”;写 Python 时少信“自动”,多查文档确认那个函数到底是不是异步的。


















