初入Golang世界:新手入门指南

初入Golang世界:新手入门指南 最近刚毕业,第一个项目就被分配使用Go语言。我有几个问题想弄清楚。

  1. cgo 是Go语言的C语言解析器吗?
  2. Go语言有像python3-setuptools这样的安装工具吗?
  3. 它是否有像libgnutls28/libboost/passlib这样的包?

我还没有开始编码,正在尝试了解Go语言支持的基本功能。

谢谢

9 回复

我对Python不熟悉,无法提供建议,但请继续努力!

更多关于初入Golang世界:新手入门指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢。这对像我这样的初学者很有帮助。真正的挑战在我开始编码时才真正开始。

感谢您提供的信息。一旦开始编码,我将能遇到更多关于Go的挑战并学到更多东西。

我也发现了这个:https://pypi.org/project/setuptools-golang/

pip install setuptools-golang

你有什么建议?

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. 这样的工具。

  1. cgo 是 Go 语言的 C 解析器吗?

不是,它让你可以从 Go 调用 C 代码。

  1. Go 有类似 python3-setuptools 的安装工具吗?

不需要。go build 会下载所有你需要的依赖。

  1. 它有像 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 这样的包吗?

关于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:替代libgnutls28
  • golang.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文件自动管理版本。

回到顶部