go的学习之路
文章平均质量分 93
星前冷
不会就学,一遍不会,那就两遍,三遍,总能得到梦中花!
展开
-
API签名鉴权设计
API鉴权的作用:识别调用方身份,控制API的访问权限,进而保护平台数据的安全。原创 2022-12-26 18:14:38 · 2988 阅读 · 1 评论 -
并发实现的异和同(Java,go)
Java中多线程之间是通过共享内存进行通信的,在go中多线程之间通信是基于消息的,go的channel是go中多线程通信的基石。对于Java来说,共享的资源主要靠锁实现。synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。映射到JVM层次:synchronized 同步语句块,使用的是 monitorenter 和 monitorexit 指令。当执行 monitorenter 指令时,线程试图获取锁也就是获取 monitor(monitor对象存在于每个Jav原创 2020-05-17 20:26:35 · 579 阅读 · 0 评论 -
go的协程池实现
Golang 线程 和 协程 的区别对于进程、线程,都是有内核进行调度,有 CPU 时间片的概念,进行抢占式调度(有多种调度算法)对于协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行协作式调度,需要协程自己主动把控制权转让出去之...原创 2020-05-10 17:48:35 · 1864 阅读 · 0 评论 -
Go的共享资源竞争避免
有并发,就有资源竞争,如果两个或者多个 goroutine 在没有相互同步的情况下,访问某个共享的资源,比如同时对该资源进行读写时,就会处于相互竞争的状态,这就是并发中的资源竞争。Go语言提供了传统的同步 goroutine 的机制,就是对共享资源加锁。atomic 和 sync 包里的一些函数就可以对共享的资源进行加锁操作。原子函数原子函数能够以很底层的加锁机制来同步访问整型变量和指针。...原创 2020-05-03 20:51:12 · 360 阅读 · 0 评论 -
goroutine之间通信的管道——channel
Goroutine 介绍goroutine 其实就是线程,但是它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,而且Go语言内部也实现了 goroutine 之间的内存共享。go 关键字可以创建 goroutine,将 go 声明放到一个需调用的函数之前,在相同地址空间调用运行这个函数,这样该函数执行时便会作为一个独立的并发线程,这种线程在Go语言中则被称为 gorout...原创 2020-05-03 20:42:09 · 403 阅读 · 0 评论 -
Go中make和new关键字的区别及实现原理
在Go语言中初始化一个结构时,其实会使用到两个完全不同的关键字,也就是 make 和 new(Java中只有new)。new 和 make 是两个内置函数,主要用来创建并分配类型的内存,不过它们两者却有着完全不同的作用。new 关键字只分配内存,当我们想要获取指向某个类型的指针时可以使用 new ;而 make 关键字的主要作用是初始化内置的数据结构,也就是 slice、map 和 channe...原创 2020-04-26 17:10:30 · 1110 阅读 · 0 评论 -
Mysql索引学习
为什么使用索引?MySQL索引使用的数据结构主要有BTree索引 和 哈希索引 。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。MySQL的BTree索引使用的是B树中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。MyISAM: B+Tree叶节点的data域存放的是...原创 2020-04-22 17:07:58 · 184 阅读 · 0 评论 -
Mysql细节学习
并发事务带来哪些问题?在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。脏读(Dirty read): 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据...原创 2020-04-22 16:09:50 · 147 阅读 · 0 评论 -
Go的nil:空值/零值
在Go语言中,布尔类型的零值(初始值)为 false,数值类型的零值为 0,字符串类型的零值为空字符串"",而指针、切片、映射、通道、函数和接口的零值则是 nil。nil 是Go语言中一个预定义好的标识符,有过其他编程语言开发经验的开发者也许会把 nil 看作其他语言中的 null(NULL),其实这并不是完全正确的,因为Go语言中的 nil 和其他语言中的 null 有很多不同点。nil 标...原创 2020-04-20 10:41:15 · 862 阅读 · 0 评论 -
go变量学习
Go语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值:整型和浮点型变量的默认值为 0 和 0.0。字符串变量的默认值为空字符串。布尔型变量默认为 bool。切片、函数、指针变量的默认为nil。初始化格式:标准格式var 变量名 类型 = 表达式;编译器推导类型的格式var 变量名 = 表达式; 将类型省略后,编译...原创 2020-04-14 16:04:03 · 131 阅读 · 0 评论 -
GoLand的第一个go程序
学习资料:https://www.runoob.com/go/go-tutorial.htmlhttp://c.biancheng.net/view/3995.html开发工具:GoLand一个Go语言项目的目录一般包含以下三个子目录:src 目录:放置项目和库的源文件。用于以包(package)的形式组织并存放 Go 源文件,这里的包与 src 下的每个子目录是一一对应。例如,若一个...原创 2020-04-13 17:34:16 · 1029 阅读 · 0 评论