Go语言基础语法 | 青训营笔记

33 阅读4分钟

Go语言的优点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

基础语法

  1. Hello World
 fmt.Println("Hello World")
  1. 变量:在Go语言中,变量是程序中最基本的存储单元之一。每个变量都有一个类型和一个值,变量的类型用于定义其可以存储的值的范围和操作。变量的值可以随时更改,因此Go语言中的变量是可变的。 在Go语言中定义变量的语法如下:

     var x int // 定义一个整数变量
     var y float32 // 定义一个浮点型变量
     var z string // 定义一个字符串变量
     var a, b, c bool // 定义三个布尔型变量
    

    在Go语言中,还可以使用短变量声明语法来快速定义变量并初始化。

     x := 10 // 定义一个整数变量并初始化为10
     y := 3.14 // 定义一个浮点型变量并初始化为3.14
     z := "Hello, world!" // 定义一个字符串变量并初始化为"Hello, world!"
     a, b, c := true, false, true // 定义三个布尔型变量并初始化为true、false、true
    
  2. if else

     if condition {
         // 在条件成立时执行的语句块
     } else {
         // 在条件不成立时执行的语句块
     }
    
  3. 循环:Go语言提供了多种循环语句,包括forwhiledo...while等。其中,for语句是最常用的循环语句。

     for initialization; condition; post {
         // 在条件成立时执行的语句块
     }
    
  4. Go语言中的switch语句用于根据不同的条件执行不同的代码块。

     switch variable {
     case value1:
         //当variable等于value1时执行的代码块
     case value2:
         //当variable等于value2时执行的代码块
     default:
         //当variable不等于任何一个值时执行的代码块
     }
    
  5. 数组:是一种固定大小、存储相同类型元素的容器。

     var array [size]type
    
  6. 切片:是一种动态数组。

     var slice []type
    

    其中,type表示切片中存储的元素类型。与数组不同的是,切片的长度可以动态改变,而且存储空间由Go语言自动管理。 切片可以通过数组、指针或切片自行创建,并且可以使用make函数进行初始化。

  7. map:是一种无序的键值对集合。

     var mapName map[keyType]valueType
    
  8. ange 关键字用于遍历数组、切片、map以及通道中的元素。

     for index, value := range collection {
         //循环体
     }
    
  9. 函数

     func function_name(parameter_list) (result_list) {
         //函数体
     }
    
  10. 指针:一种用于存储变量内存地址的类型。指针通常用于传递函数参数、访问数组和结构体等场景。

     var ptr *type
    
  11. 结构体:一种自定义的数据类型,代表了一组相关的属性和方法。结构体可以包含多个字段,每个字段可以是不同的类型。

     type struct_name struct {
         field_name1 type1
         field_name2 type2
         ...
     }
    
  12. 结构体方法:结构体还支持方法,可以使用函数的方式进行定义。例如,为矩形增加一个计算面积的方法。

     func (r *Rectangle) area() float64 {
         return r.width * r.height
     }
     ​
     fmt.Printf("矩形1的面积为%f\n", rect1.area())
     fmt.Printf("矩形2的面积为%f\n", rect2.area())
    
  13. 错误处理:一种常见的程序设计方式。Go语言中的错误通常用错误接口类型(error interface)表示。这个接口只包含一个方法:

     type error interface {
         Error() string
     }
    

    如果函数返回一个非空的error接口,则说明函数出现了错误。在函数中通常使用errors.New()或fmt.Errorf()函数来创建一个新的error对象,例如:

     func divide(x, y float64) (float64, error) {
         if y == 0 {
             return 0, errors.New("除数不能为0")
         }
         return x / y, nil
     }
    
  14. 字符串:一种基本数据类型,通常用于表示文本内容。在Go语言中,字符串使用双引号或反引号括起来。

     str1 := "hello, world"
     str2 := `这是一段
     多行
     字符串`
    
  15. 字符串格式化:使用fmt包中的Printf()函数实现

     func Printf(format string, args ...interface{}) (n int, err error)
    

    其中,format参数是一个字符串,包含零个或多个占位符;args参数是一个不定长的interface类型切片,包含要替换占位符的值。 下面是几个常见的占位符及对应的格式化输出:

    • %v:以默认格式打印变量的值。
    • %T:打印变量的类型。
    • %t:打印布尔型变量的值。
    • %d:打印十进制整数。
    • %x:打印十六进制整数。
    • %f:打印浮点数。
    • %s:打印字符串。
    • %p:打印指针地址。
    • %%:打印百分号。
  16. JSON 处理

    Go语言内置的encoding/json包提供了解析、生成和转换JSON数据的功能。 将Go语言中的数据编码为JSON格式,可以使用encoding/json包中的Marshal()函数进行处理。

     package main
     ​
     import (
         "encoding/json"
         "fmt"
     )
     ​
     type Person struct {
         Name string `json:"name"`
         Age  int    `json:"age"`
     }
     ​
     func main() {
         p := Person{"Bob", 30}
         jsonByte, _ := json.Marshal(p)
         fmt.Println(string(jsonByte)) // 输出: {"name":"Bob","age":30}
     }
    
  17. 要获取当前时间,可以使用time.Now()函数。