Go语言基础入门指南

1. 包管理基础

Go语言通过包(package)来组织代码结构,理解包管理是Go开发的基础。

核心概念

  • 一个文件夹就是一个包
  • 同一包下的文件必须声明相同的包名
  • 包分为两种类型:
    • main包:包含main函数,是程序入口,编译生成可执行文件
    • main包:用于代码分类和组织

包的使用规范

// 文件位置:utils/helper.go
package utils

// 首字母大写表示可被其他包访问
func PublicFunc() {
    // ...
}

// 首字母小写表示私有,仅限包内使用
func privateFunc() {
    // ...
}

导入其他包

package main

import (
    "fmt"
    "project/utils"  // 导入自定义包
)

func main() {
    utils.PublicFunc()  // 调用其他包中的函数
    fmt.Println("Hello, Go!")
}

2. 基础输出

Go提供了多种输出方式:

常用输出方法

package main

import "fmt"

func main() {
    // 内置函数(不推荐生产环境使用)
    print("简单输出 ")
    println("带换行输出")
    
    // fmt包(推荐)
    fmt.Print("格式化输出 ")
    fmt.Println("带换行输出")
    
    // 格式化输出
    name := "Alex"
    age := 30
    fmt.Printf("姓名:%s 年龄:%d\n", name, age)
    
    // 常用占位符:
    // %s - 字符串
    // %d - 整数
    // %f - 浮点数
    // %.2f - 保留两位小数
    // %% - 百分号
}

3. 注释规范

良好的注释习惯对团队协作至关重要:

// 单行注释

/*
多行注释
用于说明复杂逻辑
*/

// 快捷注释:Ctrl+/ (大多数IDE支持)

4. 基本数据类型

Go是强类型语言,基础类型包括:

整型

num := 42             // 自动推断为int
var count int32 = 100 // 显式声明32位整数

// 算术运算
sum := 10 + 5
diff := 10 - 5
product := 10 * 5
quotient := 10 / 3    // 商
remainder := 10 % 3   // 余数

字符串

str1 := "Hello"
str2 := "世界"

// 字符串拼接
message := str1 + " " + str2

// 字符串不可变
// str1[0] = 'h' // 错误

布尔型

isTrue := true
isFalse := false

// 比较运算
result := 10 > 5  // true
equal := "a" == "A" // false

5. 变量与常量

变量声明

// 标准声明
var name string = "Alice"

// 类型推断
var age = 30

// 简短声明(函数内使用)
score := 100

// 多变量声明
var a, b, c int = 1, 2, 3
x, y := "x", "y"

变量命名规范

  • 只包含字母、数字、下划线
  • 不能以数字开头
  • 避免使用Go关键字
  • 推荐驼峰命名法:userName, totalCount

常量定义

const Pi = 3.14159
const MaxRetry = 3

// 常量组
const (
    StatusOK = 200
    StatusNotFound = 404
)

// iota枚举
const (
    Monday = iota + 1  // 1
    Tuesday            // 2
    Wednesday          // 3
    // ...
)

6. 用户输入

基本输入方法

package main

import "fmt"

func main() {
    var name string
    var age int
    
    // Scanln示例
    fmt.Print("请输入姓名和年龄: ")
    _, err := fmt.Scanln(&name, &age)
    if err != nil {
        fmt.Println("输入错误:", err)
        return
    }
    fmt.Printf("你好 %s, 你今年 %d 岁\n", name, age)
    
    // Scanf示例
    fmt.Print("请输入(姓名 年龄): ")
    _, err = fmt.Scanf("%s %d", &name, &age)
    if err != nil {
        fmt.Println("输入错误:", err)
        return
    }
    fmt.Printf("你好 %s, 你今年 %d 岁\n", name, age)
}

读取整行输入

import (
    "bufio"
    "os"
)

reader := bufio.NewReader(os.Stdin)
fmt.Print("请输入完整地址: ")
address, _ := reader.ReadString('\n')
fmt.Println("地址是:", address)

7. 条件语句

基本if-else

if condition {
    // 条件为真执行
} else {
    // 条件为假执行
}

多条件判断

score := 85

if score >= 90 {
    fmt.Println("A")
} else if score >= 80 {
    fmt.Println("B")
} else if score >= 60 {
    fmt.Println("C")
} else {
    fmt.Println("D")
}

嵌套条件

if user.IsAuthenticated() {
    if user.HasPermission("admin") {
        fmt.Println("欢迎管理员")
    } else {
        fmt.Println("欢迎普通用户")
    }
} else {
    fmt.Println("请先登录")
}

实战练习

1. 用户名验证

package main

import "fmt"

func main() {
    var input string
    fmt.Print("请输入用户名: ")
    fmt.Scanln(&input)
    
    if input == "麻花藤" {
        fmt.Println("真聪明")
    } else {
        fmt.Println("你是傻逼么")
    }
}

2. 计算两数之和

package main

import "fmt"

func main() {
    var a, b int
    fmt.Print("请输入两个数字(用空格分隔): ")
    fmt.Scanln(&a, &b)
    fmt.Printf("两数之和: %d\n", a+b)
}

3. 信息拼接

package main

import "fmt"

func main() {
    var name, location, action string
    
    fmt.Print("请输入姓名: ")
    fmt.Scanln(&name)
    
    fmt.Print("请输入位置: ")
    fmt.Scanln(&location)
    
    fmt.Print("请输入行为: ")
    fmt.Scanln(&action)
    
    fmt.Printf("%s在%s做%s\n", name, location, action)
}

4. 数字猜测游戏

package main

import "fmt"

func main() {
    const target = 66
    var guess int
    
    fmt.Print("请输入猜测的数字: ")
    fmt.Scanln(&guess)
    
    if guess > target {
        fmt.Println("猜大了")
    } else if guess < target {
        fmt.Println("猜小了")
    } else {
        fmt.Println("猜对了!")
    }
}

5. 成绩等级转换

package main

import "fmt"

func main() {
    var score int
    fmt.Print("请输入成绩(0-100): ")
    fmt.Scanln(&score)
    
    switch {
    case score >= 90:
        fmt.Println("A")
    case score >= 80:
        fmt.Println("B")
    case score >= 60:
        fmt.Println("C")
    case score >= 40:
        fmt.Println("D")
    default:
        fmt.Println("E")
    }
}

生产环境建议

  1. 变量命名:使用有意义的名称,避免v1、v2等无意义命名
  2. 错误处理:始终检查输入函数的错误返回值
  3. 包组织:合理划分包结构,避免将所有代码放在main包中
  4. 常量使用:魔法数字应该定义为常量
  5. 输入验证:对用户输入进行有效性检查

通过掌握这些基础概念,你已经可以开始用Go语言编写简单的应用程序了。在实际开发中,这些基础知识将作为你构建更复杂系统的基石。

posted on 2025-04-03 19:27  Leo-Yide  阅读(83)  评论(0)    收藏  举报