如何用 Go 编写你的第一个程序

前言

“Hello, World!” 程序是计算机编程中的经典且历史悠久的传统。 对于初学者来说,这是一个简单而完整的第一个程序,它是一个确保你的环境配置正确的好方法。

本教程将引导你在 Go 中创建此程序。 但是,为了使程序更有趣,你将修改传统的 “Hello, World!” 程序,以便它可以询问用户的姓名。 然后,你将在回复中使用该姓名。 完成本教程后,你将拥有一个运行起来如下所示的程序:

  1. output
  2. Please enter your name.
  3. Sammy
  4. Hello, Sammy! I'm Go!

安装前提

在开始本教程之前,你需要一个本地的 Go 开发环境。你可以按照下面其中一个教程在你的计算机上进行设置:

第一步 — 编写最基本的 “Hello, World!” 程序

为了编写 Hello, World!” 程序,请打开一个命令行文本编辑器,例如 nano,然后创建一个新文件:

  1. nano hello.go

在 nano 中打开文本文件后,输入你的程序代码:

  1. hello.go
  2. package main
  3. import "fmt"
  4. func main() {
  5. fmt.Println("Hello, World!")
  6. }

让我们分解下代码的各个部分。

package 是一个 Go 关键字,它定义了这个文件属于哪个代码包。 每个文件夹只能有一个包,并且文件夹中每个 .go 文件必须在其文件顶部声明相同的包名。 在这个例子中,代码属于 main 包。

import 是一个 Go 关键字,它告诉 Go 编译器你想在这个文件中使用哪些其他包。 在这里,你导入标准库附带的 fmt 包。 fmt 包提供了在开发时很有用的格式化和打印功能。

fmt.Println 是一个 Go 函数,位于 fmt 包中,它告诉计算机将一些文本打印到屏幕上。

fmt.Println 函数后面跟着一系列字符,例如 "Hello, World!",用引号括起来。 引号内的任何字符都称为 stringfmt.Println 函数会在程序运行时将此字符串打印到屏幕上。

CTRLX 键退出 nano。 当提示保存文件时,按 Y,然后按 ENTER 退出。

现在你可以试试你的程序了。

第二步 — 运行 Go 程序

你的 “Hello, World!” 程序写好之后,你就可以运行程序了。你可以用 go 命令然后后面跟着你刚刚创建的文件名。

  1. go run hello.go

程序执行后会显示以下输出:

  1. output
  2. Hello, World!

让我们来探索下实际发生了什么。

Go 程序在运行之前必须要先编译。当你使用文件名调用 go run 时,在本例中为 hello.gogo 命令将 编译 应用程序,然后运行生成的二进制文件。 对于用 编译型 编程语言编写的程序,编译器将获取程序的源代码并生成另一种类型的低级代码(例如机器代码)来生成可执行程序。

Go 应用程序需要一个 main 包和一个确切的 唯一 main() 函数,作为应用程序的入口点。 main 函数不接受任何参数并且不返回任何值。 相反,它告诉 Go 编译器应该将包编译为可执行包。

编译后,代码通过在 main 包中输入 main() 函数来执行。 它通过_调用_ fmt.Println 函数来执行fmt.Println("Hello, World!") 行。 Hello, World! 的字符串值被传递给函数。 在此示例中,字符串 Hello, World! 也称为 参数,因为它是传递给方法的值。

Hello, World! 两边的引号不会打印到屏幕上,因为你用它们告诉 Go 你的字符串在哪里开始和结束。

在这一步中,你已经用 Go 编程创建了一个有效的“Hello, World!” 。 在下一步中,你将探索如何使程序更具交互性。

第三步 — 提示用户输入

每次运行程序时,它都会产生相同的输出。 在此步骤中,你可以把提示用户输入他们的姓名添加到程序中。 然后,你将在输出中使用他们的名字。

不要修改现有程序,而是使用 nano 编辑器创建一个名为 greeting.go 的新程序:

  1. nano greeting.go

首先,添加这段代码,提示用户输入他们的姓名:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. fmt.Println("Please enter your name.")
  7. }

再一次,你使用 fmt.Println 函数将一些文本打印到屏幕上。

