你好,世界!
你的第一个 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 里的语句从上到下,一条接一条地运行。点单步,看它一行一行地走。
1package main2 3import "fmt"4 5func main() {6 fmt.Println("第一行")7 fmt.Println("第二行")8 fmt.Println("第三行")9}
第一行 第二行 第三行
Println 和 Print
fmt.Println 可以一次显示好几样:中间用逗号隔开,它会在每两样之间加一个空格,数字也行。fmt.Print 显示完不换行:
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}
fmt.Print("A") 不换行,所以 B 紧跟在 A 后面:AB,然后 Println 换行。接着 C 自己一行。一共两行。
什么是编译
Go 是编译型语言:代码先交给编译器(go build),变成电脑能直接运行的程序,然后才运行。在这里点运行,页面会帮你做完这两步,结果和 Go 1.24 一样。
编译器很严格。引入了一个包却没用,它就不肯编译:
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() 写在同一行。换到下一行,程序就编译不过:
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。
注释
注释是写给人看的,编译器会跳过。从 // 到这一行末尾是注释;/* 和 */ 之间的也是。
1package main2 3import "fmt"4 5func main() {6 // 先打个招呼7 fmt.Println("你好")8 /* 这一句先不要:9 fmt.Println("再见")10 */11}
你好
练一练
写好代码,点检查。提示随便看,实在想不出来再看答案。
第一个程序
✓让程序显示 你好,Go!,然后换行。(起始代码还编译不过:fmt 引入了还没用。)
你好,Go!
1package main2 3import "fmt"4 5func main() {6 7}
一个 Println 显示好几样
✓只用一个 fmt.Println,显示 价格 25 数量 4(数字直接写成数,不放在引号里)。
价格 25 数量 4
1package main2 3import "fmt"4 5func main() {6 fmt.Println("价格")7}
修好它:没人用的 import
✓这段程序编译不过。改好它,让它显示 准备好了。
准备好了
1package main2 3import (4 "fmt"5 "strings"6)7 8func main() {9 fmt.Println("准备好了")10}
这一课学会了
- Go 程序是
package main加一个func main(),从main开始运行。 import "fmt"引入fmt.Println和fmt.Print;Println 在各样之间加空格,最后换行。- 分号 Go 会自己加,
{留在同一行。 - 没用到的包或变量是编译错误;报错给出文件、行和第几个字符。
//和/* */是注释。