Kodewick
开始学 →
第 1 课,共 24 课目录

你好,世界!

第 1 课,共 24 课 · 第 1 部分 · 起步 · 约 15 分钟

你的第一个 Go 程序只做一件事:在屏幕上显示一行字。这一页的每段代码都能直接在浏览器里运行:点运行,改一改,再运行一次。

prog.go
1package main2 3import "fmt"4 5func main() {6	fmt.Println("你好,世界!")7}
输出
你好,世界!

每一部分是做什么的:

部分是什么
package main每个 Go 文件都属于一个包。能运行的程序是 main 包。
import "fmt"引入 fmt 包,显示东西的工具都在里面。
func main()程序从 main 开始运行。
{ }花括号里是 main 要做的事。
fmt.Println("...")显示引号里的文字,然后换行。

行末没有分号:Go 会自己加上。

一行一行地跑

main 里的语句从上到下,一条接一条地运行。点单步,看它一行一行地走。

prog.go
1package main2 3import "fmt"4 5func main() {6	fmt.Println("第一行")7	fmt.Println("第二行")8	fmt.Println("第三行")9}
输出
第一行
第二行
第三行

Println 和 Print

fmt.Println 可以一次显示好几样:中间用逗号隔开,它会在每两样之间加一个空格,数字也行。fmt.Print 显示完不换行:

prog.go
1package main2 3import "fmt"4 5func main() {6	fmt.Println("苹果有", 3, "个")7	fmt.Println("一共", 3+4, "个")8	fmt.Print("不换行,")9	fmt.Print("所以这句紧跟在后面\n")10}
输出
苹果有 3 个
一共 7 个
不换行,所以这句紧跟在后面

引号里的 \n 是换行,所以 Print("…\n") 和 Println 一样会结束这一行。

先猜一猜

这段程序显示几行?

1package main2 3import "fmt"4 5func main() {6	fmt.Print("A")7	fmt.Println("B")8	fmt.Println("C")9}

什么是编译

Go 是编译型语言:代码先交给编译器(go build),变成电脑能直接运行的程序,然后才运行。在这里点运行,页面会帮你做完这两步,结果和 Go 1.24 一样。

编译器很严格。引入了一个包却没用,它就不肯编译:

prog.go
1package main2 3import (4	"fmt"5	"strings"6)7 8func main() {9	fmt.Println("你好")10}
输出
# command-line-arguments
./prog.go:5:2: "strings" imported and not used

发生了什么: 导入了包 strings 却没有用到。Go 不允许多余的 import:删掉这一行。

看带文件名的那一行:./prog.go:5:2 是文件、第 5 行、第 2 个字符,后面是哪里不对。在 Go 里,没用到的包和没用到的变量都是错误,不是警告:这样程序总是干干净净的。删掉 "strings" 那一行,再运行一次。

花括号写在同一行

在 Go 里,左花括号 { 必须和 func main() 写在同一行。换到下一行,程序就编译不过:

prog.go
1package main2 3import "fmt"4 5func main()6{7	fmt.Println("你好")8}
输出
# command-line-arguments
./prog.go:6:1: syntax error: unexpected semicolon or newline before {

发生了什么: 语法错误:这一行好像没写完(少了括号、逗号,或者 { 要和 if / for / func 写在同一行)。

Go 在 func main() 后面自己加了一个分号,于是它看到的是一个没有函数体的函数。所有 Go 程序都是一样的排法;gofmt 工具还能把你的代码自动整理成这个样子,缩进用 Tab。

注释

注释是写给人看的,编译器会跳过。从 // 到这一行末尾是注释;/* 和 */ 之间的也是。

prog.go
1package main2 3import "fmt"4 5func main() {6	// 先打个招呼7	fmt.Println("你好")8	/* 这一句先不要:9	fmt.Println("再见")10	*/11}
输出
你好

练一练

写好代码,点检查。提示随便看,实在想不出来再看答案。

练习 1

第一个程序

让程序显示 你好,Go!,然后换行。(起始代码还编译不过:fmt 引入了还没用。)

要显示
你好,Go!
exercise1.go
1package main2 3import "fmt"4 5func main() {6 7}
输出
点「运行」或按 Ctrl+Enter
练习 2

一个 Println 显示好几样

只用一个 fmt.Println,显示 价格 25 数量 4(数字直接写成数,不放在引号里)。

要显示
价格 25 数量 4
exercise2.go
1package main2 3import "fmt"4 5func main() {6	fmt.Println("价格")7}
输出
点「运行」或按 Ctrl+Enter
练习 3

修好它:没人用的 import

这段程序编译不过。改好它,让它显示 准备好了。

要显示
准备好了
exercise3.go
1package main2 3import (4	"fmt"5	"strings"6)7 8func main() {9	fmt.Println("准备好了")10}
输出
点「运行」或按 Ctrl+Enter

这一课学会了

  • Go 程序是 package main 加一个 func main(),从 main 开始运行。
  • import "fmt" 引入 fmt.Println 和 fmt.Print;Println 在各样之间加空格,最后换行。
  • 分号 Go 会自己加,{ 留在同一行。
  • 没用到的包或变量是编译错误;报错给出文件、行和第几个字符。
  • // 和 /* */ 是注释。
这一课学完了吗?点一下标记。进度存在这个浏览器里,随时可以撤销。