Go语言初见 | 青训营笔记

92 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

一、课前准备

二、知识点介绍

1. go语言优势

  • 高性能、高并发
  • 标准库丰富、工具链完善
  • 静态链接、快速编译
  • 垃圾回收
  • 跨平台

2. 基础语法

  • if/else语句、switch语句、for循环表达式

    • go在完成case块后默认停止switch语句
  • 数组

  • 切片slice

    • 使用append,要将结果赋值为原数组
    • 切片只有三个元素:指向基础数组中首个可访问元素的指针、长度、容量
    • 切片是基础数组的一个子集
  • map、使用range循环遍历map

    • map无序
    • 使用前先使用make声明
    • 使用delete操作键值对
  • 函数的创建与使用

  • 结构体、结构体方法

  • 指针

    • 作用有限,主要用途是对传入参数进行修
  • 函数的声明与调用

    • 原生支持返回多个值
  • 错误处理

    • 始终检查是否存在错误,即使预期不存在。 然后正确处理它们,以免向最终用户公开不必要的信息。
    • 在错误消息中包含一个前缀,以便了解错误的来源。 例如,可以包含包和函数的名称。
    • 创建尽可能多的可重用错误变量。
    • 了解使用返回错误和 panic 之间的差异。 不能执行其他操作时再使用 panic。 例如,如果某个依赖项未准备就绪,则程序运行无意义(除非你想要运行默认行为)。
    • 在记录错误时记录尽可能多的详细信息(我们将在下一部分介绍记录方法),并打印出最终用户能够理解的错误。
  • 字符串操作、字符串格式化

    • bytes、strings、strconv、unicode包提供大量字符串处理功能

    • %v 只输出所有的值

      %+v 先输出字段类型,再输出该字段的值

      %#v 先输出结构体名字值,再输出结构体(字段类型+字段的值)

  • JSON处理

  • 时间处理

  • 数字解析

  • 进程信息

三、实践练习

  • 使用fmt.Scan优化猜谜游戏,省略 bufio.NewReader(os.Stdin) 和 strings.Trim(input, "\r\n") 这些处理
package main

import (
   "fmt"
   "math/rand"
   "time"
)

func main() {
   maxNum := 100
   rand.Seed(time.Now().UnixNano())
   secretNumber := rand.Intn(maxNum)

   fmt.Println("Please input your guess")
   var guess int
   for {
      if _, err := fmt.Scan(&guess); err != nil {
         fmt.Println("Invalid input. Please enter an integer value")
         continue
      }
      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
      }
   }
}

四、个人总结

本节课初步了解go语言的语法,使用go语言进行练习。

五、引用参考

Go语言圣经(中文版)

开始使用 Go - Training | Microsoft Learn