
Go
文章平均质量分 84
夏沫の梦
人生苦短,我学GoLang
展开
-
面试某大厂,被Go的Channel给吊打了,这次一次性通关channel。
前几天面试某大厂的云原生岗位,原本是一个轻松+愉快的过程,当问到第二个问题,我就发现事情的不对劲,先复盘一下面试官有关Channel的问题,然后再逐一解决,最后进行扩展,这次一定要一次性通关channel!答应我,看完这篇文章,不要再被Channel吊打了!Channel是Go语言中的一种并发原语,用于在goroutine之间传递数据和同步执行。Channel实际上是一种特殊类型的数据结构,可以将其想象成一个管道,通过它可以发送和接收数据,实现goroutine之间的通信和同步。原创 2023-04-13 20:53:57 · 1610 阅读 · 3 评论 -
windows下安装make,使用makefile文件
想要使用Makefile文件,首先需要确保本地可以使用make命令,如果没有安装make,goland编译器会出现报错:1.windows上安装:chocolatey 当用户编译文件过多的时候,使用makefile可以帮助模块化编译文件,makefile是一个脚本文件,根据规则,来执行相应的脚本文件,实现自动化编译。原创 2022-12-20 17:07:48 · 5182 阅读 · 2 评论 -
go操作Kafka
1.1.2. Kafka的特点Kafka是分布式的,其所有的构件borker(服务端集群)、producer(消息生产)、consumer(消息消费者)都可以是分布式的。在消息的生产时可以使用一个标识topic来区分,且可以进行分区;每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动原创 2022-12-04 23:30:29 · 2258 阅读 · 1 评论 -
关于Redis的知识点,你都学会了吗?
Redis是什么: 开源的,基于键值的存储服务系统,支持多种数据类型,性能高,功能丰富速度快:官方给出的结果是10W OPS,每秒10W的读写(为什么是10W,因为内存的相应时间是100纳秒-10万分之一秒)。数据存储在内存中;使用C语言开发;Redis使用单线程,减少上下文切换。本质原因是计算机存储介质的速度,内存比硬盘优几个数量级)。MemoryCache可以使用多核,性能上优于Redis。持久化:Redis所有的数据保持在内存中,对数据的更新将异步地保存到磁盘上。断掉,宕机?原创 2022-11-27 22:26:57 · 1332 阅读 · 0 评论 -
关于Go你不得不知道的小技巧
Go 箴言- 不要通过共享内存进行通信,通过通信共享内存- 并发不是并行- 管道用于协调;互斥量(锁)用于同步- 空接口 `interface{}` 没有任何类型约束Go 之禅- 每个 package 实现单一的目的- 显式处理错误- 尽早返回,而不是使用深嵌套- 接口越大,抽象就越弱- 利用好零值使用 `go fmt` 格式化让团队一起使用官方的 Go 格式工具,不要重新发明轮子。 尝试减少代码复杂度。 这将帮助所有人使代码易于阅读。原创 2022-11-20 22:08:40 · 1243 阅读 · 1 评论 -
Go实现栈与队列基本操作
go语言中,并没有栈与队列相关的数据结构,但是我们可以借助切片来实现栈与队列的操作;接下来我们一起实现栈与队列基本操作,并且还会实现用栈实现队列,用队列实现栈的操作。原创 2022-11-11 11:51:50 · 2290 阅读 · 1 评论 -
Go操作MySQL
事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元),同时这个完整的业务需要执行多次的DML(insert、update、delete)语句共同联合完成。A转账给B,这里面就需要执行两次update操作。在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。原创 2022-11-08 16:32:14 · 2290 阅读 · 0 评论 -
go基础语法50问,来看看你的go基础合格了吗?
1.使用值为 nil 的 slice、map会发生啥2.访问 map 中的 key,需要注意啥3.string 类型的值可以修改吗4.switch 中如何强制执行下一个 case 代码块5.你是如何关闭 HTTP 的响应体的6.你是否主动关闭过http连接,为啥要这样做7.解析 JSON 数据时,默认将数值当做哪种类型8.如何从 panic 中恢复9.简短声明的变量需要注意啥10.range 迭代 map是有序的吗11.recover的执行时机12.闭包错误引用同一个变量问题怎么处理原创 2022-10-31 19:34:40 · 1721 阅读 · 2 评论 -
Go_gin权限验证
Casbin是用于Golang项目的功能强大且高效的开源访问控制库。- 以经典{subject, object, action}形式或您定义的自定义形式实施策略,同时支持允许和拒绝授权。- 处理访问控制模型及其策略的存储。- 管理角色用户映射和角色角色映射(RBAC中的角色层次结构)。- 支持内置的超级用户,例如root或administrator。超级用户可以在没有显式权限的情况下执行任何操作。- 多个内置运算符支持规则匹配。例如,keyMatch可以将资源键映射/foo/bar到模式/foo*。原创 2022-10-12 21:01:16 · 3631 阅读 · 1 评论 -
Golang可能会踩的58个坑之高级篇
Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。如果花时间学习官方 doc、wiki、讨论邮件列表、 Rob Pike 的大量文章以及 Go 的源码,会发现这篇文章中的坑是很常见的,跳过这些坑,能减少大量调试代码的时间。原创 2022-10-11 21:08:25 · 3619 阅读 · 0 评论 -
Golang可能会踩的58个坑之中级篇
Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。如果花时间学习官方 doc、wiki、讨论邮件列表、 Rob Pike 的大量文章以及 Go 的源码,会发现这篇文章中的坑是很常见的,跳过这些坑,能减少大量调试代码的时间。原创 2022-10-11 21:02:29 · 4702 阅读 · 0 评论 -
Golang可能会踩的58个坑之初级篇
Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。如果花时间学习官方 doc、wiki、讨论邮件列表、 Rob Pike 的大量文章以及 Go 的源码,会发现这篇文章中的坑是很常见的,跳过这些坑,能减少大量调试代码的时间。原创 2022-10-11 20:50:02 · 3655 阅读 · 0 评论 -
Go分享好的github插件和项目
QQ、微信(WeChat)、支付宝(AliPay)的Go版本SDK [http://github.com/go-pay/gopay](http://github.com/go-pay/gopay)- 发送邮件库 [https://github.com/go-gomail/gomail](https://github.com/go-gomail/gomail)- 读写Microsoft Excel [https://github.com/360EntSecGroup-Skylar/excelize](ht原创 2022-10-10 21:28:31 · 4260 阅读 · 1 评论 -
Go Micro介绍与入门
Go Micro是一个插件化的基础框架,基于此可以构建微服务,Micro的设计哲学是可插拔的插件化架构在架构之外,它默认实现了consul作为服务发现(2019年源码修改了默认使用mdns),通过http进行通信,通过protobuf和json进行编解码Micro 是一个用于构建和管理分布式系统的系统.运行时: 用于管理服务包括 auth, config, discovery, networking 的运行时环境.框架: 用于编写要在运行时运行的服务的 Go 框架.原创 2022-10-10 20:44:45 · 4800 阅读 · 0 评论 -
Go_IO操作
os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关闭文件。文件读取可以用file.Read()和file.ReadAt(),读到文件末尾会返回io.EOF的错误。打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限。根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666。根据文件描述符创建相应的文件,返回一个文件对象。os.O_CREATE //创建文件。os.O_RDONLY //只读。原创 2022-10-10 13:21:47 · 4295 阅读 · 0 评论 -
Go_Channel详解
单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接。chan原创 2022-10-10 13:21:20 · 4230 阅读 · 0 评论 -
Go_Goroutine详解
goroutine的概念类似于线程,但 goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能地将 goroutine 中的任务合理地分配给每个CPU。Go语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度和上下文切换的机制。在Go语言编程中你不需要去自己写进程、线程、协程,你的技能包里只有一个技能–goroutine,当你需要让某个任务并发执行的时候,你只需要把这个任务包装成一个函数,开启一个goroutine去执行这个函数就可以了,就是这么简单粗暴。原创 2022-10-10 12:27:48 · 4659 阅读 · 1 评论 -
Go的网络编程详解
互联网的逻辑实现被分为好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。用户接触到的只是最上面的那一层,根本不会感觉到下面的几层。要理解互联网就需要自下而上理解每一层的实现的功能。如上图所示,互联网按照不同的模型划分会有不用的分层,但是不论按照什么模型去划分,越往上的层越靠近用户,越往下的层越靠近硬件。在软件开发中我们使用最多的是上图中将互联网划分为五个分层的模型。接下来我们一层一层的自底向上介绍一下每一层。原创 2022-10-09 18:11:54 · 4559 阅读 · 0 评论 -
Go中的闭包、递归
闭包的应该都听过,但到底什么是闭包呢?闭包是由函数及其相关引用环境组合而成的实体(即:闭包=函数+引用环境)。“官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。维基百科讲,闭包(Closure),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。原创 2022-10-09 16:48:27 · 4289 阅读 · 1 评论 -
Go中select条件语句详解
select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。select 是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。select 随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。原创 2022-10-09 12:22:21 · 4659 阅读 · 1 评论 -
Go中Map的实现原理
最通俗的话说Map是一种通过key来获取value的一个数据结构,其底层存储方式为数组,在存储时key不能重复,当key重复时,value进行覆盖,我们通过key进行hash运算(可以简单理解为把key转化为一个整形数字)然后对数组的长度取余,得到key存储在数组的哪个下标位置,最后将key和value组装为一个结构体,放入数组下标处,看下图:go底层map到底怎么存储呢?接下来我们一探究竟。map的源码位于 src/runtime/map.go中 ,map同样也是数组存储的的,每个数组下标处存储的是一个b原创 2022-10-09 11:15:02 · 4304 阅读 · 1 评论 -
Go切片Silce底层实现和扩容策略
切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合。切片的设计想法是由动态数组概念而来,为了开发者可以更加方便的使一个数据结构可以自动增加和减少。但是切片本身并不是动态数据或者数组指针。切片常见的操作有 reslice、append、copy。与此同时,切片还具有可索引,可迭代的优秀特性。原创 2022-10-09 11:02:45 · 4466 阅读 · 1 评论 -
Go实现优雅关机与平滑重启
无论是优雅关机还是优雅重启归根结底都是通过监听特定系统信号,然后执行一定的逻辑处理保障当前系统正在处理的请求被正常处理后再关闭当前进程。使用优雅关机还是使用优雅重启以及怎么实现,这就需要根据项目实际情况来决定了。以上就是使用go如何优雅关机和平滑重启 的详细内容,更多关于go关机重启 的内容请关注博主的其它相关文章!原创 2022-10-05 22:08:40 · 4658 阅读 · 1 评论 -
gin项目部署到服务器并后台启动
我们写好的gin项目想要部署在服务器上,我们应该怎么做呢,接下来我会详细的讲解一下部署教程。1.首先我们要有一台虚拟机,虚拟机上安装好go框架。2.将写好的项目上传到虚拟机上。3.下载好项目运行时所需要的各种依赖。4.配置启动项目5.后台配置启动项目1.2配置环境变量编辑文件 “/etc/profile”使环境变量及时生效变量解释:1.3设置仓库代理由于google被阻拦,所以要设置代理也可以将GOPROXY写到环境变量配置文件"/etc/profile"中原创 2022-09-30 18:20:36 · 6877 阅读 · 3 评论 -
go使用JWT进行跨域认证最全教学
JWT是JSON Web Token的缩写。JWT本身没有定义任何技术实现,它只是定义了一种基于Token的会话管理的规则,涵盖Token需要包含的标准内容和Token的生成过程。// MyClaims 自定义声明结构体并内嵌jwt.StandardClaims // jwt包自带的jwt.StandardClaims只包含了官方字段 // 我们这里需要额外记录一个username字段,所以要自定义结构体 // 如果想要保存更多信息,都可以添加到这个结构体中 type MyClaims原创 2022-09-26 20:05:36 · 4473 阅读 · 1 评论