RPC与gRPC详解
RPC原理与Go RPC什么是RPCRPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。
RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。
首先与RPC(远程过程调用)相对应的是本地调用。
本地调用12345678910111213141516package mainimport "fmt"func add(x, y int) int { z := x + y return z}func main() { // 调用本地函数add a := 10 b := 20 ret := add(a, b) fmt.Println(ret)}
将上述程序编译成二进制文件——app1后运行,会输出结果30。
在app1程序中本地调用add函数的执行流程,可以理解为以下四个步骤。
将a和b的值压栈
通过函数指针找到add函数,进入函数取出栈中的值10和20,将其赋予x和y
计算x*y,并将结果存在z
将z ...
Ubuntu安装部署Gitlab详细教程
Ubuntu安装配置Gitlab详细步骤安装依赖打开终端,运行如下命令:
12345sudo apt updatesudo apt-get upgradesudo apt-get install curl openssh-server ca-certificates postfix
接下来会遇到如下界面,Tab切换到“确定”按钮,然后回车。
还是照样Tab切换到“确定”按钮,然后回车。
安装Gitlab先执行命令curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash(我这里不小心执行了两次,一次即可)
前往Gitlab官网:https://packages.gitlab.com/gitlab/gitlab-ce,找到最新版本的gitlab-ce安装包,注意版本是ubuntu/focal。
通过wget方式在线安装gitlab,复制wsgt下载命令。
安装命令:wget --content-disposition https://pa ...
Go语言性能优化建议与pprof性能调优详解
性能优化建议简介:
性能优化的前提是满足正确可靠、简洁清晰等质量因素
性能优化是综合评估,有时候时间效率和空间效率可能对立
针对Go语言特性,介绍Go相关的性能优化建议
Benchmark的使用性能表现需要实际数据衡量,Go语言提供了支持基准性能测试的benchmark工具。
示例:
123456789//fib.gopackage mainfunc Fib(n int) int { if n < 2 { return n } return Fib(n-1) + Fib(n-2)}
123456789101112//fib_test.gopackage mainimport ( "testing")func BenchmarkFib10(b *testing.B) { for i := 0; i < b.N; i++ { Fib(10) }}
benchmark 和普通的单元测试用例一样,都位于 _test ...
Windows安装配置Redis教程
虽然 Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub 来下载 Windows 版 Redis 安装包,下载地址:https://github.com/tporadowski/redis/releases。
注意:Windows 安装包是某位民间“大神”根据 Redis 源码改造的,并非 Redis 官方网站提供。
我们下载最新版——Redis-x64-xxx.zip压缩包到 F 盘,解压后,将文件夹重新命名为 Redis。
打开文件夹,内容如下:
打开一个 cmd 窗口 使用 cd 命令切换目录到 F:\Redis 运行:
1redis-server.exe redis.windows.conf
如果想方便的话,可以把 redis 的路径加到系统的环境变量里,这样就省得再输路径了,后面的那个 redis.windows.conf 可以省略,如果省略,会启用默认的。输入之后,会显示如下界面:
在用户变量的Path中配置redis的路径如下(建议配置,省时间):
这时候另启一个 cmd 窗口,原来的不要关闭,因为这是redis服务端。
切换到 r ...
beego框架开发文档
简介beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设计的一个框架。
架构beego 的整体设计架构如下所示:
beego 是基于八大独立的模块构建的,是一个高度解耦的框架。当初设计 beego 的时候就是考虑功能模块化,用户即使不使用 beego 的 HTTP 逻辑,也依旧可以使用这些独立模块,例如:你可以使用 cache 模块来做你的缓存逻辑;使用日志模块来记录你的操作信息;使用 config 模块来解析你各种格式的文件。所以 beego 不仅可以用于 HTTP 类的应用开发,在你的 socket 游戏开发中也是很有用的模块,这也是 beego 如此受欢迎的一个原因。大家如果玩过乐高的话,应该知道很多高级的东西都是一块一块的积木搭建出来的,而设计 beego 的时候,这些模块就是积木,高级机器人就是 beego。
执行逻辑既然 ...
第一次对github项目提PR请求——以修改casdoor项目的swagger文档为例
PR简介PR(Pull Request) 即拉取请求,是 GitHub 上进行协同开发的一种非常常用的方式。它的基本流程是:
开发者fork一个开源项目的代码库,将其克隆到本地。
在本地对代码进行修改、添加新功能等。
将本地修改后的代码push到开发者自己的代码库中。
在开源项目的代码库中,发起一个pull request,请求项目维护者将开发者的代码merge到项目主代码库中。
项目维护者review代码,如果没有问题则approve并merge该PR。
开发者的代码就正式成为了该开源项目的一部分。
fork 与clone接下来按照步骤,逐步进行。把casdoor的github代码fork到自己的仓库里,通过这种方法,开发者可以在fork后的代码库中进行修改、新增功能,然后通过pull request将代码贡献回原项目。
通过fork,你的仓库里就会多一个项目。
怎样对fork后的代码库进行修改呢?当然得将代码克隆到本地噻!右键点击空白处——你想保存该项目的路径下,用git打开:
然后克隆你的代码库到本地,在git上输入:
1git clone https://github ...
Gin+Gorm练手小项目bubble清单企业级结构剖析
概述本项目来源于Qimi老师的小清单项目——基于gin+gorm开发的练手小项目,通过该项目可初识go web开发该有的姿势。笔者对代码有些许修改,以下是项目成功运行的截图,主要功能有添加,删除,确认,查看待办事项等(所以是小项目啦~)
项目结构树这个项目虽然比较小,但是还是可以用企业级代码结构去划分,以下是项目结构树:
123456789├─controllers├─dao├─models├─routers├─static│ ├─css│ ├─fonts│ └─js└─template
划分项目结构,利于代码组织和可维护,也有利于团队协作。
后端源码main.go
12345678910111213141516171819202122232425package mainimport ( "bubble/dao" "bubble/models" "bubble/routers")func main() { err := dao.InitMySQL() if err != nil { panic(er ...
部署开源项目 Casdoor 身份认证管理系统到本地
前言Casdoor是一个基于OAuth 2.0、OIDC、SAML 和 CAS 的,UI-first的身份和访问管理(IAM)/单点登录(SSO)平台。使用 Go 和react开发,前后端分离,内置第三方应用登录。
Casdoor 有四个核心概念,分别是 组织(Organization),用户(User),应用(Application) 和 提供商(Provider)。组织承载用户和应用,一个用户只能隶属于一个组织,但可以登录到自己组织的多个应用中;而提供商则代表了某种身份验证方式,例如电子邮件验证、短信验证、OAuth 验证等。
部署 Casdoor安装要求操作系统支持所有主流的操作系统,包括Windows、Linux和macOS。
环境
Go 1.17+
Node.js LTS (16或14)
Yarn 1.x
强烈建议您使用 Yarn 1.x 运行 Casdoor 前端,使用 NPM可能会导致UI 风格问题。
注意:对于中国大陆用户,为了成功下载依赖关系包, 您需要通过配置 GOPROXY 环境变量来使用Go 代理。 We strongly recommend ...
npm和yarn换成淘宝源仍报错npm ERR! code ETIMEDOUT和info There appears to be trouble with your network......
问题阐述最近在本地部署一个前后端分离项目的时候遇到了这个问题,npm命令无法使用总是显示网络连接异常,由于官方源在国外,我于是配置国内淘宝镜像来提升下载速度:
1234#设置淘宝镜像源npm config set registry https://registry.npmmirror.com#检查是否设置成功npm get registry
同时也将yarn设置了淘宝镜像:
1234#设置淘宝镜像源yarn config set registry https://registry.npmmirror.com#检查是否设置成功yarn config get registry
当然也可以下载cgr镜像源管理工具(前提是你能用npm下载)来方便管理:
安装 cgr1npm install -g cgr
列出当前可用的镜像源
1cgr ls
1234npm ---- https://registry.npmjs.org/cnpm --- http://r.cnpmjs.org/taobao - https://registry.npmmirror.com/yarn --- htt ...
深入浅出Gorm(结合官方文档)
Gorm什么是ORMObject Relational Mapping:对象关系映射
结构体 和 SQL数据库存在映射,这个时候就有了ORM语句
一句话说:就是将数据库中的表数据和结构体进行对应的关系
ORM的优缺点优点:
提高开发效率
缺点:
牺牲执行性能【中间多了一个环节】
牺牲灵活性
弱化SQL能力
gorm介绍中文官方网站内含十分齐全的中文文档,有了它你甚至不需要再继续向下阅读本文。
gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。
安装12go get -u gorm.io/gormgo get -u gorm.io/driver/mysql
注意:
GORM 的开发已经迁移至 github.com/go-gorm,import 路径也修改为 gorm.io/gorm ,对于以前的项目,您可以继续使用 github.com/jinzhu/gorm
数据库驱动被拆分为独立的项目,例如:github.com/go-gorm/mysql,且它的 import 路径也变更为 gorm.io/driver ...