2023寒假参加字节跳动青训营时候的学习记录,报了后端基础班随便混混听几节课。
Go语言的一些特性¶
本页统计信息
-
本页约 586 个字, 62 行代码, 预计阅读时间 3 分钟。
-
本页总阅读量次
- 高性能、高并发
- 语法简单、学习曲线平缓,具有丰富的标准库和完整的工具链
- 静态链接、快速编译
- 相比于C++而言不需要这么多.so文件,而且可执行文件更小
- 在线编译部署的效果非常快
- 跨平台,具有垃圾回收机制,可以自动分配内存
Go语言中的Hello World¶
Go语言中的Hello World程序代码如下:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
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
}
切片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")
}