随笔分类 -  Go语言学习

摘要:首先说明一下原理:前后协程之间通过通道去相互限制,后一个线程尝试去获取一个channel的值,当channel中没有值时,就会一直阻塞,而前一个协程则负责关闭channel,当前一个协程完成了这个操作,后一个协程才可以结束阻塞,继续执行。 示例代码: package main import ( "f 阅读全文
posted @ 2023-06-07 14:39 99号的格调 阅读(281) 评论(0) 推荐(0) 编辑
摘要:我们知道,对于一个已经关闭的channle来说,如果channel内部还有值的话,可以继续执行读操作,读出channel里的元素,但是不能执行写操作; 相反,如果关闭后,channel里已经没有元素可读的情况,再执行读操作的话会读出channel的零值,同样,也不能执行写操作。 首先,先让我们通过代 阅读全文
posted @ 2023-06-06 17:17 99号的格调 阅读(77) 评论(0) 推荐(0) 编辑
摘要:首先,如果对于一个已经关闭的channel来说,如果此时channel里还有值,则会正确读到channel里的值,且返回的第二个bool值为true;如果关闭前,channel里的值已经被读完,则最后返回的则是channel的零值; 那么针对该问题,我们通过代码来验证一下: package main 阅读全文
posted @ 2023-06-06 16:31 99号的格调 阅读(373) 评论(0) 推荐(0) 编辑
摘要:在go语言中,数组变量属于值类型,因此当一个数组变量被复制或者传递时,实际上会复制整个数组。eg,将a赋值给b,修改a中的元素,并不会修改b中的元素。为了避免复制数组,一般会传递指向数组的指针。 package main import "fmt" func main() { a := [...]in 阅读全文
posted @ 2023-06-05 21:37 99号的格调 阅读(26) 评论(0) 推荐(0) 编辑
摘要:很多网站都实现了“推送”功能,都会用到轮训这个技术,轮询就是每隔一段时间客户端就向服务器发送请求,来获得最新的数据。这种方式的缺点十分明显,浏览器每次发出的请求都含有比较大的header数据,浪费带宽资源。在这种背景下,HTML5定义了websocket协议,能够更好的节省服务器资源和带宽,而且可以 阅读全文
posted @ 2023-06-05 21:05 99号的格调 阅读(432) 评论(0) 推荐(1) 编辑
摘要:关于在golang中的中间件,可以翻阅笔者之前的博客,在这里不予详细说明。这里简单介绍下中间件的高级用法: 1.如果每个路由分别要配置多个中间价,该如何处理 2.如果有多个路由分别要配置多个中间件,该如何处理 3.尝试不定义结构体开发中间件 package main import ( "contex 阅读全文
posted @ 2023-06-04 18:26 99号的格调 阅读(51) 评论(0) 推荐(0) 编辑
摘要:1.Lock/Unlock 没有成对出现,就意味着会出现死锁的情况,或者是因为 Unlock 一个未加锁的 Mutex 而导致 panic。 2.第二种误用是 Copy 已使用的 Mutex。 Package sync 的同步原语在使用后是不能复制的。原因在于,Mutex 是一个有状态的对象,它的 阅读全文
posted @ 2023-06-04 13:27 99号的格调 阅读(53) 评论(0) 推荐(0) 编辑
摘要:互斥锁的实现机制 互斥锁是并发控制的一个手段,是为了避免竞争而建立的一种并发控制机制。在并发编程中,如果程序中的一部分会被并发访问或修改,那么,为了避免并发访问导致的意想不到的结果,这部分程序需要被保护起来,这部分被保护起来的程序,就叫做临界区。可以说,临界区就是一个被共享的资源,或者说是一个整体的 阅读全文
posted @ 2023-06-04 12:45 99号的格调 阅读(28) 评论(0) 推荐(0) 编辑
摘要:什么是WaitGroup? WaitGroup解决的就是并发-等待问题:现在有一个goroutineA在检查点等待一组goroutine全部完成,如果 在执行任务的这些goroutine还没全部完成,那么goroutine A就会阻塞在检查点,知道所有goroutine都完成后才能继续执行。 Gol 阅读全文
posted @ 2023-06-03 23:27 99号的格调 阅读(72) 评论(0) 推荐(1) 编辑
摘要:中文文档:https://gorm.io/zh_CN/ 我们知道,在使用gorm的时候,如果我们使用了gorm内置的model,会存在一个delete_at字段,当我们删除一条数据,这条数据并不会在数据库中被彻底删除 举个例子: 数据库中的数据如下: 现在通过实现的接口,去删除id=402的数据,在 阅读全文
posted @ 2023-06-02 21:59 99号的格调 阅读(344) 评论(0) 推荐(0) 编辑
摘要:Golang中引入五种字符串拼接方法,分别如下: 1.+拼接法 2.fmt.Sprintf() 3.strings.Builder 4.bytes.Buffer 5.[]byte 代码示例,这里将根据《Go语言高性能编程》中的一节,来看一下这五种具体的方法: package main import 阅读全文
posted @ 2023-05-18 23:06 99号的格调 阅读(196) 评论(0) 推荐(0) 编辑
摘要:context包是go并发中常用的包,用于设置截至日期,同步信号,传递请求相关的值。 应用场景 每一个http请求的request都会启动一个goroutine处理这个请求,后续跟进的这个请求可能还需要访问数据库,做安全验证,访问控制,日志记录等,这时候就会 由最早的goroutine启动后续的多个 阅读全文
posted @ 2023-05-14 16:49 99号的格调 阅读(45) 评论(0) 推荐(0) 编辑
摘要:安装: go get github.com/spf13/viper 介绍: Viper 是一个完整的 Go 应用程序配置解决方案。 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件 可以设置监听配置文件的修改,修改时自动加载新的配置 从 阅读全文
posted @ 2023-05-13 14:49 99号的格调 阅读(25) 评论(0) 推荐(0) 编辑
摘要:特殊数字”是指只能被分解为2,3,7的乘积的数字。“特殊数字”序列为1, 2, 3, 4, 6, 7, 8, 9, 12, 14, ...展示了前10个“特殊数字”。按照惯例,1也是“特殊数字”。给定整数n,写一个程序,找到序列中,第n个“特殊数字”。如:n=9,找到“特殊数字”序列中第9位数字,也 阅读全文
posted @ 2023-05-12 15:21 99号的格调 阅读(39) 评论(0) 推荐(0) 编辑
摘要:1.给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。 示例代码: import "fmt" func numIsIands(grid [][ 阅读全文
posted @ 2023-05-10 22:20 99号的格调 阅读(28) 评论(0) 推荐(0) 编辑
摘要:问题描述 一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。 输入格式: 输入在第一行给出一个正整数N(≤10e4)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。 输出格式: 在一行 阅读全文
posted @ 2023-05-10 00:12 99号的格调 阅读(92) 评论(0) 推荐(1) 编辑
摘要:1.给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 1 1 2 3 3 --> 1 2 3 判断如果当前节点val与后继节点val相等,则将后继节点的next赋给当前节点next,若不然,则移动当前节点置下一节点(cur=cur.next) 阅读全文
posted @ 2023-05-09 00:04 99号的格调 阅读(29) 评论(0) 推荐(1) 编辑
摘要:Web的工作方式 对于普通的上网过程: 浏览器本身是一个客户端,当你输入URL的时候,首先浏 览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器 后,要求建立TCP连接,等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开 始 阅读全文
posted @ 2023-05-07 22:18 99号的格调 阅读(50) 评论(0) 推荐(0) 编辑
摘要:前言 在实际项目开发中,有时会面临同一时刻将多个goroutine作用于同一个对象的情况,此时,他们之间会发生冲突,这种情况称为数据竞态问题。例如: package main import ( "fmt" "time" ) var count int func main() { go CountPl 阅读全文
posted @ 2023-05-06 23:13 99号的格调 阅读(110) 评论(0) 推荐(0) 编辑
摘要:什么是goroutine? goroutine是go特有的并发体,是一种轻量级的线程,由go关键字启动。goroutine是Go语言提供的一种用户态线程,有时我们也称之为 协程。所谓的协程,某种程度上也可以叫做轻量线程,它不由os,而由应用程序创建和管理,因此使用 开销较低(一般为4K)。我们可以创 阅读全文
posted @ 2023-05-06 18:21 99号的格调 阅读(76) 评论(0) 推荐(0) 编辑

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