golang基于代码注释生成swagger API文档并自动同步到yAPI 该功能参考github开源项目gin-swagger,github地址如下:https://github.com/swaggo/gin-swagger生成swagger文档编写代码注释代码注释的字段参考:https://swaggo.github.io/swaggo.io/declarative_comments_format/代码注释分为两种:General API Info API OperationGeneral API info 的注释需要放在main函数的前面编写,主要是对
Golang学习笔记——context包 说明Context上下文用于控制函数调用链,所有进入服务的请求需要创建Context,调用其他服务需要接受一个Context,Context需要在函数调用链中进行传播。使用WithCancel,WithDeadline,WithTimeout,WithVaule,可以从一个Context上派生出子Context,并得到CancelFunc。调用CancelFunc可以关闭子Context及其派生出来的Context。使用Context的程序需要遵循如下原则:1.不要将Context存储在结构当中,
Golang学习笔记-error包 常见用法 errors包 包含了常见的error构造及解析判断方法 func As(err error, target interface{}) bool 查找与目标匹配的 err 链中的第一个错误,如果是,则将目标设置为该错误值并返回 true。否则,它返回 false。 func Is(err, target error) bool 报告err中是否包含target error。 如果err与target相等或者err实现了Is(bool)方法使得当调用er..
Golang学习笔记-sync包 sync包使用 Cond:实现了条件变量,用于等待gorouting或者声明事件的发生。Cond在第一次使用后不可以被拷贝 Locker:一个接口,包含Lock()和Unlock()两个方法,用于代表一个能被加锁和解锁的对象。 Map:一个协程安全的map,map[interface{}]interface{},key和value均可以是任意类型。 Mutex:互斥锁 Once:当某个action仅希望被执行1次时使用sync.Once Pool:临时对象池 RWMutex:读写互斥锁..
C++ 11 智能指针 智能指针在头文件<memory>中定义。共包含4种:auto_ptr、unique_ptr、share_ptr以及weak_ptr。auto_ptr在C++98中定义,在C++11中引入unique_ptr后推荐使用unique_ptr替代auto_ptr。一、unique_ptr指针指向的内存空间不与其他指针共享。但可通过移动语义将所有权转移给其他的unique_ptr。无法将一个unique_ptr赋值给另一个unique_ptrunique_ptr<Un..
ubuntu 18.04 安装protobuf及protoc-gen-go 1.安装依赖apt-get install -y gcc g++ make pkg-config libtool autoconf automake2.下载protobuf源码// 下载最新源码git clone https://github.com/protocolbuffers/protobuf.git//如果下载指定release版本的,可以直接从github上下载3.编译cd protobuf./autogen.sh./configure
Golang配置私有仓库依赖 有些情况下,Golang项目所使用的部分中间件上传到gitlab上的私有仓库。在go项目中需要引用这些私有仓库的代码,需进行如下配置1.配置GOPRIVATE环境变量 go env -w GOPRIVATE=gitlab.xxx.com2.gitlab上生成access token进入Gitlab—>Settings—>Access Tokens,然后创建一个personal access token,这里权限最好选择只读(read_repository)。3.git...
基于sqlmock 进行gorm单元测试 在对数据库进行单元测试时,可以使用sqlmock模拟数据库的返回来进行测试,从而无需部署真是的数据库实例。本文记录了工作中遇到的一些场景,写得不好还请见谅sqlmock 地址:https://github.com/DATA-DOG/go-sqlmockgorm 地址:https://github.com/go-gorm/gorm1.基本使用 创建mock db, mock, err := sqlmock.New()if nil != err { t.Fat.......
epoll原理 转载地址:https://www.cnblogs.com/pluser/p/epoll_principles.html设想一个场景:有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收TCP包),也就是说在每一时刻进程只需要处理这100万连接中的一小部分连接。那么,如何才能高效的处理这种场景呢?进程是否在每次询问操作系统收集有事件发生的TCP连接时...
关于类成员的构造顺序 有这么一道题,求输出class CTestClass{public: CTestClass():c(3),b(c),a(b){} int a; int b; int c;}int main(){ CTestClass a; std::cout << a.a << "," << a.b &...
全局变量与静态变量的区别 (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。(c)具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用;静态全局变量的作用:(a)不必担心其它源文件使用相同变量名,彼此...
[转载]C++程序内存分区 C程序一般分为1.程序段:程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本.2.初始化过的数据:在程序运行值初已经对变量进行初始化的3.未初始化过的数据:在程序运行初未对变量进行初始化的数据4.堆(stack):存储局部,临时变量,在程序块开始时自动分配内存,结束时自动释放内存.存储函数的返回指针.5.栈(heap):存储动态内存分配,需要程序员手工分配,手工释放...
排序算法总结——C++实现(未完善) 一、排序算法的概述排序算法种类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。算法复杂度: 二、冒泡排序1.步骤前提条件:假设数组长度为n,目...
哈希算法相关梳理 1.基本概念哈希也成为“散列”:任意长度的输入,经过哈希算法变换成固定长度的输出。哈希值会产生碰撞,因为固定长度的哈希值表示的范围是有限的,但输入值的范围是无限的。通过原始数据通过相同的哈希算法可以计算出相同的哈希值,但是通过哈希值无法恢复原始数据不同的哈希算法,哈希值长度不同,但相同的哈希算法,哈希值长度固定。哈希值的长度越长越安全。(出现碰撞的概率越低)2.常用的哈希算法...
解决远程登陆mysql提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) mysql版本:5.7新安装的mysql数据库,输入mysql后提示:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)解决方法:1.在/etc下找到my.cnf,然后再最后一行添加skip-grant-tables,保存l2.此时跳过了密码检查,输入mysql可以直接...
mysql本地连接错误解决方法 在CentOS 7上安装Mysql,不知道怎么回事本地无法连接,输入mysql -u root -p 后提示的错误信息如下: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)经过从网上查找资料,原因为/var/lib/mhysql目录的权限问题。在终端输入指令:chown ...