gin基础用法
目录常用结构图├── main.go:应用程序入口文件├── controllers:控制器目录,用于处理请求│ ├── home_controller.go:处理首页请求的控制器│ ├── user_controller.go:处理用户请求的控制器│ └── …├── models:模型目录,用于封装数据操作│ ├── user.go:用户模型,用于操作用户数据│ └── …├── routes:路由目录,用于配置路由│ ├── home_routes.go:配置首页路由│ ├── user_routes.go:配置用户路由│ └── …├── services:服务目录,用于封装业务逻辑│ ├── user_service.go:用户服务,用于处理用户相关业务逻辑│ └── …├── middlewares:中间件目录,用于处理请求前后的逻辑│ ├── auth.go:身份认证中间件,用于检查用户是否登录│ ├── logger.go:日志中间件,用于记录请求日志│ └── …├── static:静态文件目录,用于存放静态文件,如图片、CSS、JS等│ ├── css:CSS文件 ...
go基础语法总结
0、HelloWorld1234567package mainimport "fmt"func main() { fmt.Println("Hello, World!")}
这就是go语言,现在来逐行认识一下它
第1行:我们的Go程序是由包——package构成的,包的声明形式为:package <包名>。该行的意思是:当前HelloWorld.go文件属于main包。
第3行:如果你使用过Java或Python,那你对import肯定不陌生。该行的意思是:导入一个名为fmt的包。如果需要导入多个包,有两种写法:
123//第一种import "fmt"import "math"
或者使用分组形式同时导入多个包
12345//第二种import ( "fmt" "math/rand")
显然第二种使用括号,以分组的形式导入更加方便。
第5行:我们使用func关键字来声明一个函数,在这 ...
高并发下接口幂等性解决方案
背景我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果;2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题等等很多重要的情况都需要幂等的特性来支持。
幂等性概念幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。
技术方案1、查询操作: ...
git merge 和 git rebase
前言本文图片来自网络
git merge(下方运用对称的叙述手段来更好的说明)
首先, 需要明白的是
merge本质上是将其它分支从分叉点(如果两分支都有基于此分叉点的提交)至其最后的提交拿过来到我们的当前分支, diff对比后, 在全局视野下产生一个全新的commit项, 并移动当前分支的分支名至这个全新的commit项。
若diff需要处理冲突, 则新提交中包含的是所取分支的从分叉点至末尾的非全部内容。
若diff无需处理冲突, 则新提交中可能包含的是所取分支的从分叉点至末尾的全部内容。(因为某些新内容在两个分支上存在不谋而和的可能, 我们实际添加的仅是其它分支相比于当前新增的内容)
若diff无需处理冲突, 且两分支基于分叉点的所有新提交完全不重复, 则新提交中包含的是所取分支的从分叉点至末尾的全部内容。
tips: 我们的merge本质是从其它分支那东西过来。 因此执行merge命令前, 要注意我们当前所在的分支。
merge本质上是将其它分支从分叉点(如国两分支只有一方存在基于此分叉点的提交)至其最后的提交拿过来到我们的当前分支, 则merge会按其默认的快进 ...
Go 生成可执行文件
go build 命令go build fileName
常用12345-o: 指定编译生成的目标文件名-v: 编译时显示包名GOOS: 指定交叉系统编译生成其指定系统的可执行文件, 常用的有: windows、linux、darwinGOARCH: 指定交叉系统编译生成其指定架构的可执行文件,常用的有:amd64、arm
一般在go mod加持下, 直接对入口文件执行go build即可。如命令
GOOS=linux GOARCH=arm go build -o "哈哈哈" main.go
执行后假设有go.mod的以main.go为入口的项目文件所在目录,为当前目录, 即可得到编译后的可执行文件哈哈哈
再举个实际的makefile中的使用例子(主要是为了展示可选的芯片架构平台GOARCH,及可选的常用的操作系统GOOS):
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 ...
一分钟教你发布npm包
一分钟教你发布npm包在使用hexo时遇到了一些翻译相关的问题,由于是自身需求。因此需要把改好的js插件重新打包发布一下,又没接触过前端知识,故不太了解流程,也懒得去看文档。于是搜索简易的操作过程,发现此篇后教程后按步骤很快解决了发包的问题,故转载至此,啥时候再用到了也方便查看
文章简介:
1、摘要:什么是npm?
2、如何发布一个自己的npm包
3、发布错误集锦
摘要:什么是npm?npm是javascript著名的包管理工具,是前端模块化下的一个标志性产物
简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率
和移动端开发中,iOS使用的Cocoapods,Android使用的maven有异曲同工之妙。
如何发布一个自己的npm包1、创建一个npm的账号
发布包之前你必须要注册一个npm的账号
2、初始化一个简单的项目发布
a、本地创建一个文件夹:例如:z-tool
b、执行命令进入目录: cd z-tool
c、执行npm init初始化项目。默认一路回车就行
123456789101112131415161718192021222324252627282930 ...
oracle入门
本笔记用vnote书写,格式有点飘,不过在vnote上浏览还是很清晰的,不打算整理,故放于此处
oracle入门一、介绍oracle比mysql的复杂之处1、MySQL 数据库
概念mysql单个用户可创建的多个数据库。database是一个变量(url中标红处)。
图片解析)
2、oracle 数据库
概念oracle数据库是数据的物理存储。包括(数据文件ORA或者DBF、控制文件、联机日志文件、参数文件)。其实Oracle数据库的概念和其他数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大的数据库。用户是一个变量。
图片解析
实例:在oracle的数据库中,可以有多个实例,通常只用一个实例
用户:一个实例下可以有多个用户,和多个表空间,每个用户需要有一个默认表空间(可以多个用户公用一个默认表空间,天然隔离不需要加锁访问)
表空间:一个实例下可以有多个表空间,表空间是逻辑概念,一个表空间对应着一个或多个物理存储文件(.dbf或.ora)。
用户和表空间的关系:一个用户有一个默认表空间。而且一个表空间是可以为多个用户作为默 ...
Linux配置文件路径
Linux配置文件路径
用户文件
12/etc/passwd -> 存放账户信息/etc/shadow -> 存放用户密码
组群文件
12/etc/group -> 存放组群信息/etc/gshadow -> 存放组群密码
系统配置
12345678910111213141516/etc/rc.d/init.d -> 用于放置几乎所有服务的启动脚本/etc/profile -> 系统环境/etc/bashrc -> 系统变量/etc/hosts 或者 /etc/sysconfig/network -> 修改主机名/etc/inittab -> 设置默认启动级别/etc/aliases -> 别名配置文件/boot/grub/grub.conf -> 内核启动配置/etc/fstab -> 挂载文件系统/etc/sysconfig/i18n -> ...

.png)