掘友等级
获得徽章 0
#青训营 x 字节后端训练营# Go 语言用途
Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
#青训营 x 字节后端训练营# truct SudoG
{
G* g; // g and selgen constitute
uint32 selgen; // a weak pointer to g
SudoG* link;
int64 releasetime;
byte* elem; // data element
};
1
2
3
4
5
6
7
8
该结构体中最主要的是g和elem。elem用于存储goroutine的数据。读通道时,数据会从Hchan的队列中拷贝到SudoG的elem域。写通道时,数据则是由SudoG的elem域拷贝到Hchan的队列中。
#青训营 x 字节后端训练营# 在map表中的查找过程如下:
查找或者操作map时,首先key经过hash函数生成hash值
通过哈希值的低8位来判断当前数据属于哪个桶
找到桶之后,通过哈希值的高八位与bucket存储的高位哈希值循环比对
如果相同就比较刚才找到的底层数组的key值,如果key相同,取出value
如果高八位hash值在此bucket没有,或者有,但是key不相同,就去链表中下一个溢出bucket中查找,直到查找到链表的末尾
如果查找不到,也不会返回空值,而是返回相应类型的0值。
#青训营 x 字节后端训练营# ##### Golang中JSON处理
~~~go
package main
import {
"emcoding/json"
"fmt"
}
type unserInfo struct {
Name string
Age int `json: "age"`//在这里加json使得输出时Age大写变小写age
Hobby []string
}
func main() {
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Goalng", "Typestript"}}
buf, err := json.Marshal(a)
if err != ni; {
panic(err)
}
fmt.Println(buf) //[123 34 78 997]
//序列化之后如果不类型转换则会打印出来16进制的编码
fmt.Println(string(buf))//{"Name": "wang", "Age": 18, "Hobby":["Goalng", "Typescript"]}
}
~~~
#####
#青训营 x 字节后端训练营# ##### Golang中的结构体方法
类似于C++中结构体函数,使其变成了一个类成员函数。
~~~go
package main
import "fmt"
type user struct {
name string
password string
}
func (u user) checkPassword(u user, password string) bool{
return u.password == password
}//密码验证
func (u *user) resetPassword(password string) bool{
u.password = password
}//密码修改
func main () {
a := {"wang", "1024"}
a.resetPassword("2048") //
fmt.Println(a.checkPassword("2048")) //true
}
~~~
#青训营 x 字节后端训练营# 在别的语言中,map一般被叫做哈希或者字典,在实际开发中使用最频繁的数据结构。
我们可以利用range来循环遍历Golang中的map和数组。
Golang中的函数传入值的类型确认是后置的,同时也支持返回多个值,一个是真正的返回结果,另一个是错误信息。
#青训营 x 字节后端训练营# 简单地说,切片就是一种简化版的动态数组。因为动态数组的长度不固定,切片的长度自然也就不能是类型的组成部分了。数组虽然有适用它们的地方,但是数组的类型和操作都不够灵活,而切片则使用得相当广泛。
切片高效操作的要点是要降低内存分配的次数,尽量保证append操作(在后续的插入和删除操作中都涉及到这个函数)不会超出cap的容量,降低触发内存分配的次数和每次分配内存大小。
#青训营 x 字节后端训练营# 自动垃圾回收 更丰富的内置类型 函数多返回值 错误处理 匿名函数和闭包 类型和接口 并发编程 反射 语言交互性 Go 语言用途 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
#青训营 x 字节后端训练营# ### 2.1 第一个hello Golang文件
```go
package main //入口包
import (
"fmt" //导入标准库里的fmt包 主要控制字符串的格式化输入输出
)
func main() {
fmt.Println("hello Golang!")
}
```
###
#青训营 x 字节后端训练营# 3. 丰富的标准库:Go语言具有很多功能完善、性能优良的标准库,利用标准库就可以完成大部分计数功能的开发,关键在于这些标准库有很大的稳定性和兼容性保障,能够持续享受标准库迭代带来的性能优化,这极大的降低了学习和开发的难度。
4. 完善的工具链:Go语言拥有丰富的工具链,在编译,代码提示,代码格式化,语法检查、包管理等都有对应的工具。还内置了单元测试框架,可以对每个单元单独测试。
下一页