go+js登录注册例子(带邮箱验证)
1 搭建服务器
1 package index
2
3 import (
4 "log"
5 "net/http"
6
7 "2021.6.28_WebServer_email.go/lib/utils"
8 )
9
10 const (
11...[2021/6/28]
Go--Sync.Once的应用
sync.Once
常应用于单例模式,例如初始化配置、保持数据库连接等。
init函数通常是所在package首次被加载时执行,如果一直没有被调用就会浪费内存。
sync.Once可以在代码任意位置初始化和调用,因此可以延迟到使用时在执行,并发场景下时线程安全的。(类似于C#中的Lazy语法...[2021/6/21]
Golang Heap 源码剖析
堆原理解析
堆一般指二叉堆。是使用完全二叉树这种数据结构构建的一种实际应用。通过它的特性,分为最大堆和最小堆两种。
如上图可知,最小堆就是在这颗二叉树中,任何一个节点的值比其所在子树的任意一个节点都要小。最大堆就是在这颗二叉树中,任何一个节点的值都比起所在子树的任意一个节点值都要大。
...[2021/6/21]
Golang开源定时任务调度框架robfig/cron优化
项目中需要使用一个简单的定时任务调度的框架,最初直接从GitHub上搜了一个star比较多的,就是 https: github.com/robfig/cron 这个,目前有8000+ star。刚开始使用的时候发现问题不大,但是随着单机需要定时调度的任务越来越多,高峰期差不多接近500...[2021/6/15]
自适应微服务治理背后的算法
前言
go-zero 群里经常有同学问:
服务监控是通过什么算法实现的?
滑动窗口是怎么工作的?能否讲讲这块的原理?
熔断算法是怎么设计的?为啥没有半开半闭状态呢?
本篇文章,来分析一下 go-zero 中指标统计背后的实现算法和逻辑。
指标怎么统计
这个我们直接看 breaker...[2021/6/7]
GoLang 学习笔记(七)-- 声明变量风格,二级指针,隐式作用域GoLang 学习笔记(七)-- 声明变量风格,二级指针,隐式作用域
编辑器换成了 GoLand,看源码极其方便。就是快捷键又要适应一会儿。
今天开始看 《Go 程序设计语言》,别名《Go 语言圣经》。
$ ./goBible --type=书籍 --name=Go 语言圣经(一)--chapter=Program Structure
1. 声明变量,有四种...[2021/6/7]
如何设计 API 接口,实现统一格式返回?
文章目录:
目录前后端接口交互接口返回值约定返回值规范正确返回错误返回统一定义错误码错误码规范Controller 层如何用?正确返回错误返回详细代码实现错误码Controller总结问题思考
前后端接口交互
我们都知道,前端通常会通过后台提供的接口来获取数据来完成前端页面的渲染,前端可以...[2021/6/7]
Golang nil slice 与 nil map 的不同设计
0.目录
1.表现
1.1 空值赋值
1.2 nil 值赋值
2.原因
2.1 append 并未改变原有 slice
2.2 如果 nil map 支持赋值
3.两种改进设计思路
3.1 slice 标准
3.2 map 标准
1.表现
1.1 空值赋值
t := []int{}
...[2021/6/7]
后端开发都应该了解的登录漏洞
登录是大部分网站都具备的一个功能,作为用户使用系统的第一步,如果登陆逻辑设计不合理,容易被攻击者利用,造成安全问题。
密码泄漏
弱口令
相信大家都知道弱口令是什么意思,用户为了方便,一般会使用123456、admin、pa wd、pa word、123qwe等这些作为自己的常用密码,方便好记。...[2021/6/7]
使用goland调试远程代码
前言
很多时候我们都在window上使用goland,并直接使用goland调试go代码。
但是很多时候我们的程序运行在Linux服务器上,虽然可以通过dlv命令行进行手动打断点调试,但是太麻烦了。
因此我查阅资料发现,goland是支持远程调试的,因此写篇文章记录一下。
操作步骤
安...[2021/6/7]
一文带你搞懂 RPC 到底是个啥
RPC(Remote Procedure Call),是一个大家既熟悉又陌生的词,只要涉及到通信,必然需要某种网络协议。我们很可能用过HTTP,那么RPC又和HTTP有什么区别呢?RPC还有什么特点,常见的选型有哪些?
1. RPC是什么
RPC可以分为两部分:用户调用接口 + 具体网络协...[2021/5/31]
Gorm入门使用
Gorm
GORM CRUD 数据库的增删改查
go get -u github.com/jinzhu/gorm
go get -u github.com/jinzhu/gorm/dialect mysql
go常规查询操作
package main
import (
"encod...[2021/5/31]
通用连接池帮你解决资源管理难题
前言
群里老有同学问,go-zero 的 数据库 和 redis 库是否有连接池支持。先说结论:有的,可以放心大胆用!
从框架设计来说,对于数据库连接这种资源当然是尽可能减少频繁操作:
为业务减负
提升框架自身的性能
池化技术是一个通用化技术,本身就应该作为一个通用库支撑框架的上层业务
...[2021/5/31]
GoLang 学习笔记(四)-- 并发基础(goroutine,信道,sync.Mutex,sync.WaitGroup)
今天把 A Tour of Go 的最后章节看完。
1. goroutine(Go 程)
goroutine 是 Go 管理的一个轻量级线程。
go f(x, y, z)
goroutine 会先对 f,x,y,z 求值,再把 f(x, y, z) 放到一个新的 goroutine 中。...[2021/5/31]
GoLang 学习笔记(六)--Effective Go(高效编程风格)(二)
1. 数据(书接上回)
1.1 map(映射)
slice 不能用作 key,因为并没有定义两个 slice 是否相等的手段。
1.2 String() 方法
如果要在 String() 方法(Stringer 接口)里使用 Sprintf,请不要使用使用 %s 或者 字符串的 %v,因为一这...[2021/5/31]
懂得取舍才是缓存设计的真谛
Previously
前两篇文章(缓存稳定性 和 缓存正确性)跟大家讨论了缓存的『稳定性』和『正确性』,缓存常见问题还剩下『可观测性』和『规范落地&工具建设』
稳定性
正确性
可观测性
规范落地和工具建设
上周文章发完之后,很多同学对我留的问题进行了深入的讨论,我相信经过深度的思考...[2021/5/24]
Gin框架介绍与使用
Gin
初识 Gin框架
下载(可能会下载不全。缺什么get什么即可)
go get -u -v github.com/gin-gonic/gin
package main
import (
"github.com/gin-gonic/gin"
"log"
"net/http"...[2021/5/24]
进程内缓存助你提高并发能力!进程内缓存助你提高并发能力!
前言
缓存,设计的初衷是为了减少繁重的IO操作,增加系统并发能力。不管是 CPU多级缓存,page cache,还是我们业务中熟悉的 redis 缓存,本质都是将有限的热点数据存储在一个存取更快的存储介质中。
计算机本身的缓存设计就是 CPU 采取多级缓存。那对我们服务来说,我们是不是也可以采...[2021/5/24]
Go 函数详解
一、函数基础
函数由函数声明关键字 func、函数名、参数列表、返回列表、函数体组成
函数是一种类型。函数类型变量可以像其他类型变量一样使用,可以作为其他函数的参数或返回值,也可以直接调用执行
函数名首字母大小写决定了其包可见性
参数和返回值需用()包裹,如果返回值是一个非命名的参数,则可省略。...[2021/5/24]
Go - 开箱即用,WEB 界面一键安装,没有项目经验,可以拿这个练手
安装界面
启动程序之后,会在浏览器中自动打开安装界面。
因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis、MySQL 配置信息,点击初始化按钮,会将用到的数据表和默认数据进行初始化,在右侧可以看到初始化的日志信息。
如上,初始化成功后,重新启动程序,会在浏览...[2021/5/24]
缓存数据一致性 - 架构师峰会演讲实录
Previously
缓存系统涉及的问题和知识点是比较多的,我主要分为以下几个方面来跟大家探讨:
稳定性
正确性
可观测性
规范落地和工具建设
上篇 我们分析了缓存系统的稳定性,介绍了 go-zero 是怎么解决缓存穿透、缓存击穿、缓存雪崩问题的。比较浅显易懂,且具有比较强的实战意义,推荐...[2021/5/17]
Go实现各类限流的方法Go实现各类限流的方法
前 言
在开发高并发系统时,我们可能会遇到接口访问频次过高,为了保证系统的高可用和稳定性,这时候就需要做流量限制,你可能是用的 Nginx 这种来控制请求,也可能是用了一些流行的类库实现。限流是高并发系统的一大杀器,在设计限流算法之前我们先来了解一下它们是什么。
限 流
...[2021/5/10]
[Go] embed指令嵌入静态文件到二进制包
go 1.16开始提供了embed指令 , 可以将静态资源嵌入到编译包里面
这样就可以把网页模板等文件直接打包了,就不需要每次还要拷贝静态文件
常规用法:
import _ "embed"
go:embed hello.txt
var s string
func main() {
...[2021/5/7]
Golang实现http文件上传小功能的案例
看代码吧~
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", index)
http.HandleFunc("/upload", upl...[2021/5/7]
golang 如何实现HTTP代理和反向代理
代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端。
代理的功能有很多,事实上整个互联网到处都充斥着代理服务器。如果所有的 HTTP 访问都是客户端和服务器端直接进行的话,我们的网络不仅会变得缓慢,而且性能会大打折扣。
代理服务器根据不同的配置和使...[2021/5/7]
简单聊聊内存逃逸 | 剑指offer - golang
问题
简单讲讲golang的内存逃逸吗?
解析
什么是内存逃逸
在程序中,每个函数块都会有自己的内存区域用来存自己的局部变量(内存占用少)、返回地址、返回值之类的数据,这一块内存区域有特定的结构和寻址方式,寻址起来十分迅速,开销很少。这一块内存地址称为栈。栈是线程级别的,大小在创建的时候已经确...[2021/5/6]
Go语言操作数据库及其常规操作
Go操作MySQL
安装: go get -u github.com/go-sql-driver/mysql
GO语言的操作数据库的驱动原生支持连接池, 并且是并发安全的 标准库没有具体的实现 只是列出了一些需要的第三方库实现的具体内容
第一次连接MySQL成功
package main...[2021/5/6]
Go并发编程(goroutine)
Go并发
并发编程里面一个非常重要的概念, go语言在语言层面天生支持并发, 这也是Go语言流行的一个重要的原因
Go语言中的并发编程
并发与并行
并发:同一时间段内执行多个任务(你在用微信和两个人聊天)
并行:同一时刻执行多个任务 (你和你的朋友 都在用微信和 你们的一个朋友聊天)
...[2021/5/6]
GinAdmin——基于golang的web管理平台
GinAdmin
这个项目是以Gin框架为基础搭建的后台管理平台,虽然很多人都认为go是用来开发高性能服务端项目的,但是也难免有要做web管理端的需求,总不能再使用别的语言来开发吧。所以整合出了GinAdmin项目,请大家多提意见指正!
GitHub地址
https: github.com/g...[2021/5/6]
Go语言核心技术,资深技术专家3个月带你通关
如果你认真地跟我一起走完这个专栏,那么基本掌握Go语言是肯定的,成为你学习Go语言最重要的敲门砖和垫脚石。
许多大厂都已经拥抱Go语言,高人才需求也就意味着高额的回报,如今掌握Go语言已经成为了简历上的一项亮点,
不但优先录取,薪资也随之一路攀升。
从大厂面...[2021/5/6]
[Go] 解决go的fatal error: concurrent map writes map非并发安全
map不是并发安全的 , 当有多个并发的groutine读写同一个map时
会出现panic错误
concurrent map writes
例如下面的代码会出现这个错误:
var mMap map[int]int
func TestMyMap(t *te...[2021/5/6]
[Go] golang协程池模拟实现群发邮件
比如批量群发邮件的功能
因为发送邮件是个比较耗时的操作,
如果是传统的一个个执行 , 总体耗时比较长
可以使用golang实现一个协程池 , 并行发送邮件
pool包下的pool.go文件
package pool
import "log"
具体任务,可以传参可以自定义操作
ty...[2021/5/6]
go gin框架和springboot框架WEB接口性能对比go gin框架和springboot框架WEB接口性能对比
1 简要概述
最近看起go lang,真的被go的goroutine(协程)惊艳到了,一句 go function(){#todo},即可完成一个并发的工作。
看到gin这个web框架时,突然就特别想拿它和springboot来做个性能对比,马上撸一遍。
...[2021/5/6]
[Go] 解决golang中出现 panic: runtime error: invalid memory address or nil pointer dereference
当在nil上调用一个属性或者方法的时候 , 会报空指针
尤其是结构体指针 , 非常容易出现这个问题 , 下面是测试代码
package tools
import "fmt"
func MyTest() {
type MConn struct {
Name str...[2021/4/19]
【gin-vue-admin】初始化数据库失败
GIN-VUE-ADMIN 初始化数据库失败
环境
版本:2.4+
数据库: 5.7
问题
初始化数据库时失败,创建sys_users表时报错ERROR 1067: Invalid default value for nickname
自动导入初始数据时,又报Error 1366:...[2021/4/19]
Go语言开发笔记
GO开发
Golang被誉为21世纪的C语言
2012.3 - 2020.2 1.0 - 1.14版本
为什么选择GO
继承python的简洁 & C语言的性能于一身
环境搭建
执行golang代码。
go run **.go
或者go文...[2021/4/19]
时间戳转换小工具
有时候需要时间和时间戳之间进行转换,以及获取当前时间和时间戳。
虽然功能很小,但是也不想每次去网页上搜一搜这么麻烦,因此写了一个小工具。
源码鉴赏:
package main
import (
"fmt"
"os"
"strconv"
"strings"
"time"
)
...[2021/4/19]
Go语言从入门到实战,带你拿下Golang的高效编程法
独特的学习方法:着重对比 Go 语言语法和其他其他编程语言的不同,带你快速入门 Go 语言,高效掌握 Go 语言的编程方法。
学以致用,注重实战:带你对 Go 语言在开发中的常见问题进行拆解分析,比如并发编程模式,常见并发任务,高可用服务设计,性能调优等难题,让你可以从入门走向实战。
适合已...[2021/4/19]
[Git]提升国内访问github的速度
文章转载自"编程帮",也欢迎大家关注我的开源在线客服项目https: github.com.cnpmjs.org/taoshihan1991/go-fly,演示地址:https: gofly.sopans.com
1. GitHub 镜像访问
这里提供两个最常用的镜像地址:
https: gi...[2021/4/12]
[Go] golang的GMP调度模型
GMP是三个缩写
G : groutine
M : Machine 系统线程
P : Proce or 处理器
GMP调度就是循环在与P(处理器)绑定的M(系统线程)上寻找可执行的G(协程)
在当前P(处理器)上创建G(g...[2021/4/12]
RabbitMQ 入门 (Go) - 6. 数据持久化(上) - yangxu-proRabbitMQ 入门 (Go) - 6. 数据持久化(上) - yangxu-pro
从本节开始,我介绍一下如何将相关数据持久化到数据库,也就是上图中蓝色的部分。
目前的问题
我先运行 6 个传感器和2 个协调器,这里我使用了批处理文件:
&nbs...[2021/4/12]
RabbitMQ 入门 (Go) - 7. 数据持久化(下)【完】 - yangxu-pro
数据库
我使用的是 PostgreSQL。
使用的驱动是 github.com/lib/pq
这个网址 https: pkg.go.dev/github.com/lib/pq 是官方文档。
创建数据表
打开 PostgreS...[2021/4/12]
答应我,别在go项目中用init()了
前言
go的 init函数给人的感觉怪怪的,我想不明白聪明的 google团队为何要设计出这么一个“鸡肋“的机制。实际编码中,我主张尽量不要使用init函数。
首先来看看 init函数的作用吧。
init() 介绍
init()与包的初始化顺序息息相关,所以先介绍一个go中包的初始化顺序吧。...[2021/4/12]
golang gin 框架的 https 配置
目录
概述
https 证书的生成
第一步:下载证书生成软件
第二步:创建测试证书
第三步:导出证书
总结
https 证书在 gin 框架中的部署
构建简单的 web 服务
证书转换
改成 https 服务
概述
目前, https 几乎已经是 web 站点的标配了, ht...[2021/4/6]
Golang开发必须了解的细节!Golang开发必须了解的细节!
GO核心编程
简介
go语言特点:
go具有垃圾回收机制
从语言层面支持并发,goroutine,高效利用多核,基于CPS并发模型实现(重要特点)
吸收了管道通信机制,实现不同goroutine之间的互相通信
函数可以返回多个值
切片、延时执行defer
继承C语言很多思想,引入包的概念,用于组...[2021/4/6]
RabbitMQ 入门 (Go) - 3. 模拟传感器,生成数据并发布 - yangxu-pro
现在,我们需要模拟传感器,生成数据,并发布到 RabbitMQ。
建立传感器项目
在 GOPATH src 下建立文件夹 sensors,使用 go mod init 初始化,并创建 main.go。
同时别忘了安装&nb...[2021/4/6]
NetCore的缓存使用详例
关于我
作者博客|文章首发
缓存基础知识
缓存可以减少生成内容所需的工作,从而显著提高应用程序的性能和可伸缩性。 缓存最适用于不经常更改的 数据,生成 成本很高。 通过缓存,可以比从数据源返回的数据的副本速度快得多。 应该对应用进行编写和测试,使其 永不 依赖于缓存的数据。
ASP.NET ...[2021/4/6]
go time/rate 接口-账户/IP 限流
接口限流
按账户/IP/Token限流
定时加载配置
time/rate 原理
time/rate 是go提供的官方限流工具
原理: 令牌桶,以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务...[2021/4/6]
前端使用bcrypt对密码加密,服务器对密码进行校验
以前为了防止前端密码安全问题,都是对密码进行md5(pa word + salt)。
有些也会用别的加密方式,但还是会存在撞库,彩虹表等破解常规密码。
因此使用bcrypt加密是一个不错的选择,因为每次加密都会随机salt,每次加密结果都不一样,相对安全性更高些。
下面是一个示例代码,...[2021/4/6]
RabbitMQ 入门 (Go) - 4. 使用 Fanout Exchange 做服务发现(上) - yangxu-pro
到目前为止,我们项目的结果大致如下:
传感器生成的模拟数据(包含传感器名称、数据、时间戳)是通过传感器在运行时动态创建的 Queue 来发送的。这些 Queue 很难直接被发现。
为了解决这个问题,我创建了另...[2021/4/6]