📌  相关文章
📜  Golang 备忘单 - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:15:23.476000             🧑  作者: Mango

Golang 备忘单 - Go 编程语言 - Go 编程语言

介绍

Go语言是由Google开发的一门静态编译型的编程语言,它被设计成用于高性能且可靠性较高的系统编程,同时也适合用于网络应用、分布式系统等场景。

本备忘单将为你提供一些常用的Golang编程语言语法和代码示例,以便快速查找和使用。

变量定义

Go语言通过关键字var定义变量。同时,我们也可以使用:=来做简写的变量定义。例如:

var name string = "zhangsan"
age := 24
集合类型

在Go语言中,有三种基本集合类型: 数组、切片和map。其中,数组和切片都是有序的,而map则是无序的。

  • 数组

数组的长度是固定的,定义时必须指定长度。定义一个长度为5的整型数组的代码如下:

var arr [5]int
  • 切片

切片是一个可变长度的数组。定义一个整型切片的代码如下:

var arr []int

切片也可以通过make函数创建:

slice := make([]int, 10)
  • Map

Map是一种无序的键值对集合。定义一个字符串到int类型的map的代码如下:

myMap := make(map[string]int)
控制流

控制流在Go语言中与其他编程语言比较类似,最常见的就是if语句和for循环。还有一些其他的语句,例如switch和select,这里我们不再赘述。

  • if语句

if语句的使用与其他编程语言中类似。例如:

a := 1
if a > 0 {
    fmt.Printf("a is positive")
} else if a == 0 {
    fmt.Printf("a is zero")
} else {
    fmt.Printf("a is negative")
}
  • for循环

Go语言中只有一种循环结构:for循环。不过,在for循环中可以使用range关键字来遍历切片、数组等集合类型。例如:

arr := [3]int{1,2,3}
for i, v := range arr {
    fmt.Printf("index: %d, value: %d\n", i, v)
}

slice := []string{"hello", "world"}
for i, v := range slice {
    fmt.Printf("index: %d, value: %s\n", i, v)
}
函数

Go语言中函数的定义格式为:

func 函数名(参数列表) 返回值列表 {
    // 函数体
}

例如定义一个将字符串反转的函数:

func reverse(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < len(runes)/2; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}
接口

Go语言中的接口设计非常简单灵活,接口中只包含方法的声明。如果一个类型实现了接口声明的所有方法,那么它就是该接口类型的实例。

定义一个简单的接口类型:

type Writer interface {
    Write(p []byte) (n int, err error)
}

如果一个类型实现了Writer中声明的Write方法,那么它就是Writer类型的实例。例如:

type MyWriter struct {}

// 实现Writer接口中的Write方法
func (w MyWriter) Write(p []byte) (int, error) {
    // TODO: 实现Write方法
}
并发

Go语言中天生支持并发编程,通过goroutine和channel两种机制支持并发编程。

  • goroutine

goroutine类似于线程,但是它的运行成本非常小,甚至在同一个可执行程序内的goroutine之间的切换成本也可以忽略不计。定义一个goroutine的方式非常简单,只需要在函数或方法前面加上关键字go即可。

func main() {
    go func() {
        fmt.Printf("Hello from another goroutine")
    }()
    fmt.Printf("Hello from main")
}
  • channel

通道是goroutine之间通讯的一种方式。通道可以用来传递数据,也可以用来同步goroutine的执行。定义一个通道的方式如下:

myChan := make(chan int)

向通道中发送数据的方式:

myChan <- 10

从通道中读取数据的方式:

x := <-myChan

使用通道同步goroutine的执行的方式,例如:

import "sync"

var wg sync.WaitGroup
wg.Add(1)
go func() {
    // TODO: do something
    wg.Done()
}()
wg.Wait()
结论

这里只是简单介绍了Golang编程语言的一些语法和实践方法。如果您希望更深入地了解Go语言的话,建议参考官方文档或相关书籍。