随笔分类 -  Go

golang the future lang
摘要:1.用Mutex实现 package main import ( "fmt" "sync" ) var num int var mtx sync.Mutex var wg sync.WaitGroup func add() { mtx.Lock() defer mtx.Unlock() defer 阅读全文
posted @ 2021-02-28 15:43 Mr.peter 阅读(298) 评论(0) 推荐(0) 编辑
摘要:Gin框架特点:轻量级、高性能(使用httprouter)、中文文档齐全、简单易用。 Gin框架安装与使用 安装 下载并安装Gin: go get -u github.com/gin-gonic/gin 第一个Gin示例: package main import ( "github.com/gin- 阅读全文
posted @ 2021-01-05 16:08 Mr.peter 阅读(734) 评论(0) 推荐(0) 编辑
摘要:ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统) 阅读全文
posted @ 2020-12-08 18:59 Mr.peter 阅读(513) 评论(0) 推荐(0) 编辑
摘要:Slice 切片即动态数组,可以动态扩容改变数组的容量. golang 的 slice 底层结构如下所示,它是一个结构体,里面包含了指向数组的地址,并通过 len、cap 保存数组的元素数、容量: type slice struct { array unsafe.Pointer // 指向数组的指针 阅读全文
posted @ 2020-12-07 22:49 Mr.peter 阅读(2509) 评论(0) 推荐(0) 编辑
摘要:Golang的读写锁的实现 结构体 type RWMutex struct { w Mutex // held if there are pending writers writerSem uint32 // 用于writer等待读完成排队的信号量 readerSem uint32 // 用于rea 阅读全文
posted @ 2020-12-07 16:10 Mr.peter 阅读(2448) 评论(0) 推荐(0) 编辑
摘要:将 value 强制转换为已知类型 我们可以通过 ValueOf 拿到了内存中实际的值,从原理上来说,只要通过强制类型转换,就可以将他转换为我们需要的类型了 转换为基本类型 Value 类型绑定了以下几种基本类型的转换方法: func (v Value) Bool() bool func (v Va 阅读全文
posted @ 2020-12-07 12:21 Mr.peter 阅读(642) 评论(0) 推荐(0) 编辑
摘要:1、golang中反射最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal) 例如,Go语言标准库的encoding/json、encoding/xml、encoding/gob、encoding/binary等包就大量依赖于反射功能来实现。 阅读全文
posted @ 2020-12-07 11:27 Mr.peter 阅读(760) 评论(0) 推荐(0) 编辑
摘要:1.golang默认都是采用值传递,即拷贝传递 2.有些值天生就是指针,如slice、map、channel、function、pointer,即指针传递 阅读全文
posted @ 2020-12-06 17:51 Mr.peter 阅读(861) 评论(0) 推荐(0) 编辑
摘要:下载文件时暂停后可以继续接着下载,在线看视频时可以随意拖动进度条,这些都是断点续传所实现的应用。http1.1支持Range属性从而实现断点续传,客户端在暂停时记录了已经下载的文件范围,当继续下载时就向服务器发送文件剩余的范围Range,服务器则根据客户端请求的范围Range返回相应文件的部分数据, 阅读全文
posted @ 2020-12-03 17:39 Mr.peter 阅读(1251) 评论(0) 推荐(0) 编辑
摘要:1.手动终止 调用 runtime.Goexit() 来手动终止协程 goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。 2.1 使用for-range退 阅读全文
posted @ 2020-12-01 19:22 Mr.peter 阅读(8151) 评论(0) 推荐(1) 编辑
摘要:1.channel+sync 2 ⽆缓冲channel和任务发送/执⾏分离来限制(协程池) 阅读全文
posted @ 2020-12-01 15:51 Mr.peter 阅读(1368) 评论(0) 推荐(0) 编辑
摘要:channel主要用于解决go程的同步问题以及协程之间数据共享问题。 goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine奉行通过通信来共享内存,而不是共享内存来通信。 阅读全文
posted @ 2020-12-01 14:16 Mr.peter 阅读(123) 评论(0) 推荐(0) 编辑
摘要:tx对象 tx, err := db.Begin() tx.Exec(query1) tx.Exec(query2) tx.commit() 一般查询使用的是db对象的方法,事务则是使用另外一个对象。 使用db的Begin方法可以创建tx对象。tx对象也有数据库交互的Query,Exec和Prepa 阅读全文
posted @ 2020-11-27 17:05 Mr.peter 阅读(1498) 评论(0) 推荐(0) 编辑
摘要:Gin封装的最好的地方就是context和对response的处理。本篇文章主要解释context的使用方法, 以及其设计原理 将Request的处理封装到Context中优点 在阅读gin的源码时, 请求的处理是使用type HandlerFunc func(*Context)来处理的. 也就是 阅读全文
posted @ 2020-11-24 23:16 Mr.peter 阅读(18054) 评论(0) 推荐(1) 编辑
摘要:Gin的是路由算法其实就是一个Trie树(也就是前缀树)。 注册路由预处理 我们在使用gin时通过下面的代码注册路由 普通注册 router.POST("/somePost", func(context *gin.Context) { context.String(http.StatusOK, "s 阅读全文
posted @ 2020-11-24 22:30 Mr.peter 阅读(480) 评论(0) 推荐(0) 编辑
摘要:变量间的赋值(值拷贝) a:=1 b:=a fmt.Println(b,&a,&b) 方法调用 值拷贝: 1 array golang中以array作为参数的方法调用,方法接收的是整个array的值拷贝,所以方法中对array的item重新赋值不起作用。 如以下代码所示,输出为[1, 2, 3]。 阅读全文
posted @ 2020-11-20 16:47 Mr.peter 阅读(3812) 评论(0) 推荐(0) 编辑
摘要:2.slice底层数据结构与使用注意事项 3.map底层数据结构与注意事项 5.锁的底层实现 阅读全文
posted @ 2020-11-20 10:52 Mr.peter 阅读(191) 评论(0) 推荐(0) 编辑
摘要:反射机制是现代编程语言中一个比较高级的特性 在编译时不知道类型的情况下,通过反射机制可以获取对象的类型、值、方法甚至动态改变对象的成员,这就是反射机制 反射的意思是在运行时,能够动态知道给定数据对象的类型和结构,并有机会修改它! 现在一个数据对象,如何判断它是什么结构?数据interface中保存有 阅读全文
posted @ 2020-11-19 11:34 Mr.peter 阅读(1169) 评论(0) 推荐(0) 编辑
摘要:1.单例模式 package singleton import "sync" //Singleton 是单例模式类 type Singleton struct{} var singleton *Singleton var once sync.Once //GetInstance 用于获取单例模式对象 阅读全文
posted @ 2020-11-17 18:11 Mr.peter 阅读(998) 评论(0) 推荐(0) 编辑
摘要:在Gin的整个实现中,中间件可谓是Gin的精髓。一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且中间件之间相互不用感知到,每个中间件只需要处理自己需要处理的事情即可。 Gin中常用的中间件是: Logger 日志 Recovery panic 处 阅读全文
posted @ 2020-11-17 17:41 Mr.peter 阅读(2275) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示