1.3 第一个Go程序

1.3 第一个Go程序

在本节中,我们将编写并运行第一个Go程序,了解Go程序的基本结构。

Hello World

按照编程传统,我们从"Hello World"程序开始。

创建项目

  1. 创建项目目录:

mkdir hello-world
cd hello-world
  1. 初始化Go模块:

go mod init hello-world
  1. 创建主文件 main.go

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

运行程序

有两种方式运行Go程序:

方式一:直接运行

go run main.go

输出:

Hello, World!

方式二:编译后运行

# 编译
go build

# Windows
hello-world.exe

# Linux/macOS
./hello-world

程序结构解析

让我们逐行分析这个程序:

1. package声明

package main
  • 每个Go文件都必须以package声明开始

  • package main表示这是一个可执行程序

  • 可执行程序必须有一个main

  • 库文件使用其他包名

2. import导入

import "fmt"
  • import用于导入其他包

  • fmt是Go标准库中的格式化I/O包

  • 导入的包必须被使用,否则编译报错

多个导入可以使用括号:

import (
    "fmt"
    "time"
    "math"
)

3. main函数

func main() {
    fmt.Println("Hello, World!")
}
  • func关键字用于定义函数

  • main函数是程序的入口点

  • 每个可执行程序必须有且只有一个main函数

  • main函数不接受参数,也不返回值

4. 函数调用

fmt.Println("Hello, World!")
  • fmt.Println是fmt包中的函数

  • 用于打印文本并换行

  • 字符串使用双引号

Go程序的基本规则

1. 文件命名

  • Go源文件以.go为扩展名

  • 文件名使用小写字母和下划线

  • 例如:main.gouser_service.go

2. 包命名

  • 包名使用小写字母

  • 包名应该简短且有意义

  • 包名通常与目录名一致

3. 代码格式

Go有严格的代码格式规范:

// 正确:左花括号在同一行
func main() {
    fmt.Println("Hello")
}

// 错误:左花括号在下一行(编译错误)
func main()
{
    fmt.Println("Hello")
}

使用go fmt自动格式化代码:

go fmt main.go

4. 注释

// 单行注释

/*
多行注释
可以跨越多行
*/

// 文档注释(用于生成文档)
// Package main 是程序的入口包
package main

// main 是程序的入口函数
func main() {
    fmt.Println("Hello")
}

更多示例

示例1:打印多行

package main

import "fmt"

func main() {
    fmt.Println("欢迎学习Go语言!")
    fmt.Println("Go是一门现代化的编程语言")
    fmt.Println("让我们开始吧!")
}

示例2:使用变量

package main

import "fmt"

func main() {
    message := "Hello, Go!"
    fmt.Println(message)
}

示例3:格式化输出

package main

import "fmt"

func main() {
    name := "张三"
    age := 25
    fmt.Printf("我叫%s,今年%d岁\n", name, age)
}

示例4:获取用户输入

package main

import "fmt"

func main() {
    var name string
    fmt.Print("请输入你的名字:")
    fmt.Scanln(&name)
    fmt.Printf("你好,%s!\n", name)
}

编译选项

指定输出文件名

go build -o myapp main.go

交叉编译

编译Windows可执行文件(在Linux/macOS上):

GOOS=windows GOARCH=amd64 go build -o app.exe main.go

编译Linux可执行文件(在Windows上):

set GOOS=linux
set GOARCH=amd64
go build -o app main.go

编译macOS可执行文件:

GOOS=darwin GOARCH=amd64 go build -o app main.go

减小可执行文件大小

go build -ldflags "-s -w" main.go
  • -s: 去掉符号表

  • -w: 去掉调试信息

项目结构

随着项目增长,建议使用以下结构:

myproject/
├── go.mod              # 模块定义
├── go.sum              # 依赖校验
├── main.go             # 主程序入口
├── README.md           # 项目说明
├── cmd/                # 命令行程序
│   └── myapp/
│       └── main.go
├── internal/           # 私有代码
│   ├── config/
│   └── service/
├── pkg/                # 公共库
│   └── utils/
└── test/               # 测试文件

常见错误

1. 未使用的导入

package main

import "fmt"  // 错误:导入但未使用
import "time" // 错误:导入但未使用

func main() {
    println("Hello")
}

解决方法:删除未使用的导入或使用下划线导入:

import _ "fmt"  // 仅执行包的init函数

2. 未使用的变量

func main() {
    x := 10  // 错误:声明但未使用
    fmt.Println("Hello")
}

解决方法:删除未使用的变量或使用下划线:

_ = x  // 明确忽略

3. 花括号位置错误

// 错误
func main()
{
    fmt.Println("Hello")
}

// 正确
func main() {
    fmt.Println("Hello")
}

4. 缺少package声明

// 错误:缺少package声明
import "fmt"

func main() {
    fmt.Println("Hello")
}

调试技巧

1. 使用fmt.Println调试

func main() {
    x := 10
    fmt.Println("x的值是:", x)  // 简单调试
}

2. 使用fmt.Printf格式化输出

func main() {
    x := 10
    fmt.Printf("x = %d, 类型 = %T\n", x, x)
}

3. 使用log包

import "log"

func main() {
    log.Println("这是一条日志")
    log.Printf("变量值: %d", 42)
}

4. 使用调试器

VS Code中使用Delve调试器:

  1. 设置断点(点击行号左侧)

  2. 按F5开始调试

  3. 使用调试控制台查看变量

练习

练习1:个人信息

编写程序输出你的个人信息:

package main

import "fmt"

func main() {
    // 在这里编写代码
    // 输出:姓名、年龄、城市
}

练习2:简单计算器

编写程序计算两个数的和:

package main

import "fmt"

func main() {
    a := 10
    b := 20
    // 计算并输出a + b
}

练习3:温度转换

编写程序将摄氏度转换为华氏度:

package main

import "fmt"

func main() {
    celsius := 25.0
    // 公式:fahrenheit = celsius * 9/5 + 32
    // 计算并输出结果
}

小结

本节我们学习了:

  • 如何创建和运行第一个Go程序

  • Go程序的基本结构

  • package、import、main函数的作用

  • Go代码的基本规则和格式

  • 常见错误及解决方法

  • 基本的调试技巧

掌握这些基础知识后,我们就可以开始学习Go语言的语法细节了。下一节,我们将学习变量和常量。


上一节: 1.2 环境搭建 | 下一节: 2.1 变量与常量

返回目录 | 返回首页