
go
文章平均质量分 66
无风的雨
这个作者很懒,什么都没留下…
展开
-
开源后台管理系统 (go-vue-admin)
前端采用vue3、RuoYi-Vue3后端采用gofrome 框架、mysql、redis、Jwt实现了一键生成前后端代码,高效开发。原创 2023-10-01 20:50:06 · 2796 阅读 · 1 评论 -
Go切片排序
Go 语言标准库提供了sort包,用于对切片和用户定义的集合进行排序。原创 2022-11-04 14:58:53 · 2684 阅读 · 1 评论 -
Go语言sync.Map
Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。原创 2022-10-27 21:09:50 · 2644 阅读 · 0 评论 -
Go-map、切片、数组循环常见问题总结
开发人员在日常开发中经常会遇到for range循环需求,因其类型的特殊性,用起来有别于其他语言,需要注意,这里对map、切片、数组循环遇到常见问题进行整理。### map1、for range map 在开始执行循环的时候,底层做了随机种子,故其循环是随机的。原创 2022-10-26 16:09:07 · 954 阅读 · 0 评论 -
Go xml文件处理
在开发中会常遇到xml数据序列化和反序列化,这里我们介绍go语言处理xml数据。encoding/xml 包实现了一个简单的xml 1.0解析器,可以理解xml名称空间。读取xml示例:package mainimport ( "encoding/xml" "fmt")type Note struct { XMLName xml.Name `xml:"note"` To string `xml:"to"` From string `xml:"from"` Heading st原创 2022-03-15 13:46:58 · 1075 阅读 · 0 评论 -
go操作elasticsearch示例
这里我使用elasticsearch官方给的go语言包(go-elasticsearch)go-elasticsearch向前兼容,这意味着客户端支持与更大或同等次要版本的 Elasticsearch 通信。Elasticsearch 语言客户端仅向后兼容默认发行版,不提供任何保证。包:https://github.com/elastic/go-elasticsearchElasticsearch: 权威指南:https://www.elastic.co/guide/cn/elasticsea原创 2021-10-28 17:03:16 · 2199 阅读 · 0 评论 -
Go 操作kafka包sarama
概述sarama 是一个纯 Go 客户端库,用于处理 Apache Kafka(0.8 及更高版本)。它包括一个用于轻松生成和使用消息的高级 API,以及一个用于在高级 API 不足时控制线路上的字节的低级 API。在github上stars上比较多(推荐)。开源包:https://github.com/Shopify/sarama文档地址:https://pkg.go.dev/github.com/shopify/sarama闲话少叙,上示例package mainimport (原创 2021-10-16 14:23:56 · 2340 阅读 · 0 评论 -
Go之time包用法
time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。time 类型type Time struct {// wall and ext encode the wall time seconds, wall time nanoseconds,// and optional monotonic clock reading in nanoseconds.//// From high to low bit position, wall encodes a 1-bit flag (hasMon原创 2021-09-23 15:32:48 · 392 阅读 · 0 评论 -
go-websocket 分布式IM
基于golang实现的分布式聊天系统,支持一对一聊天,聊天室等功能。为了测试方便发送消息数据暂未存入数据库,后期会加入数据库,也可自行加入数据库,方便永久存储聊天内容,以及支持消息必达等功能。依赖包github.com/go-redis/redisgithub.com/gin-gonic/gingithub.com/gorilla/websocketgithub.com/smallnest/rpcx包说明:redis :用于缓存ws服务器信息,用心跳形式维护ws服务器信息。gin:实现we原创 2021-05-26 16:41:53 · 937 阅读 · 0 评论 -
Go语言 orm库之gorm
5.3 Go语言 orm库之gormGORM是一个比较流行且功能齐全的orm库,主要有以下特性全功能 ORM关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)Create,Save,Update,Delete,Find 中钩子方法支持 Preload、Joins 的预加载事务,嵌套事务,Save Point,Rollback To Saved PointContext,预编译模式,DryRun 模式批量插入,FindInBatche原创 2020-12-02 14:29:12 · 3131 阅读 · 0 评论 -
Golang 操作Excel文件
日常开发中会遇到处理Excel文件的相关操作,这里推荐一款应用比较广泛的操作Excel的开源工具Excelize。Excelize是一个用Go语言编写的库,提供了一组允许您写入和读取XLSX / XLSM / XLTM文件的功能。支持读写由Microsoft Excel™2007和更高版本生成的电子表格文档。通过高度兼容性支持复杂的组件,并提供了流式API,用于从工作表中生成或读取包含大量数据的数据。该库需要Go版本1.10或更高版本。可以使用go的内置文档工具查看完整的API文档,也可以在go.dev和原创 2020-10-23 22:51:35 · 2183 阅读 · 0 评论 -
Go 加密解密算法总结
前言加密解密在实际开发中应用比较广泛,常用加解密分为:“对称式”、“非对称式”和”数字签名“。对称式:对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。具体算法主要有DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。非对称加密(公钥加密):指加密和解密使用不同密钥的加密算法,也称为公私钥加密。具体算法主要有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。数字签名:数字签名是非对称密钥加密技术与数字摘要技术的应用。主要算原创 2020-09-23 14:53:39 · 2983 阅读 · 2 评论 -
Go 中文和unicode字符之间转换
Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。在实际应用有很多需要中文和unicode转换的场景,这里主要介绍通过golang实现中文和unicode互相转换。1、中文转unicode这一步比较简单示例 sText := "hello 你好" textQuoted := strconv.QuoteToASCII(sText) textUnquoted := textQuoted[1原创 2020-09-18 10:47:02 · 8299 阅读 · 0 评论 -
gin websocket 一对一聊天
依赖包github.com/gin-gonic/gingithub.com/gorilla/websocket代码创建ws/ws.gopackage wsimport ( "encoding/json" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "log" "net/http")// ClientManager is a websocket managertype ClientManager stru原创 2020-08-11 16:06:57 · 3750 阅读 · 0 评论 -
Golang之rpc框架rpcx
前言远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。通过该协议程序员可以实现像调取本地函数一样,调取远程服务的函数。这里介绍一个高效的rpc库(rpcx)。rpcx 是一个分布式的Go语言的 RPC 框架,支持Zookepper、etcd、consul多种服务发现方式,多种服务路由方式, 是目前性能最好的 RPC 框架之一。官方资料:https://books.studygolang.com/go-rpc-programming-guide/项目:ht原创 2020-07-21 18:29:30 · 5535 阅读 · 0 评论 -
golang image: unknown format 错误解决
当使用image.Decode处理图片文件时,如报image: unknown format 错误。示例package mainimport ( "fmt" "image" "os")func main() { imagePath := "./mm.jpg" file, _ := os.Open(imagePath) defer file.Close() img, _, err := image.Decode(file) if err != nil { fmt.Print原创 2020-07-07 15:24:06 · 11084 阅读 · 5 评论 -
Go1.14版本 新特性
简介最新的 Go 版本 1.14 在 Go 1.13 之后六个月到达。它的主要更改是工具链、运行时和库的实现。该版本一如既往保持 Go 1的兼容性承诺。我们预计几乎所有的 Go 程序都能够继续编译和运行。Go Module已经具备生产环境中使用条件了,我们鼓励所有用户迁移到Go Module进行依赖项管理。如果您由于 Go 工具链中的问题而无法迁移,请确保问题已提交 open issue(如果问题不在go``Go1.15,请让我们知道为什么它阻止您迁移,以便我们可以适当地确定其优先级。语言更改根据重原创 2020-07-03 14:15:19 · 2110 阅读 · 0 评论 -
vue-element-admin 上传upload图片慢问题处理
前言vue-element-admin自带上传图片组件,在使用的过程中发现上传速度很慢,尤其是上传一些大图需要耗时几十秒不能忍受。出现这种情况,是因为upload组件会将图片上传到action="https://httpbin.org/post" ,并返回转换成base64编码格式的数据。格式类似:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYG原创 2020-06-20 16:35:59 · 6731 阅读 · 1 评论 -
golang 单点登录系统(go-sso)
这是一个基于Go语言开发的单点登录系统,实现手机号注册、手机号+验证码登录、手机号+密码登录、账号登出等功能,用户认证采用cookie和jwt两种方式。收发短信相关方法已提供,仅需根据短信通道提供商提供的接口做相应的参数配置即可使用。环境介绍golang语言:go1.13.3+ 、数据库:mysql5.7缓存:redis3.0项目地址https://github.com/guyan0319/go-sso依赖包:github.com/dgrijalva/jwt-gogithub.com/gi原创 2020-06-11 22:00:49 · 7152 阅读 · 1 评论 -
golang之JWT实现
什么是JSON Web Token?JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。直白的讲jwt就是一种用户认证(区别于session、cookie)的解决方案。出现的背景众所周知,在jwt出现之前,我们已经有session、cookie来解决用户登录等认证问题原创 2020-05-30 23:53:22 · 2220 阅读 · 0 评论 -
golang之数据验证validator
前言在web应用中经常会遇到数据验证问题,普通的验证方法比较繁琐,这里介绍一个使用比较多的包validator。原理将验证规则写在struct对字段tag里,再通过反射(reflect)获取struct的tag,实现数据验证。安装go get github.com/go-playground/validator/v10示例package mainimport ( "fmt"...原创 2020-05-04 15:50:44 · 22629 阅读 · 7 评论 -
vue-element-admin 后台动态加载菜单
前言做后台项目,权限验证与安全性是非常重要的,vue-element-admin官方主要介绍了前端控制用户菜单加载显示,以及权限控制。这就带来一些不便,服务端无法(这里可能说的绝对了,起码实现起来不太友好)控制菜单的动态展示,用户权限跟菜单相互关系的绑定。这里我们通过分析go-admin 代码来让大家一步步了解如何实现服务端控制前端菜单的展示的。项目地址:github:https://g...原创 2020-03-03 14:47:43 · 25549 阅读 · 14 评论 -
go-admin 开源后台管理系统
go-admin是一个go语言开发的后台管理系统,该系统以角色为基础的权限管理设计(RBAC),完成了系统管理模块功能的开发(其他示例模块后续加上),采用前后端分离实现方式,服务端基于go开源gin框架,前端开源框架vue-element-admin。设计原则采用比较流行开源框架gin、vue-element-admin,这些项目维护和更新比较好。尽量少修改vue-element-admi...原创 2020-01-23 09:27:04 · 20801 阅读 · 8 评论 -
gin集成swagger构建api文档
官方文档gin-swaggerswagger-doc具体步骤如下:安装 swaggo get github.com/swaggo/swag/cmd/swag一般安装比较慢,这里我先安装了go mod 借助https://goproxy.cn 代理,安装很快。当然,你会科学上网也可以。安装gin-swaggergo get -u github.com/swaggo/gin-sw...原创 2019-11-27 20:46:29 · 2166 阅读 · 0 评论 -
Golang 跨域
跨域指的是浏览器不能执行其他网站或域名下的脚本。之所以形成跨域,是因为浏览器的同源策略造成的,是浏览器对javascript程序做的安全限制,现在所有支持JavaScript 的浏览器都会使用这个策略。在实际应用中会遇到需要跨域的场景,比如前后端分离,前后端不在同域(这里的同域指的是同一协议,同一域名,同一端口),那么,它们之间相互通信如何解决呢?跨域解决有以下几种方法:jsonp跨域这里...原创 2019-10-31 14:28:56 · 1804 阅读 · 0 评论 -
Golang 类型
Go语言的类型很多,简单的类型(int,string,float等)这里不再赘述。下面讲一些开发中可能用到特殊类型struct 类型package maintype User struct { Id int Name string Amount float64}func main() { //声明struct var u User u...原创 2019-06-25 14:03:11 · 578 阅读 · 0 评论 -
Go 字符串处理
直接使用“+”:示例:a := "aa"b := "bb"a = a + bfmt.Println(a)因为字符串类型在Go中是不可改变的,因此每次操作实际都要新分配字符串,所以在字符串比较多的时候效率不高。使用strings.Join()函数示例:var s []stringfor i := 0; i <= 9; i++ { s = append(s, strc...原创 2019-06-10 23:12:13 · 3605 阅读 · 0 评论 -
golang 常量和变量
常量使用关键字 const 定义,用于存储不会改变的数据。常量的定义格式:const identifier [type] = value例如 const name = "ok" 隐式类型定义 const name1 string= "ok" 显式类型定义 fmt.Println(name) fmt.Println(name1)变量声明变量的一般形式是使用 var 关键字:v...原创 2019-06-01 23:09:47 · 844 阅读 · 0 评论 -
Go 双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点,相对于单链表来讲:往前往后遍历都很方便。相对于单向链表优势:可以双向遍历 插入删除不需要移动元素外,可以原地插入删除效率更高,当然这也是以牺牲存储空间为代价。插入数据删除数据Go cont...原创 2019-06-01 17:45:47 · 991 阅读 · 0 评论 -
go 类型转换
数据类型转换需要引入包 strconv1、字符串转整数string 转 intint,err:=strconv.Atoi(string) string 转int64int64, err := strconv.ParseInt(string, 10, 64) 10代表10进制,可以设置2 进制到 36 进制64代表int64,可以指定整数类型(0:int、8:int8、16:in...原创 2018-11-24 17:04:47 · 1336 阅读 · 0 评论 -
Go socket实现多语言间通信
前言socket提供了在传输层进行网络编程的方法,它比基于http协议的接口传输更高效,RPC(Remote Procedure Call)是远程过程调用,常用于分布式系统等,而rpc很多是基于socket实现的。不了解socket、http等协议请阅读https://blog.youkuaiyun.com/guyan0319/article/details/79404216。Socket 都可以用“打...原创 2019-06-27 22:08:11 · 1072 阅读 · 0 评论 -
Golang不同类型比较
在日常开发过程中难免会遇到各个类型的变量的比较以及运算操作,这里我们做了一些简单的汇总,希望能给各位同学在开发中带来帮助。这里先上一波关系运算符==,!=,<,<=,> 和 >=。float浮点数比较golang 支持两种浮点float32和float64,众所众知,涉及浮点数比较或运算是会遇到精度问题,具体要根据golang实现IEEE 754的情况定。默认情况下...原创 2019-07-29 16:03:37 · 3393 阅读 · 0 评论 -
导出mysql表结构生成grpc需要的proto文件工具
使用过grpc的同学都知道,写proto文件比较繁琐,尤其是写message,对应很多字段,为此写了一个简单的从mysql直接读取表结构,生成proto文件的工具。工具的使用很简单,需要简单的配置,即可运行生成proto文件。项目地址:https://github.com/guyan0319/mysql-to-proto使用说明:func main() { //模板文件存放路径 tpl...原创 2019-08-03 18:39:36 · 1024 阅读 · 0 评论 -
Golang 下载文件
7.11 Golang 下载文件这里使用net/http下载文件,可以设置Content-Type(具体参考)告诉客户端返回的内容类型实际上是什么,实现不同方式的文件的下载。示例package mainimport ( "fmt" "io/ioutil" "net/http" "net/url" "os")func main() { http.HandleFunc("/...原创 2019-08-27 15:50:09 · 2884 阅读 · 0 评论 -
GO 依赖管理工具go Modules(官方推荐)
以前写过一篇关于go管理依赖包工具 dep的文章,当时认为dep将会成为官方依赖工具,现在看来是自己图样图斯内幕破了,正如官方一直提到dep是“official experiment”官方实验项目的那样,随着go modules 在go1.11版推出,go1.12版功能不断改进,再到go1.13版完善优化,正式扶正。预计dep将来也只能定格在“official experiment”了。Go M...原创 2019-09-30 17:54:43 · 17483 阅读 · 2 评论 -
Go 之 interface接口理解
go语言并没有面向对象的相关概念,go语言提到的接口和java、c++等语言提到的接口不同,它不会显示的说明实现了接口,没有继承、子类、implements关键词。go语言通过隐性的方式实现了接口功能,相对比较灵活。interface是go语言的一大特性,主要有以下几个特点:interface 是方法或行为声明的集合interface接口方式实现比较隐性,任何类型的对象实现interfac...原创 2019-10-08 17:33:42 · 393 阅读 · 0 评论 -
Go 三个点(...)用法
众所周知,Go语言是严格类型语言,而开发的时候又遇到传入参数不定的情况,怎么办?这里的三个点(…),就给我们编程人员带来很大的灵活性,具体如下函数可变数量参数可参考https://github.com/guyan0319/golang_development_notes/blob/master/zh/9.1.md示例package mainimport "fmt"func mai...原创 2019-10-10 14:18:27 · 3686 阅读 · 0 评论 -
Go 定时器NewTimer、NewTicker 和time.After
1、定时器(time.NewTimer)Go语言的定时器实质是单向通道,time.Timer结构体类型中有一个time.Time类型的单向chan,源码(src/time/time.go)如下type Timer struct { C <-chan Time r runtimeTimer}初始化 Timer 方法为NewTimer示例package main...原创 2019-05-22 23:01:19 · 22695 阅读 · 1 评论 -
Go之context包的分析
context是Go语言官方定义的一个包,称之为上下文。Go中的context包在与API和慢进程交互时可以派上用场,特别是在提供Web请求的生产级系统中。在哪里,您可能想要通知所有goroutines停止工作并返回。这是一个基本教程,介绍如何在项目中使用它以及一些最佳实践和陷阱。先决条件在了解上下文之前,请先了解以下概念goroutinechannelContext在Go语言...原创 2019-05-22 14:29:01 · 687 阅读 · 2 评论 -
Go Redis连接池
1、创建配置文件存放在conf配置文件夹,可以跟你的需要存在相应。redis.gopackage confvar RedisConf = map[string]string{ "name": "redis", "type": "tcp", "address": "127.0原创 2018-12-10 18:06:52 · 5763 阅读 · 1 评论