现在添加下面高亮行代码来存储用户的输入:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. fmt.Println("Please enter your name.")
  7. var name string
  8. }

var name string 行将使用 var 关键字 创建一个新变量。 你将变量命名为 “name” ,它的类型为 “string” 。

然后添加下面高亮行代码来捕捉用户的输入:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. fmt.Println("Please enter your name.")
  7. var name string
  8. fmt.Scanln(&name)
  9. }

fmt.Scanln 方法告诉计算机等待以换行符或 (\n) 字符结尾的键盘输入。 该方法会暂停程序,允许用户输入他们想要的任何文本。 当用户按下键盘上的 ENTER 键时,程序将继续。 然后捕获所有点击,包括 ENTER ,然后将其转换为字符串。

你想在程序中使用这些字符输出,因此你通过将这些字符 写入 到被称为 name 的字符串 变量 中来保存这些字符。 Go 将该字符串存储在计算机的内存中,直到程序完成运行。

最后,在程序中添加以下高亮行来打印输出:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. fmt.Println("Please enter your name.")
  7. var name string
  8. fmt.Scanln(&name)
  9. fmt.Printf("Hi, %s! I'm Go!", name)
  10. }

这一次,你使用的是 fmt.Printf,而不是再次使用 fmt.Println 方法。 fmt.Printf 函数接受一个字符串,并使用特殊的打印 占位符, (%s),将 name 的值注入到字符串中。 你这样做是因为 Go 不支持 字符串插值 ,它可以让你获取分配给变量的值并将其插入在字符串中。

CTRLX 键退出 nano。 当提示保存文件时,按 Y

现在运行程序。 系统将提示你输入你的姓名,因此请输入并按 ENTER。 输出可能不完全符合你的预期:

  1. output
  2. Please enter your name.
  3. Sammy
  4. Hi, Sammy
  5. ! I'm Go!

而不是 Hi, Sammy! I'm Go!,名字后面有一个换行符。

该程序捕获了我们 所有 的点击,包括我们按下以告诉程序继续的 ENTER 键。 在字符串中,按 ENTER 键会创建一个特殊字符,该字符会创建一个新行。 该程序的输出完全按照你的要求执行; 它正在显示你输入的文本,包括新行。 这不是你期望的输出,但你可以使用其他功能对其进行修复。

在你的编辑器里面打开 greeting.go

  1. nano greeting.go

在你的程序里定位到下面这一行:

  1. ...
  2. fmt.Scanln(&name)
  3. ...

在其后面增加下面一行:

  1. name = strings.TrimSpace(name)

上面使用了 Go 标准库 strings 包中的 TrimSpace 函数,来处理你使用 fmt.Scanln 捕获的字符串。 strings.TrimSpace 函数从字符串的开头和结尾删除任何空格字符,包括换行符。 在这种情况下,它会删除你按下 ENTER 时创建的字符串末尾的换行符。

要使用 strings 包,你需要在程序顶部导入它。

在你的程序找到下面这几行代码:

  1. import (
  2. "fmt"
  3. )

增加下面几行来导入 strings 包:

  1. import (
  2. "fmt"
  3. "strings"
  4. )

你的程序现在包含了以下代码:

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. fmt.Println("Please enter your name.")
  8. var name string
  9. fmt.Scanln(&name)
  10. name = strings.TrimSpace(name)
  11. fmt.Printf("Hi, %s! I'm Go!", name)
  12. }

CTRLX 键退出 nano。 当提示保存文件时,按 Y

再次运行程序:

  1. go run greeting.go

这一次,在你输入你的名字并按 ENTER 后,你会得到预期的输出:

  1. output
  2. Please enter your name.
  3. Sammy
  4. Hi, Sammy! I'm Go!

你现在有一个 Go 程序,它接受用户的输入并将其打印回屏幕。

总结

在本教程中,你编写了 一个 “Hello, World!” 程序,可以从用户那里获取输入、处理结果并显示输出。 既然你有一个基本程序可以使用,请尝试进一步扩展你的程序。 例如,询问用户最喜欢的颜色,让程序说它最喜欢的颜色是红色。 你甚至可以尝试使用相同的技术来创建一个简单的 Mad-Lib 程序。