go语言基础语法与实践 | 豆包MarsCode AI刷题

160 阅读5分钟

1. go语言介绍

Go(又称为 Golang)是由 Google 开发的一种静态类型、编译型的开源编程语言。它以其简洁、高效和并发支持而闻名,特别适合于构建网络服务和分布式系统。

2. 安装 Go 语言

  • 访问 Go 官网 下载对应操作系统的安装包。
  • 安装后设置环境变量,确保 GOPATH 和 GOROOT 被正确配置。

2. 基础语法

  • 变量声明:使用var关键字声明变量。

    go
    var a int = 10
    
  • 常量:使用const关键字声明常量。

    go
    const Pi = 3.14
    
  • 数据类型:包括基本数据类型(int, float, bool, string)和复合数据类型(数组,切片,结构体等)。

    go
    var name string = "Kimi"
    var age int = 30
    

3. 控制结构

  • if语句:不需要括号包围条件。

    go
    if age := 30; age > 18 {
        fmt.Println("Adult")
    }
    
  • switch语句:可以没有break

    go
    switch day := 2; day {
        case 1:
            fmt.Println("Monday")
        case 2:
            fmt.Println("Tuesday")
        default:
            fmt.Println("Unknown day")
    }
    
  • for循环:Go中没有while,使用for实现循环。

    go
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    

4. 函数

  • 定义函数:使用func关键字。

    go
    func add(x, y int) int {
        return x + y
    }
    
  • 多返回值:函数可以返回多个值。

    go复制
    func minMax(a, b int) (int, int) {
        if a > b {
            return b, a
        }
        return a, b
    }
    

5. 错误处理

  • 错误检查:使用error类型进行错误处理。

    go复制
    f, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    

猜数字项目实践学习笔记

首先加入输入输出字符功能,初始化参数,生成随机数字,加入用户提示,读取用户输入,去除换行符,加入错误处理,将用户输入字符串转换为整数,验证输入,给出用户反馈,设置结束标识。

package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	maxNum := 100
	rand.Seed(time.Now().UnixNano())
	secretNumber := rand.Intn(maxNum)
	// fmt.Println("The secret number is ", secretNumber)

	fmt.Println("Please input your guess")
	reader := bufio.NewReader(os.Stdin)
	for {
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("An error occured while reading input. Please try again", err)
			continue
		}
		input = strings.Trim(input, "\r\n")

		guess, err := strconv.Atoi(input)
		if err != nil {
			fmt.Println("Invalid input. Please enter an integer value")
			continue
		}
		fmt.Println("You guess is", guess)
		if guess > secretNumber {
			fmt.Println("Your guess is bigger than the secret number. Please try again")
		} else if guess < secretNumber {
			fmt.Println("Your guess is smaller than the secret number. Please try again")
		} else {
			fmt.Println("Correct, you Legend!")
			break
		}
	}
}

代码分析:

  1. package main:定义了代码的主包,这是Go程序的入口点。
  2. import:导入了Go语言的标准库,用于输入输出、随机数生成、字符串处理和时间处理。
  3. func main():程序的入口函数。
  4. maxNum := 100:定义了一个变量maxNum,用于设置随机数的最大值。
  5. rand.Seed(time.Now().UnixNano()):设置随机数生成器的种子,使用当前时间的纳秒级时间戳,以确保每次运行程序时生成的随机数不同。
  6. secretNumber := rand.Intn(maxNum):生成一个0到maxNum-1之间的随机整数,并将其赋值给secretNumber变量。这个数字是用户需要猜测的“秘密数字”。
  7. fmt.Println("Please input your guess"):提示用户输入他们的猜测。
  8. reader := bufio.NewReader(os.Stdin):创建一个新的bufio.Reader对象,用于读取用户的输入。
  9. for {:开始一个无限循环,用户将在这个循环中不断猜测数字,直到猜对为止。
  10. input, err := reader.ReadString('\n'):从标准输入读取一行文本,直到遇到换行符。
  11. if err != nil { ... }:如果读取输入时发生错误,打印错误信息并继续循环。
  12. input = strings.Trim(input, "\r\n"):去除用户输入的字符串两端的换行符。
  13. guess, err := strconv.Atoi(input):尝试将用户输入的字符串转换为整数。
  14. if err != nil { ... }:如果转换失败(例如,用户输入的不是数字),打印错误信息并继续循环。
  15. fmt.Println("You guess is", guess):打印用户的猜测。
  16. if guess > secretNumber { ... } else if guess < secretNumber { ... } else { ... }:比较用户的猜测和秘密数字,给出相应的提示,并在猜对时退出循环。
  17. break:如果用户的猜测正确,退出循环

Go 语言(Golang)是一种静态类型、编译型、并发支持的语言,由 Google 开发。以下是一些关于 Go 语言的关键特性和最佳实践:

关键特性

  1. 简洁的语法:Go 语言的设计哲学是简洁至上,语法简单,易于学习。
  2. 静态类型:Go 是静态类型语言,变量的类型在编译时确定。
  3. 编译型语言:Go 语言编写的程序会被编译成机器码,直接在操作系统上运行,不需要解释器。
  4. 并发支持:Go 语言内置了对并发的原生支持,通过 goroutines 和 channels 实现。
  5. 内存管理:Go 语言有垃圾回收机制,自动管理内存。
  6. 跨平台:可以在不同的操作系统和架构上编译和运行 Go 程序。
  7. 标准库:Go 拥有丰富的标准库,覆盖了网络编程、文件处理、加密算法等多个领域。

最佳实践

  1. 代码格式化:使用 go fmt 命令格式化代码,保持代码风格的一致性。
  2. 依赖管理:使用 go mod 管理项目依赖,确保项目的可移植性和版本控制。
  3. 单元测试:编写单元测试,使用 go test 命令运行测试,确保代码的健壮性。
  4. 代码审查:进行代码审查,提高代码质量和团队协作效率。
  5. 错误处理:合理使用多返回值的错误处理机制,避免使用 panic 和 recover 除非必要。
  6. 接口设计:使用接口定义行为,而不是具体的实现,提高代码的灵活性和可扩展性。
  7. 并发编程:合理使用 goroutines 和 channels,避免共享状态和竞态条件。
  8. 避免全局变量:尽量减少全局变量的使用,以减少依赖和提高代码的模块化。
  9. 接口和类型断言:谨慎使用接口和类型断言,避免在代码中硬编码类型信息。
  10. 日志记录:使用标准库 log 或第三方库进行日志记录,便于调试和监控。
  11. 避免不必要的复杂性:遵循 KISS 原则(Keep It Simple, Stupid),避免不必要的设计和实现复杂性。
  12. 性能优化:使用 pprof 等工具进行性能分析和优化。
  13. 代码重构:定期重构代码,提高代码质量和可维护性。

Go 语言以其简洁、高效和强大的并发支持而受到开发者的喜爱,适用于构建高性能的网络服务和分布式系统。掌握 Go 语言的最佳实践,可以帮助开发者写出更高效、更可靠的代码。