Go语言的基础语法总结 | 青训营

56 阅读5分钟

前言

Go语言是一门简单、高效、可靠的编程语言,由Google开发。它具备良好的并发性和高效的编译速度,语法简单、学习曲线平缓、具有丰富的标准库和完善的工具链等优点,因此成为了许多公司的选择。

本次笔记将详细记录Go语言的基础语法和常用特性,包括变量声明、控制流程、数据类型、函数定义、指针、错误处理、结构体和结构体方法、Josn处理等。通过学习,对Go语言有了一个全面的了解,并能够开始编写简单的Go程序。

一、变量声明和赋值

在Go语言中,可以使用var关键字来声明变量,并使用 = 进行赋值。示例代码如下:

`go

var num1 int

num1 = 10

var num2 = 20

num3 := 30 //简易的声明方法

var name string = "John"`

二、控制流程

Go语言中的控制流程包括条件语句和循环语句。常用的条件语句有if和switch,循环语句有for。示例代码如下:

`go

if num > 10 {

    fmt.Println("Number is greater than 10")

} else {

    fmt.Println("Number is less than or equal to 10")

}

switch color {

    case "red":

        fmt.Println("Color is red")

    case "blue":

        fmt.Println("Color is blue")

    default:

        fmt.Println("Color is not red or blue")

}

for i := 0; i < 5; i++ {

    fmt.Println(i)

} `

三、数据类型

在Go语言中,有基本数据类型(如整型、字符串、布尔型)和复合数据类型(如数组、切片、字典)等。示例代码如下:

`go

var num int = 10 //整形

var name string = "John" //数组

var isStudent bool = true //布尔型

var numbers = []int{1, 2, 3, 4, 5} //数组

s:= make([]int, 3) //切片

var person = map[string]string{"name": "John", "age": "30"} //map

for k, v := range person {

fmt.Printf("key: %d, value: %d", k, v)

} //range

}

`

四、函数定义和调用

在Go语言中,可以使用func关键字来定义函数。函数可以接受参数,并返回一个或多个值。示例代码如下:

`go

func add(a, b int) int {

    return a + b

}

result := add(5, 7) `

五、指针

在Go语言中,可以使用指针来引用和操作变量的内存地址。通过指针,我们可以间接地修改变量的值,也可以减少内存的使用。

`go

num := 42

// 获取变量的内存地址 ptr := &num

// 打印指针的值和指向的变量值 fmt.Println("指针的值:", ptr)

fmt.Println("指针指向的变量值:", *ptr)`

通过使用指针,我们可以在一些情况下提高代码的执行效率,以及实现更灵活的操作和数据共享。在使用指针时需要注意,空指针和野指针可能导致程序运行时的错误,因此在使用指针时要确保指针引用的变量是可用的。

六、错误处理

在Go语言中,错误处理是一个重要的特性。使用多返回值和错误类型,可以灵活地处理错误。示例代码如下:

`go

result, err := doSomething()

if err != nil {

    fmt.Println("Error:", err)

} else {

    fmt.Println("Result:", result)

}

`

七、结构体

在Go语言中,结构体是一种用户自定义的复合数据类型,它可以包含不同类型的字段。结构体的定义使用type关键字,然后在定义中指定字段的名称和类型。下面是一个示例代码,演示了Go语言中结构体的基本用法:

`go package main import "fmt"

//定义一个结构体 type Person struct { Name string Age int Gender string }

func main() { // 创建一个结构体实例 person := Person{ Name: "Alice", Age: 25, Gender: "Female", }

// 访问结构体字段
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
fmt.Println("Gender:", person.Gender)

// 修改结构体字段
person.Age = 30
fmt.Println("Modified Age:", person.Age)

}`

结构体的基本用法,包括定义结构体类型、创建结构体实例和访问结构体字段。结构体可以在实现用户定义的数据类型时非常有用,它可以组合多个字段来表示一个完整的数据结构。

八、结构体方法

在Go语言中,结构体方法是与特定结构体相关联的函数。通过为结构体定义方法,我们可以在结构体上执行特定的操作。结构体方法的定义需要使用func关键字,紧接着是接收者的类型和方法名。在方法的定义中,我们可以使用接收者类型的字段和其他方法。下面是一个示例代码,演示了Go语言中结构体方法的基本用法:

`go package main import "fmt"

// 定义一个结构体 type Rectangle struct { Width int Height int }

// 定义结构体方法,计算矩形的面积 func (r Rectangle) Area() int { return r.Width * r.Height }

// 定义结构体方法,计算矩形的周长 func (r Rectangle) Perimeter() int { return 2 * (r.Width + r.Height) }

func main() { // 创建一个矩形实例 rect := Rectangle{Width: 5, Height: 10}

// 调用结构体方法计算面积和周长
area := rect.Area()
perimeter := rect.Perimeter()

// 打印结果
fmt.Printf("矩形的面积为: %d\n", area)
fmt.Printf("矩形的周长为: %d\n", perimeter)

} `

在结构体方法内部,我们可以访问和操作接收者实例的字段,以及调用其他方法。结构体方法可以帮助我们在特定结构体上定义和封装操作,使得代码更加清晰和可维护。同时,结构体方法也可以带有指针接收者,以实现对结构体实例的修改。

九、JSON处理

在Go语言中,处理JSON是非常常见的操作,Go语言提供了标准库中的encoding/json包,用于处理JSON的编码和解码。该包提供了一组函数和方法,可以将Go语言中的结构体、切片、映射等数据类型和JSON之间进行相互转换。下面是一些常见的JSON处理操作:

  1. JSON编码:通过将Go语言的数据类型编码为JSON格式的数据,可以使用json.Marshaljson.MarshalIndent函数。例如:

go type Person struct { Name string json:"name" Age int json:"age"` }person := Person{Name: "Alice", Age: 30} jsonData, err := json.Marshal(person) if err != nil { fmt.Println("JSON encoding failed:", err) return }

fmt.Println(string(jsonData)) // 输出:{"name":"Alice","age":30} `

  1. JSON解码:通过将JSON格式的数据解码为Go语言的数据类型,可以使用json.Unmarshal函数。例如:

`go jsonStr := {"name":"Alice","age":30} var person Person err := json.Unmarshal([]byte(jsonStr), &person) if err != nil { fmt.Println("JSON decoding failed:", err) return }

fmt.Println(person.Name, person.Age) // 输出:Alice 30 `