如何用Go编写你的第一个程序
介绍
“你好,世界!” 程序是计算机编程中的经典且历史悠久的传统。 对于初学者来说,这是一个简单而完整的第一个程序,它是确保您的环境配置正确的好方法。
本教程将引导您在 Go 中创建此程序。 但是,为了使程序更有趣,您将修改传统的“Hello, World!” 程序,以便它询问用户他们的姓名。 然后,您将在问候语中使用该名称。 完成本教程后,您将拥有一个运行时如下所示的程序:
OutputPlease enter your name. Sammy Hello, Sammy! I'm Go!
先决条件
在开始本教程之前,您需要在计算机上设置 本地 Go 开发环境 。 您可以按照以下教程之一进行设置:
第 1 步——编写基本的“Hello, World!” 程序
写下“你好,世界!” 程序,打开命令行文本编辑器,例如 nano
并创建一个新文件:
nano hello.go
在终端窗口中打开文本文件后,您将输入您的程序:
你好.go
package main import "fmt" func main() { fmt.Println("Hello, World!") }
让我们分解代码的不同组件。
package
是一个 Go 关键字,它定义了这个文件属于哪个代码包。 每个文件夹只能有一个包,并且每个 .go
文件必须在其文件顶部声明相同的包名。 在本例中,代码属于 main
包。
import
是一个 Go 关键字,它告诉 Go 编译器你想在这个文件中使用哪些其他包。 这里导入标准库自带的 fmt
包。 fmt
包提供了在开发时很有用的格式化和打印功能。
fmt.Println
是一个 Go 函数,位于 fmt
包中,它告诉计算机将一些文本打印到屏幕上。
在 fmt.Println
函数后面跟着一个字符序列,例如 "Hello, World!"
,用引号括起来。 引号内的任何字符都称为 字符串 。 fmt.Println
函数会在程序运行时将此字符串打印到屏幕上。
通过输入CTRL + X
保存并退出nano
,当提示保存文件时,按Y
。
现在你可以试试你的程序了。
第 2 步 — 运行 Go 程序
用你的“你好,世界!” 程序写好了,就可以运行程序了。 您将使用 go
命令,后跟刚刚创建的文件的名称。
go run hello.go
程序将执行并显示以下输出:
OutputHello, World!
让我们探索一下实际发生的事情。
Go 程序在运行之前需要编译。 当您使用文件名调用 go run
时,在本例中为 hello.go
,go
命令将 编译 应用程序,然后运行生成的二进制文件. 对于用编译编程语言编写的程序,编译器将获取程序的源代码并生成另一种类型的低级代码(例如机器代码)以生成可执行程序。
Go 应用程序需要一个 main
包和确切的 one main()
函数作为应用程序的入口点。 main
函数不接受任何参数并且不返回任何值。 相反,它告诉 Go 编译器应该将包编译为可执行包。
编译完成后,通过输入 main
包中的 main()
函数来执行代码。 它通过 调用 fmt.Println
函数来执行 fmt.Println("Hello, World!")
行。 然后 Hello, World!
的字符串值被 传递 给函数。 在此示例中,字符串 Hello, World!
也称为 参数 ,因为它是传递给方法的值。
Hello, World!
两边的引号不会打印到屏幕上,因为你用它们告诉 Go 你的字符串在哪里开始和结束。
在这一步中,您已经创建了一个有效的“Hello, World!” 用 Go 编程。 在下一步中,您将探索如何使程序更具交互性。
第三步——提示用户输入
每次运行程序时,它都会产生相同的输出。 在此步骤中,您可以添加到程序中以提示用户输入他们的姓名。 然后,您将在输出中使用他们的名称。
不要修改现有程序,而是使用 nano
编辑器创建一个名为 greeting.go
的新程序:
nano greeting.go
首先,添加这段代码,提示用户输入他们的姓名:
问候.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") }
再次,您使用 fmt.Println
函数将一些文本打印到屏幕上。
现在添加突出显示的行来存储用户的输入:
问候.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string }
var name string
行将使用 var
关键字 创建一个新变量。 您将变量命名为 name
,它将是 string
类型。
然后,添加突出显示的行以捕获用户的输入:
问候.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string fmt.Scanln(&name) }
fmt.Scanln
方法告诉计算机等待键盘输入以换行符或 (\n
) 字符结尾。 这会暂停程序,允许用户输入他们想要的任何文本。 当用户按下键盘上的 ENTER
键时,程序将继续。 然后捕获所有击键,包括 ENTER
击键,并将其转换为字符串。
您想在程序的输出中使用这些字符,因此您可以通过 写入 将这些字符保存到名为 name
的字符串 变量 中。 Go 将该字符串存储在计算机的内存中,直到程序完成运行。
最后,在程序中添加以下突出显示的行以打印输出:
问候.go
package main import ( "fmt" ) func main() { fmt.Println("Please enter your name.") var name string fmt.Scanln(&name) fmt.Printf("Hi, %s! I'm Go!", name) }
这一次,您不再使用 fmt.Println
方法,而是使用 fmt.Printf
。 fmt.Printf
函数接受一个字符串,并使用特殊打印 verbs, (%s
) 将 name
的值注入字符串。 这样做是因为 Go 不支持 字符串插值 ,这将允许您将分配给变量的值放入字符串中。
按CTRL + X
保存并退出nano
,当提示保存文件时按Y
。
现在运行程序。 系统将提示您输入您的姓名,因此请输入您的姓名并按 ENTER
。 输出可能不完全符合您的预期:
OutputPlease enter your name. Sammy Hi, Sammy ! I'm Go!
而不是 Hi, Sammy! I'm Go!
,在名称后面有一个换行符。
该程序捕获了我们击键的 all,包括我们按下以告诉程序继续的 ENTER
键。 在字符串中,按 ENTER
键会创建一个特殊字符,该字符会创建一个新行。 该程序的输出完全按照您的要求执行; 它正在显示您输入的文本,包括该新行。 这不是您期望的输出,但您可以使用附加功能对其进行修复。
在编辑器中打开 greeting.go
文件:
nano greeting.go
在你的程序中找到这一行:
问候.go
... fmt.Scanln(&name) ...
在其后添加以下行:
问候.go
name = strings.TrimSpace(name)
这使用来自 Go 的标准库 strings
包的 TrimSpace
函数,用于您使用 fmt.Scanln
捕获的字符串。 strings.TrimSpace
函数从字符串的开头和结尾删除任何空格字符,包括换行符。 在这种情况下,它会删除您按下 ENTER
时创建的字符串末尾的换行符。
要使用 strings
包,您需要在程序顶部导入它。
在您的程序中找到这些行:
问候.go
import ( "fmt" )
添加以下行以导入 strings
包:
问候.go
import ( "fmt" "strings" )
您的程序现在将包含以下内容:
问候.go
package main import ( "fmt" "strings" ) func main() { fmt.Println("Please enter your name.") var name string fmt.Scanln(&name) name = strings.TrimSpace(name) fmt.Printf("Hi, %s! I'm Go!", name) }
保存并退出nano
。 按 CTRL + X
,然后在提示保存文件时按 Y
。
再次运行程序:
go run greeting.go
这一次,在你输入你的名字并按下 ENTER
后,你会得到预期的输出:
OutputPlease enter your name. Sammy Hi, Sammy! I'm Go!
您现在有一个 Go 程序,它接受用户的输入并将其打印回屏幕。
结论
在本教程中,您编写了“Hello, World!” 从用户那里获取输入、处理结果并显示输出的程序。 既然您有一个基本程序可以使用,请尝试进一步扩展您的程序。 例如,询问用户最喜欢的颜色,并让程序说它最喜欢的颜色是红色。 您甚至可以尝试使用相同的技术来创建一个简单的 Mad-Lib 程序。