“Hello, World!”程序设计是计算机编程中一个经典的、历史悠久的传统。对于初学者来说,这是一个简单而完整的第一个程序,是确保正确配置环境的好方法。
本教程将引导您在Go中创建此程序。不过,为了让这个程序更有趣,你需要修改传统的“Hello, World!”程序,这样它就会要求用户输入他们的名字。然后在问候语中使用这个名字。当你完成本教程后,运行程序时,你将会有一个看起来像这样的程序:
OutputPlease enter your name.
Sammy
Hello, Sammy! I'm Go!
在开始本教程之前,您需要在计算机上设置一个本地Go开发环境。
编写“Hello, World!”程序,打开一个命令行文本编辑器,比如nano
,并创建一个新文件:
nano hello.go
一旦文本文件在终端窗口中打开,你就可以键入这个程序:
hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
让我们分解代码的不同组成部分。
package
是一个Go的关键字,它定义了这个文件属于哪个代码包。每个文件夹只能有一个包,每个.go
文件必须在其文件顶部声明相同的包名。在这个例子中,代码属于main
包。
import
是一个Go的关键字,它告诉Go编译器你想在这个文件中使用其他哪些包。在这里,您导入标准库附带的fmt
包。fmt
包提供的格式化和打印函数在开发时很有用。
fmt.Println
是一个可以在fmt
包中找到的Go 函数,它告诉计算机在屏幕上打印一些文本。
在fmt.Println
函数后面跟着一系列字符,比如“Hello, World!”
,用引号括起来。任何放在引号内的字符都被称为字符串。程序运行时,fmt.Println
函数将把这个字符串打印到屏幕上。
通过输入CTRL + X
保存并退出nano
,当提示保存文件时,按Y
。
现在可以试试这个程序了。
用你的“Hello, World!”程序写好后,就可以运行程序了。你将使用go
命令,后跟刚刚创建的文件的名称。
go run hello.go
OutputHello, World!
让我们来看看到底发生了什么。
Go程序在运行之前需要编译。当你以文件名调用go run
时,在本例中是hello.go
, go
命令将编译应用程序,然后运行生成的二进制文件。对于用编译编程语言编写的程序,编译器将获取程序的源代码并生成另一种类型的底层代码(例如机器代码)来生成可执行程序。
Go应用程序需要一个main
包和一个 main()
函数作为应用程序的入口。main
函数没有参数也没有返回值。相反,它告诉Go编译器应该将包编译为可执行包。
编译后,代码通过输入main
包中的main()
函数来执行。它通过调用 fmt. println ("Hello, World!")
来执行fmt.Println("Hello, World!")
。Println的函数。字符串’ Hello, World!然后**传递**给函数。在这个例子中,字符串' Hello, World!
也被称为参数,因为它是一个传递给方法的值。
Hello, World!
两边的引号’不会打印到屏幕上,因为你用它们告诉Go字符串在哪里开始和结束。
在这一步中,你创建了一个可以正常工作的“Hello, World!”用Go编程。在下一步中,你将探索如何使程序更具交互性。
每次运行程序,它都会产生相同的输出。在这一步中,你可以在程序中添加代码,提示用户输入他们的名字。然后在输出中使用它们的名称。
与其修改你现有的程序,不如用nano
编辑器创建一个名为greeting.go
的新程序:
nano greeting.go
首先,添加下面的代码,提示用户输入他们的名字:
greeting.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
}
再一次使用fmt.Println
函数在屏幕上打印一些文本。
现在添加高亮的代码行来存储用户的输入:
greeting.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Please enter your name.")
var name string
}
var name string
这行代码将使用var
关键字创建一个新变量。你将变量命名为name
,它的类型将是string
。
然后,添加突出显示的行来捕获用户的输入:
greeting.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将该字符串存储在计算机内存中,直到程序完成运行。
最后,在程序中添加下面这行突出显示的代码,打印输出:
greeting.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
函数接受一个字符串,并使用特殊的打印操作(%s
),它将name
的值注入到字符串中。你这样做是因为Go不支持字符串插值,它允许你将赋值给变量的值放入字符串中。
按CTRL + X
保存并退出nano
,当提示时按Y
保存文件。
现在运行程序。你将被提示输入你的名字,所以输入它并按ENTER
。输出可能与你所期望的不完全一样:
OutputPlease enter your name.
Sammy
Hi, Sammy
! I'm Go!
在名字后面有一个换行符,而不是Hi, Sammy! I'm Go!
。
该程序捕获了我们所有的击键,包括我们用来告诉程序继续的ENTER
键。在字符串中,按下’ ENTER '键会创建一个特殊字符,它会创建一行新行。程序的输出完全按照你说的去做;它会显示你输入的文本,包括新添加的那一行。这不是你期望的输出,但你可以用额外的函数来修复它。
在编辑器中打开greeting.go
文件:
nano greeting.go
在程序中找到这行代码:
greeting.go
...
fmt.Scanln(&name)
...
在它之后添加以下行:
greeting.go
name = strings.TrimSpace(name)
这将使用Go标准库strings
包中的TrimSpace
函数来处理你用fmt.Scanln
捕获的字符串。strings.TrimSpace
函数删除字符串开头和结尾的所有空格字符,包括新行。在这个例子中,它删除了按下ENTER
时创建的字符串末尾的换行符。
要使用strings
包,你需要在程序的开头导入它。
在你的程序中找到这些行:
greeting.go
import (
"fmt"
)
添加下面这行代码来导入strings
包:
greeting.go
import (
"fmt"
"strings"
)
你的程序现在将包含以下内容:
greeting.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程序。