初入Golang世界:新手入门指南
初入Golang世界:新手入门指南 最近刚毕业,第一个项目就被分配使用Go语言。我有几个问题想弄清楚。
- cgo 是Go语言的C语言解析器吗?
- Go语言有像
python3-setuptools这样的安装工具吗? - 它是否有像
libgnutls28/libboost/passlib这样的包?
我还没有开始编码,正在尝试了解Go语言支持的基本功能。
谢谢
我对Python不熟悉,无法提供建议,但请继续努力!
更多关于初入Golang世界:新手入门指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢。这对像我这样的初学者很有帮助。真正的挑战在我开始编码时才真正开始。
感谢您提供的信息。一旦开始编码,我将能遇到更多关于Go的挑战并学到更多东西。
amelia:
Go 是否有类似 python3-setuptools 这样的工具?
如果我对 python3-setuptools 的理解正确的话,它主要是关于嵌入静态文件并在代码中访问这些文件。 所以,你可以搜索“golang embed static files”。
Go 团队也有计划将文件嵌入功能原生集成到语言中,但目前你可以使用类似 GitHub - gobuffalo/packr: The simple and easy way to embed static files into Go binaries. 这样的工具。
- cgo 是 Go 语言的 C 解析器吗?
不是,它让你可以从 Go 调用 C 代码。
- Go 有类似 python3-setuptools 的安装工具吗?
不需要。go build 会下载所有你需要的依赖。
- 它有像 libgnutls28/libboost/passlib 这样的包吗?
libgnutls28 → crypto/tls libboost - 没有,因为我们还没有泛型 passlib - 使用 The Go Programming Language
请务必谨慎对待附加组件和额外工具。Go 拥有一个全面的标准库,使得人们几乎可以构建任何类型的应用程序,而无需诉诸于附加组件、第三方代码或框架。
在安装看似能帮助你的东西之前,请先深入研究标准库,看看是否能解决问题,然后在 Go 生态系统中慢慢向外寻找能提供帮助的、符合 Go 风格的工具。仅仅因为某个库看起来像 Python、Java 或 C 就把它塞进去,就失去了使用 Go 的意义。
虽然这只是个人观点,但我经常发现,一些热心的开发者不是使用 Go 来解决问题,而是构建一个看起来像他们熟悉的另一种语言的解决方案,以此来规避 Go,而不是顺应 Go 语言的设计理念。语言的开发也是如此,我们现在有了 “泛型” 阵营,试图让 Go 看起来像 Java 和 C++ 等(愿上帝保佑我们)。
amelia: cgo 是 Go 语言的 C 解析器吗?
它可能包含一个 C 解析器,但它不仅仅是一个 C 解析器。更重要的是,它是 Go 编译器内部用于处理从 Go 调用 C 代码以及从 C 调用 Go 代码的基础设施。Go 编译器知道 C 这个伪包,并包装对 C 函数的调用,使得在源代码中看起来几乎是无缝衔接的,尽管背后有很多“魔法”在运作才实现了这一点。
amelia: Go 是否有像 python3-setuptools 这样的 setuptools 工具?
我不太清楚这是什么,所以不确定。
amelia: Go 有像 libgnutls28/libboost/passlib 这样的包吗?
- libgnutls28 似乎是一个 TLS 库。我不确定这个包有什么特别的功能,但 Go 确实有自己的
net包,可以处理 TLS。 - libboost 似乎是 C++ 的 Boost 库。我不确定你需要它做什么,但如果你在某个 Go 包中找不到相同的功能,你可以使用 cgo 来封装你需要的功能。
- passlib 似乎是用于密码哈希的。看起来有一些库,比如 pbkdf2 package - golang.org/x/crypto/pbkdf2 - Go Packages 和/或 bcrypt package - golang.org/x/crypto/bcrypt - Go Packages。
关于Go语言新手问题的解答
1. cgo的作用
cgo是Go语言调用C代码的工具,不是C语言解析器。它允许在Go程序中直接使用C语言库和函数。
示例:
// #include <stdio.h>
// #include <stdlib.h>
import "C"
import "unsafe"
func main() {
msg := C.CString("Hello from C")
defer C.free(unsafe.Pointer(msg))
C.puts(msg)
}
2. Go的包管理工具
Go使用内置的go命令管理依赖,主要工具包括:
go mod init:初始化模块go get:获取依赖包go install:安装可执行文件
示例创建项目:
go mod init myproject
go get github.com/gin-gonic/gin@v1.9.0
3. Go的标准库和第三方包
Go有丰富的标准库和第三方包:
加密/安全:
crypto/tls:替代libgnutls28golang.org/x/crypto/bcrypt:替代passlib
通用功能:
- 标准库包含网络、编码、并发等模块
- 第三方包可通过
go get获取
示例使用TLS:
import (
"crypto/tls"
"net/http"
)
func main() {
config := &tls.Config{
MinVersion: tls.VersionTLS12,
}
server := &http.Server{
TLSConfig: config,
}
// 使用server...
}
Go的包管理直接在代码中导入,通过go.mod文件自动管理版本。

