在当今快速发展的软件开发领域,Go 语言(又称 Golang)已经成为了开发高性能应用程序的热门选择。go mod 示例
现在,我们将通过以下命令为“hellomod”示例程序创建一个 go.mod文件:
go mod init github.com/lizhengi/hellomodgo: creating new go.mod: module github.com/lizhengi/hellomodgo: to addmodule requirements and sums: go mod tidy
$./main{"level":"info","ts":1716950836.531074,"caller":"hellomod/main.go:15","msg":"hello, go module","uri":"/foo/bar"}
编译和运行 Go 程序的基础
在上一篇我们实现 HelloWorld 程序的过程中,我们在运行 “helloworld” 程序之前,是输入了一个 go build命令的:
$gobuild main.go
对此,如果有使用 C/C++ 和 gcc 或 clang 的开发经验的同学家就会发现 Go 的编译步骤与它们非常类似。
接下来,让我们尝试使用编译"hello, world"时的方法来编译“hellomod”项目中的 main.go源文件,看看 Go 编译器会给出什么样的输出结果:
$gobuild main.gomain.go:4:3: no required module provides package github.com/valyala/fasthttp: go.mod filenot found incurrent directory or any parent directory;see 'go help modules'main.go:5:3: no required module provides package go.uber.org/zap: go.mod filenot found incurrent directory or any parent directory;see 'go help modules'
packagemainimport("github.com/valyala/fasthttp""go.uber.org/zap")varlogger *zap.Loggerfuncinit(){logger,_=zap.NewProduction()}funcfastHTTPHandler(ctx *fasthttp.RequestCtx){logger.Info("hello, go module",zap.ByteString("uri",ctx.RequestURI()))}funcmain(){fasthttp.ListenAndServe(":8081",fastHTTPHandler)}
现在,我们将启动一个名为"hellomod"的新项目,在这个项目中,我们会使用两个第三方库:zap和 fasthttp。.py或 .js文件,他们就需要在自己的环境中安装相应的 Ruby、我们将开始于基本的编译命令,探索如何手动处理依赖,然后过渡到使用 Go Modules 管理依赖,这在现代 Go 项目开发中已成为标准实践。Go Modules 机制
2.1、但目前,我们不需要深入了解每行代码的具体作用。编译和运行 Go 程序的基础
2、
在 Linux 系统、这将使 go build的构建过程更具挑战性。
文章目录
1、
从 Go 1.11开始,Go允许在 $GOPATH/src外的任何目录下使用 go.mod创建项目。当向该服务发起请求时,它会在终端的标准输出上打印一段访问日志。都是在编译成功后,生成一个二进制可执行文件。go.mod文件所在的目录被视为声明的 module 的根目录。从 Go 1.13开始,go.mod模式将成为默认模式。Module 本质上引入了命名空间的概念,这意味着 module 下每个包的导入路径都由 module path 和包所在的子目录名共同构成。
此时,我们执行一下构建,Go 编译器输出结果是这样的
$gobuild main.gomain.go:4:2: no required module provides package github.com/valyala/fasthttp;to addit: go get github.com/valyala/fasthttpmain.go:5:2: no required module provides package go.uber.org/zap;to addit: go get go.uber.org/zap
你会看到,Go 编译器提示源码依赖 fasthttp 和 zap 两个第三方包,但是 go.mod 中没有这两个包的版本信息,我们需要按提示手工添加信息到 go.mod 中。macOS 系统或 Windows 系统的 PowerShell 中,可以通过执行以下 ls 命令来查看这个新生成的可执行文件:
$lsmain* main.go
可以看到,在上面显示的文件里面有我们刚刚创建的、以 .go为后缀的源代码文件,还有刚生成的可执行文件(Windows 系统下为 main.exe,其余系统下为 main)。随着项目接近真实的生产条件,它的规模会增大、通过详细的示例和步骤,我们将演示从简单的 “Hello World” 程序到使用第三方库的更复杂项目的开发过程。由 Google 开发并在 2009 年公开发布,Go 语言因其简洁的语法、go mod
2.3、此外,go.mod文件的最后一行是 Go 版本指示符,表示该 module 是基于特定 Go 版版本的 module 语义编写的。
2、
然而,在我们的生产环境中,编译 Go 程序通常不像之前提到的基于单个 Go 源文件构建像"hello, world"这样的简单示例那么直接。