
GO语言
文章平均质量分 64
雨雨不怕雨
区块链技术、GO语言爱好者;
展开
-
GO中对map排序
GO语言中,map是哈希表,能够将特定类型的key映射到特定类型的Value上。在查询Map里面的内容时,其时间复杂度为O(1)非常高效。但其存储并不是线性的,遍历输出时,也没有顺序可言。如果需要按顺序的输出map中的元素,就需要借助其他数据结构的帮助。按照需求,本文分别提供了按Key顺序输出map、按Value顺序输出map两种方法。...原创 2022-07-15 14:31:46 · 1400 阅读 · 0 评论 -
GO定时器原理及使用
在进行并发编程时,有时候会需要定时功能,比如监控某个GO程是否会运行过长时间、定时打印日志等等。GO标准库中的定时器主要有两种,一种为Timer定时器,一种为Ticker定时器。Timer计时器使用一次后,就失效了,需要Reset()才能再次生效。而Ticker计时器会一直生效,接下来分别对两种进行介绍。首先介绍一下GO定时器的实现原理。在一个GO进程中,其中的所有计时器都是由一个运行着 函数的 goroutine 来保护。它使用时间堆(最小堆)的算法来保护所有的 Timer,其底层的数据结构基于数组的原创 2022-06-20 19:43:47 · 2259 阅读 · 0 评论 -
go语言函数参数是值传递吗?
GO语言传递的参数默认均为值传递(形参为实参变量的副本)。但是为什么会出现函数内部影响到外部的这种情况呢,这就要谈到GO语言的引用类型了。指针、slice(切片)、map(映射)、channel(管道)、函数、接口都是GO语言的引用类型,...原创 2022-06-10 14:24:21 · 374 阅读 · 0 评论 -
GO并发 使用channel实现生产者/消费者模型
前言生产者/消费者问题是并发编程中的经典问题,也被称为有限缓冲区问题,此模型中有生产者和消费者两种组件:生产者不断生成一定量的数据放到缓冲区中。消费者不断消耗缓冲区中的数据。注意:缓冲区的大小是有限的,当缓冲区满了后,生产者进入阻塞状态。当缓冲区为空时,消费者进入阻塞状态。同一份数据不能被多次消费。多消费者和多生产者场景时,应该合理设计代码,避免数据竞争。使用channelpackage mainimport ( "fmt" "sync")var原创 2022-05-31 16:08:56 · 1456 阅读 · 0 评论 -
GO并发编程快速上手
GO并发编程,教程,GO语法,channel,互斥锁原创 2022-05-31 15:25:10 · 348 阅读 · 0 评论 -
go错误处理(2)——panic函数使用及捕获
本篇博客探讨了如何使用 panic 和 recover 来处理 Go 语言中的异常。当程序遇到无法处理的错误时,它可以使用 panic 函数引发异常,并使用 recover 函数结合defer关键词从异常中恢复。原创 2023-03-23 17:14:55 · 1418 阅读 · 0 评论 -
go中的错误处理(一)——error类型介绍和使用
有时候,import ("fmt"if err!= nil {ok {returnreturn上述代码中,定义了一个自定义错误类型,并实现了Error方法,所以此结构体可以直接作为error类型进行返回。在主函数中,也可以正常进行处理。总的来说,GO的错误处理是比较轻量的,使用error类型即可处理大部分的错误了。但是还有一些极端严重的错误需要使用panic和recover来进行处理,下篇文章会进行分析。原创 2023-03-23 16:20:09 · 1538 阅读 · 0 评论 -
Protobuf简介及如何在GO语言中使用Protobuf?
消息类型定义在.proto包中,我们这里创建个person.proto 文件:用于指定.proto文件的版本,这里使用的是 Protocol Buffers 3 版本。package example:指定消息类型所在的包名,这里包名是example`。用于指定生成的 Go 代码的包名(package name)及导入路径(import path)。:定义一个名为Person的消息类型。:定义一个名为name的字符串类型字段,该字段的标签号为1。:定义一个名为age。原创 2023-03-11 17:19:49 · 3817 阅读 · 0 评论 -
如何避免缓存击穿?使用GO语言实现sliglefight
在缓存系统中,如果发生了缓存未命中,通常会向数据库或者其他的缓存系统来请求数据。想象这样一种情况,缓存系统中某个热点值被删除了,随后一大批请求到来,造成大量的cache miss,如果这些请求全部都转向DB,那么会造成DB请求量大,压力增加,这就是典型的。原创 2023-03-08 17:15:04 · 1227 阅读 · 0 评论 -
GO语言中的回调函数
回调函数是一种在编程中常见的技术,通常在异步编程中使用。简单来说,,它在,以。在Go语言中,可以将函数直接作为参数传递给另一个函数,并在需要时被调用,这样大大的加强了代码的可定制化,但是也一定程度上减少了代码的可读性,所以在实际使用的时候要学会取舍。原创 2023-03-04 15:11:31 · 2449 阅读 · 0 评论 -
GO语言中接口和接口型函数的使用
今天在编码中,看到了一个非常经典的接口用法如下,于是查阅了相关资料,发现此种写法为接口型函数,本文对此做了细致的阐述。原创 2023-03-04 22:23:24 · 829 阅读 · 0 评论 -
每日刷题(一)——下一个回文数
博主最近抖音三面挂在了算法题。复盘时发现是由于遇到陌生的难题,太过紧张,加上以前刷题都是闷着脑袋刷,思路理不清晰,说出思路后,代码编写逻辑也比较混乱。痛定思痛!特开每日一题栏目,做每道题时,首先陈述思路,再给出解题代码!more拿到题目时,一定要先理清思路,随后选择合适的数据结构来解题,而不是盲目的开始做。比如此题的回文数判断等操作,如果使用int类型去做的话,可以做,但是非常繁琐,容易出错,而换成字符串类型,就可以非常简单的进行翻转、判断等。原创 2023-02-22 22:12:06 · 400 阅读 · 1 评论 -
gin框架学习(三)
之前我们完成的注册接口中,将用户密码明文保存在后端数据库中,这是对用户隐私的一种侵犯。接下来我们要通过bcrypt包,将用户密码加密后,再保存在数据库中。bycrypt是go官方包之一,是一个加密包,其进行的加密是非可逆的,也就是说从解密结果无法对密码进行推测,非常符合对用户密码加密的逻辑。具体使用请看下面的两个方法。//加密方法//此方法传入用户密码,和一个“cost”(加盐),返回一个加密后的密码和错误信息。//比较方法。原创 2023-02-21 19:46:43 · 1078 阅读 · 0 评论 -
gin框架学习(二)
本节的内容主要是对项目进行了结构上的划分,为后续的开发奠定了基础,接下来将会完成登录操作,同时在登录中加入中间件验证的权限控制。原创 2023-02-21 19:43:22 · 279 阅读 · 0 评论 -
go get下载包遇到被墙的问题怎么办?
有时候使用go get下载包会遇到被墙的问题,配置国内的镜像即可解决。原创 2023-02-21 19:36:55 · 218 阅读 · 0 评论 -
gin框架学习(一)
今天实现的一个小demo所有功能都写在一个包中,在业务扩大后,这样的架构就会显得十分臃肿不好维护,因为接下来将会对项目架构进行重新设计。原创 2023-02-21 19:40:49 · 680 阅读 · 0 评论 -
git简单使用,及提交代码到github
git作为一个最流行的分布式版本管理工具,我们一起学习一下他的用法吧!在linux下,直接运行以下命令即可完成安装:windows下,进入官网安装即可。Git - Downloads (git-scm.com)安装完毕后,在命令行使用如下命令查看git版本信息。2.git操作流程示例2.0 初始化一个仓库初始化一个git仓库的命令为运行命令后,会在当前文件夹建立一个git仓库,如果电脑设置了查看隐藏文件夹,会发现,git帮我们创建了一个.git文件夹,里面装了一些版本控制的相关文件。查看状态的命令为我原创 2022-06-27 19:08:20 · 244 阅读 · 0 评论 -
go使用标准库实现堆,及前K个高频元素,滑动窗口的最大值解法
堆是一种树形数据结构(完全二叉树),分为大顶堆和小顶堆,顾名思义,大顶堆就是堆顶(第一个元素)始终存放的是这组元素中的最大元素,小顶堆就是堆顶元素是最小元素。如果需要从一组对象中查找或,且,使用堆能够高效率的完成需求。GO中标准库提供了heap的功能,一起看看如何使用吧。...原创 2022-07-15 20:54:23 · 388 阅读 · 0 评论 -
完全背包问题思路及GO语言实现
完全背包问题具体描述如下:完全背包是01背包的升级版,将01背包中每个物品的个数从1个扩充到了无数个,如果对01背包不太熟悉的可以看看这篇文章: 01背包问题思路及GO语言实现_雨雨不怕雨的博客-优快云博客本文中,给出简单简单思路及GO语言解答实现。完全背包的最优化版本很难直接理解,接下来会首先给出最简单的思路,并一步步优化,分别如下。此种方法便于理解,但是时间、空间复杂度更大。的含义为当物品为0~i、容量为k时,此时能获得的最大的价值。根据每次选取n个第i个物品,可推出递推式:在上式中,如果不选取,则的原创 2022-07-03 14:20:50 · 359 阅读 · 0 评论 -
01背包问题思路及GO语言实现
01背包问题具体描述如下:01背包是最简单的背包问题,在题中每种物品只有一个,所以对于每个物品只需要考虑选与不选两种情况即可。如果每个物品有无数个则为完全背包,数量不同的物品则为多重背包。本文中,主要针对01背包问题,给出简单思路及GO语言解答实现。01背包的实现根据dp数组的定义不同,主要有两种方法,分别如下。此种方法便于理解,但是空间复杂度更大。的含义为当物品为0~i、容量为k时,此时能获得的最大的价值。根据每次是否选取第i个物品,推出递推式:在上式中,如果不选取,则的值会与相同,如果选取,则值为。1原创 2022-06-26 16:36:22 · 532 阅读 · 0 评论 -
GO语言RPC包使用
GO语言、RPC、教程原创 2022-05-31 15:42:30 · 378 阅读 · 0 评论 -
GO并发编程 使用锁和条件变量实现生产者/消费者模型
GO语言,生产者/消费者模型,锁,条件变量。原创 2022-05-31 15:05:10 · 204 阅读 · 0 评论