跳转至

2023寒假参加字节跳动青训营时候的学习记录,报了后端基础班随便混混听几节课。

Go语言的一些特性

本页统计信息
  • 本页约 586 个字, 62 行代码, 预计阅读时间 3 分钟。

  • 本页总阅读量

  • 高性能、高并发
  • 语法简单、学习曲线平缓,具有丰富的标准库和完整的工具链
  • 静态链接、快速编译
    • 相比于C++而言不需要这么多.so文件,而且可执行文件更小
    • 在线编译部署的效果非常快
  • 跨平台,具有垃圾回收机制,可以自动分配内存

Go语言中的Hello World

Go语言中的Hello World程序代码如下:

package main
import "fmt"

func main() {
    fmt.Println("Hello World!")
}
这里面的package main代表了程序属于main包,然后导入了fmt包用于格式化的输出,在main函数中调用了fmt中的Println来输出Hello World 要运行/编译这段代码,可以用go run (直接运行) / go build (编译)命令来完成

Go语言基本语法

Go语言中的变量声明方法如下:

func main() {
    // 变量的定义
    var name = value // 会自动推导name的类型
    var name type = value // 显式地声明变量的类型
    name := value // 不用var关键字和赋值符号,直接使用:=来定义
    // 常量的定义
    const s string = "constant" // 声明常量,也可以不加类型直接自动推导


    // 数组的定义
    var a [5]int // 定义数组1
    b := [5]int{1, 2, 3, 4, 5} // 定义数组2
    var c [3][4]int // 定义数组3

}
if-else结构/for循环/switch结构的内容就跳过了,跟其他语言差不太多。

切片slice

Go语言中有一种称为切片(slice)的结构,定义的方法如下:

func main() {
    s := make([]string, 3)
    s[0] = "a"
    s[1] = "b"
    s[2] = "c"
    s = append(s, "d") // 类似于Python的扩容操作
    fmt.Println(s[2:4]) // 切片操作
}

哈希表map

Go语言提供了一种哈希表数据结构,即map,它在Go语言中的定义方式如下:

func main() {
    m := make(map[string]int) // 里面是key的类型,外面是value的类型
    m["a"] = 1
    m["b"] = 2
    fmt.Println(m["c"]) // 访问元素,对于没有的输出value类型的默认值,这里输出0
    delete(m, "b") // 删除
}

遍历迭代器range

range可以用来遍历slice和map等数据结构,具体的用法大概是:

func main() {
    nums =: []int{1, 2, 3, 4}
    for i, num := range nums {
        // To do, i和num分别是下标和具体的值
    }
    m := map[string]int{"a": 1, "b": 2}
    for k, v := range m {
        // To do, k和v分别是每一个key和value
    }
}

指针

Go语言中也提供了指针,可以将变量传递到函数中进行修改,大致的用法是:

func add(n *int) {
    *n += 2
}

func main() {
    n := 5
    add(&n);
}

结构体和结构体方法

Go语言中可以用type name struct {}来定义结构体,并可以给结构体定义专门的结构体方法,结构体方法需要在函数签名之前加一个结构体参数,可以是带指针的也可以是不带指针的。

错误处理

Go语言中可以用errors库来抛出异常,一般来说是函数的第一个返回值返回结果,第二个返回值返回是否有错误,没有错误的时候,第二个返回值就是nil,不然就返回errors中的一种错误,然后调用函数的程序也需要判断返回的结果中有没有错误。 一段示例代码如下:

func findUser(users []user, name string) (v *user, err error) {
    for _, u := range users {
        if u.name == name {
            return &u, nil
        }
    }
    return nil, errors.New("not found")
}

颜色主题调整

评论区~

有用的话请给我个star或者follow我的账号!! 非常感谢!!
快来跟我聊天~