04 How to Write Your First Program in Go Digital Ocean

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

前言 #

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

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

output
Please enter your name.
Sammy
Hello, Sammy! I'm Go!

安装前提 #

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

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

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

nano hello.go

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

hello.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!",用引号括起来。 引号内的任何字符都称为 string。 fmt.Println 函数会在程序运行时将此字符串打印到屏幕上。

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

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

第二步 — 运行 Go 程序 #

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

go run hello.go

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

output
Hello, World!

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

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

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 的新程序:

nano greeting.go

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

package main

import (
	"fmt"
)

func main() {
  fmt.Println("Please enter your name.")
}

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

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

package main

import (
"fmt"
)

func main() {
  fmt.Println("Please enter your name.")
  var name string
}

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

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

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 将该字符串存储在计算机的内存中,直到程序完成运行。

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

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

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

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

output
Please enter your name.
Sammy
Hi, Sammy
! I'm Go!

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

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

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

nano greeting.go

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

...
fmt.Scanln(&name)
...

在其后面增加下面一行:

name = strings.TrimSpace(name)

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

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

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

import (
	"fmt"
)

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

import (
"fmt"
"strings"
)

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

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)
}

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

再次运行程序:

go run greeting.go

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

output
Please enter your name.
Sammy
Hi, Sammy! I'm Go!

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

总结 #

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