![](https://img-blog.csdnimg.cn/38060da823b44da88232a17ce7c35f63.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Go
总结知识,提高思维写作能力
smartaconf
深刻
展开
-
【Go】Go结构体内存对齐
对齐宽度是类型的一种属性,他和类型本身以及操作系统有关。比如byte和bool类型的对齐宽度是1字节,int32类型对齐宽度是4字节。对齐宽度具有上限,在32位系统上,对齐宽度最大为4字节,因此,即便是int64类型,对齐宽度也是4字节,而不是8字节;相应的,在64位系统上,对齐宽度为8字节,即使是string(本身占16字节),对齐宽度也只有8字节。对齐保证也称为值地址对齐保证.也就是在分配变量存储位置的时候,不是随便分配的,是按照最大对齐保证的整数倍来分配内存地址。原创 2022-10-29 09:49:31 · 844 阅读 · 0 评论 -
【Go】defer与panic的执行规则
【Go】defer与panic的执行规则。原创 2022-10-28 17:42:39 · 674 阅读 · 0 评论 -
【Go】数据竞态
Race(竞态):数据竞态是指多个(大于或等于2 个)goroutine在执行过程中,读写相同数据的情况,必须存在至少一方写。这些操作对外表现成一个不可分割的整体,他们要么都执行,要么都不执行,外界不会看到他们只执行到一半的状态。当一个 goroutine 获得了这个锁的拥有权后, 其它请求锁的 goroutine 就会阻塞在 Lock 方法的调用上,直到锁被释放。Blocking(阻塞):是指多个(大于或等于2 个)goroutine在执行过程中,因争夺资源而造成的一种相互等待的现象。原创 2022-10-26 10:55:02 · 317 阅读 · 0 评论 -
【Go】Go语言实现哈希表
golang 实现hash表,采用拉链法(前插法)解决冲突,面试常考。原创 2022-08-26 15:01:28 · 245 阅读 · 0 评论 -
【Go】Json 序列化
JSON原创 2022-08-24 14:44:43 · 265 阅读 · 0 评论 -
【Docker】使用Docker部署go-web项目
docker 部署go项目原创 2022-08-11 09:51:14 · 472 阅读 · 0 评论 -
momentago项目
momentago是go语言time包的部分功能的封装和扩展。原创 2022-06-10 21:42:03 · 872 阅读 · 0 评论 -
【Go】json序列化结构体
注意:结构体中如果有函数,通道、complex,不能序列化原创 2022-04-12 10:55:35 · 226 阅读 · 0 评论 -
【Go】Map和Slice初始化
Map和Slice初始化并没有分配内存时,不能直接操作func main() { var m map[string]int //m["one"] = 1 //panic: assignment to entry in nil map fmt.Printf("%p", m) //0x0 var sli []int fmt.Printf("%p", sli) //0x0}原创 2022-04-12 10:22:24 · 496 阅读 · 0 评论 -
【Go】野指针和悬空指针
野指针与悬空指针野指针悬空指针野指针野指针是指一种指向的内存位置不可知的指针,一般是由与指针变量在声明时未初始化导致。对野指针的操作会引发panicvar ptr *int //声明指针类型变量fmt.Printf("%p\n", ptr) //0x0 fmt.Println(ptr) //nil*ptr = 10 //panica := 10ptr = &a //初始化悬空指针悬空指针是指指针所指向的内存空间已经被释放了。在Go语言中,若果函数内原创 2022-04-08 17:57:26 · 665 阅读 · 0 评论 -
go语言net/http的代码流程
net/http包介绍在Golang中,net/http的组成部分有客户端 和 服务端。库中的结构和函数有的只支持客户端和服务器这两者中的一个,有的同时支持客户端和服务器。客户端 请求 服务器,服务器里面使用 net/http包,包中有多路复用器,和对应多路复用器的接口,服务器中的多个处理器处理不同的请求,最终需要落盘的数据即入库。...原创 2022-03-26 11:40:27 · 2555 阅读 · 0 评论 -
Gin框架API参数
占位符:参数:获取值到不包含/*参数:获取值到包含/func main() { // 创建路由 var r = gin.Default() r.GET("/user/:name/*action", func(c *gin.Context) { name := c.Param("name") action := c.Param("action") c.JSON(http.StatusOK, gin.H{ "name": name, "action": action,原创 2022-03-23 16:57:55 · 489 阅读 · 0 评论 -
【Go】go语言的defer执行规则
go语言的defer执行规则原创 2022-03-18 19:44:40 · 872 阅读 · 0 评论 -
【Go】go语言的string类型
go语言的string类型原创 2022-03-18 16:09:49 · 1526 阅读 · 0 评论 -
【Go】go语言的iota和const原理
go语言iota和const原理原创 2022-03-18 15:10:00 · 601 阅读 · 0 评论 -
【Go】go语言的切片
切片基础与扩容策略原创 2022-03-17 19:21:11 · 411 阅读 · 0 评论 -
go GC(垃圾回收)
目录什么是GCgo语言中的GC标记清除法三色标记法两种不变式go对上述规则的两种实现机制:插入写屏障删除写屏障混合写屏障法总结什么是GCGC堆内存上分配的数据对象,不会再使用时,不会自动释放内存,就变成垃圾,在程序的运行过程中,如果不能及时清理,会导致越来越多的内存空间被浪费,导致系统性能下降。因此需要内存回收,内存回收分为两种方式1.手动释放占用的内存空间可能会出现的问题:悬挂指针: 释放的早了,后续对数据的访问就会出错,因为对应的内存空间可能已经清空,重新分配,甚至是归还给操作系统了。内原创 2022-03-04 17:32:30 · 5272 阅读 · 0 评论 -
go----方法与函数的区别
方法:方法属于特定的类型方法 :该类型的一个功能函数//该方法 专属于 接收者func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) { 函数体}接收者:值类型的接收者Go语言会在代码运行时将接收者的值复制一份。在值类型接收者的方法中可以获取接收者的成员值,但修改操作只是针对副本,无法修改接收者变量本身。指针类型的接收者指针类型的接受者由一个结构体的指针组成,通过该指针,能修改这个结构体的任意成员变量。什么时候需要使用指针类型的接收者需要修改接收者中的值原创 2022-02-24 15:23:26 · 225 阅读 · 0 评论 -
gorm Save函数 使用注意点
Save() 函数 — 替换 或者创建根据where条件和传入结构体的主键进行查找没有查找到,就会创建记录查找到就会更新记录如果结构体对应字段没有被赋值,在更新,或者创建时 ,就会以对应字段就会以零值更新或创建记录。type User struct { Id string `json:"id"` Name string `json:"name"` Age string `json:"age"`}dao.DB.AutoMigrate(&User{})var user Use原创 2022-02-18 09:55:32 · 14240 阅读 · 0 评论 -
gorm创建记录
使用切片批量创建元组回填主键值支持分批创建通过Map创建根据 map 创建记录时,association 不会被调用,且主键也不会自动填充db.Model(&User{}).Create(map[string]interface{}{ "Name":"AAA", "Age":18,})db.Model(&User{}).Create([]map[string]interface{}{ {"Name": "AAA", "Age":18}, {"Name": "BB原创 2022-02-10 19:47:44 · 426 阅读 · 0 评论 -
Go语言中的并发编程
Go语言中的并发编程并发goroutine实现,类似线程,++属于用户态的线程++,可以并发工作goroutine是由Go语言的运行时(runtime)调度完成线程是由操作系统调度完成。Go语言还提供channel在多个goroutine间进行通信goroutine和channel是 Go 语言秉承的 CSP(Communicating Sequential Process)并发模式的重要实现基础。原创 2022-01-22 17:27:22 · 500 阅读 · 0 评论 -
golang接口注意点
接口只有方法声明,没有实现,没有数据字段接口可以匿名嵌入其他接口,或嵌入到结构中只有当有两个或两个以上的具体类型必须以相同的方式进行处理时才需要定义接口// Sayer 接口type Sayer interface { say()}// Mover 接口type Mover interface { move()}// 接口嵌套type animal interface { Sayer Mover}type cat struct { name原创 2022-01-22 17:17:52 · 184 阅读 · 0 评论 -
go语言结构体基础认识
一个结构体Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性定义结构体结构体本身就是一种类型,就如同基本数据类型一样,可以声明实例。type Person struct { name string sex string age int}匿名字段结构体:只提供类型而不写字段名type Student struct { Person id int addr string}type Student struct {原创 2022-01-22 16:33:52 · 256 阅读 · 0 评论