GO程序的结构

一个标准的GO程序包含以下核心组成部分:

1. 包声明(Package Declaration)
package main  // 可执行程序必须声明为main包
  • 每个GO源文件必须包含包声明
  • main包表示可执行程序入口
  • 库文件使用自定义包名(如 package utils
2. 导入声明(Import Declaration)
import (
    \      // 标准库导入
    /rand\n    .com/user/mylib  // 第三方库导入
)
  • 使用import关键字引入依赖包
  • 支持分组导入(推荐)
  • 未使用的导入会导致编译错误
3. 函数定义(Function Definition)
func main() {  // 程序入口函数
    fmt.Println(Hello, GO!\n
func add(a int, b int) int {  // 自定义函数
    return a   b
}
  • main()函数是程序执行入口
  • 函数签名:func 函数名(参数) 返回值
  • 支持多返回值:func swap(a, b int) (int, int)
4. 类型声明(Type Declaration)
type Point struct {  // 结构体定义
    X, Y float64
}

type Calculator interface {  // 接口定义
    Add(int) int
}
  • 使用type关键字定义新类型
  • 支持结构体、接口、函数类型等
5. 变量与常量(Variables & Constants)
const PI = 3.1415  // 常量声明

var globalVar int  // 包级变量

func example() {
    localVar := 42  // 局部变量(短声明)
    msg := GO   \
- 常量使用`const`声明
- 变量使用`var`或短声明`:=`
- 类型可显式声明或自动推断

#### 6. 控制结构(Control Structures)
```go
if x > 0 {  // 条件语句
    fmt.Println(Positive\n
for i := 0; i < 5; i   {  // 循环语句
    fmt.Println(i)
}

switch os := runtime.GOOS; os {  // 选择语句
case win\n    fmt.Println(macOS\ndefault:
    fmt.Println(os)
}
  • 无括号的if/for/switch语法
  • for是唯一的循环关键字
  • switch支持表达式和类型匹配
完整示例程序
package main

import \ Shape interface {
    Area() float64
}

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}

func main() {
    c := Circle{Radius: 5}
    fmt.Printf(: %.2f\n
ea())
    
    if c.Area() > 50 {
        fmt.Println(Large circle\n}

关键特性

  1. 简洁性:无分号结尾,强制代码格式化(gofmt
  2. 并发模型:通过goroutinechannel实现
    go func() {  // 启动goroutine
        fmt.Println(Concurrent task()
    
  3. 错误处理:显式错误返回(非异常机制)
    result, err := someOperation()
    if err != nil {
        log.Fatal(err)
    }
    
  4. 依赖管理:使用go.mod模块文件
    module example.com/myapp
    go 1.20
    require github.com/lib/pq v1.10.7
    

典型文件结构

myapp/
├── go.mod         // 模块定义
├── main.go        // 入口文件
├── pkg/
│   └── utils/     // 内部包
│       └── math.go
└── internal/      // 私有包(仅限当前模块访问)
    └── config.go

注意:GO程序通过go build编译为静态二进制文件,无需运行时环境

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