- 博客(115)
- 收藏
- 关注
原创 go mod机制详解
go mod 机制详解官方的定义:A module is a collection of related Go packages that are versioned together as a single unit. 一组package的集合,一起被标记版本,即是一个module一个项目中可以包含多个package,不管有多少个package,这个package都将随项目一起发布一个module的版本号规则必须遵循语义化规范(https://semver.org/)版本号必须使用格式v(majo
2020-11-13 13:43:19
15774
原创 gin路由拆分
gin的路由拆分一, gin路由拆分成多个文件当项目越来越大,所有的路由就不太适合放在一块了,将路由拆分为一个个单独的包// main.gofunc main(0){ r := gin.Default() routers.A(r) routers.B(r) if err := r.Run();err !=nil{ //... } }routes 文件夹下的A,B两个文件都注册了各自的路由// routes/first
2020-11-12 16:35:30
1214
原创 gin的路由算法流程
gin的路由算法gin的是路由算法其实就是一个Trie树(也就是前缀树). 有关数据结构的可以自己去网上找相关资料查看.1. 注册路由预处理我们在使用gin时通过下面的代码注册路由2. 普通注册router.POST("/somePost", func(context *gin.Context) { context.String(http.StatusOK, "some post") })3. 使用中间件注册router.Use(Logger())4.使用Gr
2020-11-12 11:33:11
595
原创 gin的contex的设计
gin.Context解析gin.Context主要由下面几部分组成(这里沿用源代码里面的注释)1. Metadata Management (我自己叫法:Key-Value)这个模块比较简单, 就是从gin.Context中Set Key-Value, 以及各种各样的Get方法, 如GetBool, GetString等实现这些功能也很简单, 其实就是一个map // Keys is a key/value pair exclusively for the context of each re
2020-11-12 10:41:01
583
2
原创 strongswan常用命令解析(二)
strongswan常用命令解析0 >ipsec reload //重新加载 ipsec.conf文件1 >ipsec rereadsecrets //重新加载ipsec.secrets2 >swanctl --reload-settings //重新加载strongswan.conf3 >ipsec rereadcacerts //重新加载ca证书4 >ipsec restart/start/stop //进程控制
2020-11-11 16:31:49
3442
原创 strongswan配置使用(一)
安装strongswanhttps://github.com/matfabia/strongswanstrongswan 的配置文件如下所示ipsec.conf //配置ipsec隧道信息ipsec.secerts //psk密钥 配置设备私钥证书 配置eap用户名和密码strongswan.conf //为strongswan提供所有组件配置ipsec.conf官网配置示例# ipsec.conf - strongSwan IPsec configuration file#
2020-11-11 14:59:30
16762
原创 strongwan与vpp的结合使用
该方案将vpp作为strongswan 的插件使用,实现vpp数据转发的加密安装VPP参考我的vpp环境搭建文档 startup.conf 配置文件添加socksvr { default }punt { socket /var/run/vpp/sw-vpp }安装strongswan# git clone strongswan安装依赖项# yum install –y gmp-devel# yum install gpe
2020-11-11 11:23:10
1116
原创 Etcd实现定时任务-租约机制(三)
Etcd 的租约机制 实现定时任务1 > 创建租约 example :60s (租约立刻开始倒计时)2 > 更改租约 (先回收,再创建租约)3 > 回收租约 回收租约对应的删除key4 > 续约 (再次创建新的租约,绑定到指定的key)实验:此 key 只让存在 60 s注意:* 租约创建在绑定key前就开始生效 !...
2020-11-06 10:15:37
928
原创 git rebase与git merge的区别
git rebase的原理以及其和git merge的区别是什么?切分支开发1 > 创建一个dev-jk 分支并推送到远程仓库git checkout -b dev-jkgit push origin dev-jk2 > 此时本地的git分支如下C1 <- C2(master) | dev-jk(HEAD)此时我们提交了三次commit,git分支如下C1 <- C2(master) | C3 <- C4
2020-11-05 10:40:13
213
原创 supervisor进程管理
supervisor的使用方法简介官网: http://supervisord.org/supervisor是一个允许用户监视和控制在linux操作系统的进程数量的客户端/服务器系统。由python语言编写,用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能安装#yum install supervisor#supervisord versionsupervisord的运行supervisord -c /etc/supervisord.conf参数-c <config-f
2020-11-04 16:49:55
288
原创 VScode升级后连接不上的问题
VScode升级后连接不上1.打开新建终端看看输出的错误问题2.提示的意思大概是由于升级了导致不匹配,此时删掉旧的,重新连接时,它会下载新的连接文件3.再次连接就没问题了
2020-08-31 10:29:08
985
1
原创 牛客网算法笔试:计算字符中含有某个字符的个数,不区分大小写
package mainimport ( "fmt")func main() { var check, c string fmt.Scan(&check, &c) var number int for _, info := range check { for _, c := range c { if c == info { ...
2020-08-11 17:23:15
276
原创 二分法查找
package mainimport ( "fmt")func binarySearch(s []int, number int) int { if len(s) <= 2 { if s[0] == number { return 0 } else if s[1] == number { return 1 } else {
2020-08-11 15:38:28
110
原创 go语言之命令行参数解析
#第一种:func main() { if len(os.Args)<0{ return } fmt.Printf("====%s====\n", os.Args[1]) fmt.Printf("====%s====\n", os.Args[2]) fmt.Printf("====%s====\n", os.Args[3]) fmt.Printf("%s\n
2020-08-11 15:27:10
1044
原创 冒泡排序与选择排序
GO: 冒泡排序 和 选择排序package mainimport ("fmt")//将每一个与所有对比一遍func selectionSort(array []int) { if len(array) <= 1 { return } for i := 0; i < len(array)-1; i++ { for j := i + 1; j < len(array); j++ {
2020-08-07 15:28:24
107
原创 go语言之并发Select深度理解
select的使用方法很像switch语句,但是select没有输入值,只用于信道操作。select用于多个信道的发送或者接收信道的操作中进行选择。语句会阻塞直到其中有信道可以操作,若有多个信道可以操作,会随机选择其中一个case执行。func service1(ch chan string) { time.Sleep(2 * time.Second) ch <- "from service1"} func service2(ch chan string) { time.
2020-08-07 14:26:34
478
原创 go语言之并发-信道深度理解
------------------------------信道是协程之间通信的管道,从一端发送数据,另一端接收数据----------------------------创建信道var c chan int // 方式一c := make(chan int) // 方式二使用关键字 chan 创建信道,声明时有类型,表明信道只允许该类型的数据传输。信道的零值为 nil。方式一:就声明了 nil 信道。nil 信道没什么作用,既不能发送数据也不能接受数据。方式二:使用 make 函数创建
2020-08-07 12:22:34
384
原创 go语言之并发协程
GO 的终极武器 - 并发协程并行:其实很好理解,就是同时执行的意思,在某一时间点能够执行多个任务。最简单的方式就是借助多线程或多进程,这样才可在同一时刻执行多个任务。单线程是永远无法达到并行状态的。并发:是在某一时间段内可以同时处理多个任务。它允许多个任务同时执行,这个同时指的就是一段时间内。单线程中多个任务以间隔执行实现并发。**总结:**多线程或多进程是并行的基础,但单线程也通过协程实现了并发。go通过协程实现并发,协程间靠信道通信。协程(Goroutine)可以理解成轻量级的线程,但与
2020-08-07 10:16:24
363
原创 go语言之可变参函数的深度理解
可变参函数的深度理解:函数接收的参数数目都是确定的。而可变参数函数的参数数目是不确定的如果一个函数的最后一个参数的表示形如:…Type,则该参数(形参)可以接受不同数目的参数(实参)func f(elems ...Type)需要注意的一点,只允许最后一个参数是可变参数Go 中的一些内置函数都是可变参数函数:例如:append()函数:func append(slice []Type, elems ...Type) []Types := []int{1,2,3}s = append(s,4
2020-08-05 15:54:01
573
原创 go语言之匿名函数
匿名函数:函数可以作为一个值,可以将函数赋给一个变量或者返回一个函数变量创建了一个匿名函数,赋给了一个全局变量add。Go 编译器会自动判别变量add的类型,这里是func(int, int) intvar add = func(a,b int) (r int) { r = a + b return}func main() { fmt.Println("a + b =",add(1,2))}匿名函数可以赋值,也可以立即执行:func main() { sum := func(
2020-08-05 15:01:48
320
原创 go语言之数组的深度理解
数组指针和指针数组:数组指针:我们可以声明一个指针变量,指向一个数组arr := []int{1,2,3}// 数组指针var ptr *[]int = &arr// 简写 ptr := &arr 指针数组:就是一个数组里面存放的都是指针x,y := 1,2var arrPtr = [5]*int{1:&x,3:&y} // 没有手动初始化的元素,已经自动初始化指针类型对应的零值 nilfmt.Println(*arrPtr[1]) // 输出
2020-08-05 14:39:22
171
原创 go语言之slice深度理解
创建空切片var s []intfmt.Println(s == nil) // 输出 truefmt.Println(len(s),cap(s)) // 输出:0 0//声明了一个nil切片s,其实,切片的零值就是nil//因为切片就是一个数组的引用。切片的类型在初始化时已经确认,就是[]Type,//上面的代码就声明了[]int类型的nil切片s。nil切片的指向底层数组的指针为nil------------------------------------------ 创建 空切片
2020-08-05 11:17:47
222
原创 go语言之map深度理解
Map存储的是无序的键值对集合//创建mapm := make(map[keyType]valueType)一,初始化mapmonth := make(map[string]int)month["January"] = 1month["February"] = 2month["March"] = 3------------------------------------------------- map 初始化 ---------------------------------------
2020-08-05 10:21:07
303
原创 go语言之递归实现斐波那bai契数列
前两个数之和为第三位数:F(1) = F(2) = n n < 2F(n) = F(n-1)+F(n-2) n >= 3以下为go递归实现 斐波那bai契数列:func fibonacci(n int)int { if n < 2 { return n } return fibonacci(n-1)+ fibonacci(n-2)}func main(){ for i :=0;i<10;i++{ fmt.Prin
2020-08-04 17:54:15
302
原创 nginx的https配置
#cat /etc/nginx/nginx.conf#For more information on configuration, see:#* Official English Documentation: http://nginx.org/en/docs/#* Official Russian Documentation: http://nginx.org/ru/docs/user nobody;worker_processes 1;error_log /var/log/nginx/
2020-07-29 09:49:39
231
原创 解决nginx问题的常用方法
路径问题:nginx的配置文件在 /etc/前端代码的在 /usr/share/nginx/html/#nginx –t //查看nginx配置文件的语法是否有误#tail -f error.log //查看nginx的日志输出正常启动状态 ps aux|grep nginx systemctl start nginx nginx.config server 端口8889 与conf.d 中的default.config端口80 冲突systemc
2020-07-28 18:28:55
299
原创 opsenssl数字证书自签名的使用
数字证书自签名SSL前导:使用centos自带的工具openssl一,生成私钥//输入密码为:jkwanga#openssl genrsa -des3 -out server.key 2048二,创建私钥成功:三,生成CSR(证书签名请求) 自签名 //jkwanga#openssl req -new -key server.key -out server.csr四,输入参数如下:#openssl req -new -key server.key -out server.csr
2020-07-28 18:21:01
330
原创 网站请求出现Referrer Policy: no-referrer-when-downgrade的问题
网站请求出现Referrer Policy: no-referrer-when-downgrade的问题#netstat –nap |grep 443 //查看端口信息#ps –ef |grep nginx //查看nginx是否启动#systemctl status nginx –l //查看nginx 的错误信息一般是跨域的问题检查nginx的启动是否正常此次是 https的证书位置忘记更改导致的nginx没启动起来...
2020-07-24 18:05:26
18086
2
原创 git安装以及连接gitlab
1, yum install git2,用户配置3,创建密码说明:回到你的linux机器,使用命令:cd ~回到当前用户的家目录下,然后使用命令:ssh-keygen -t rsa -C "邮箱地址”创建公钥和私钥对,如果提示-bashssh-keygen:command not found ,那么使用命令yum -y install openssh-clients安装openssh。接下来会有三个提示,一个是Enterfile in which to save the key(/roo
2020-07-23 18:35:08
757
原创 go语言之进程锁
程序开发的时候,为了避免程序多次启动,都会来个进程所的管制,保证你的程序只运行了一个程序启动会在指定的位置生成程序的.pid文件,程序结束该文件自动删除。但当程序多次启动就会检测到这个文件并报错代码如下: /*lock process*/ func lockProcess(){ lockFile := "/var/run/xxxxxx.pid" lock, err := os.Create(lockFile) if err != nil { log.E.
2020-07-23 11:16:58
1242
原创 gre的原理与配置
一,gre理解gre是一种传统的隧道协议技术,通过隧道连接的两个远程网络就如同直连,GRE在两个远程网络之间模拟出直连链路,实际上可以看作是虚拟的 点到点 连接的效果。隧道是一种封装技术,利用一种网络协议来传输另外一种网络协议,说百了就是利用一种网络协议将其它的协议封装在自己的报文中。如下图是gre的封装过程二,linux下gre的创建为两台服务器配置GRE隧道,隧道地址使用下。x.x.x.x/x网段。使得两台Linux的内网卡相互通信,从而打通两个内网,使得两个内网成为一个局域网。192.16
2020-07-22 18:23:51
4536
2
原创 Python json文件数据检测合并
Python 的json文件,合并检测解决方案:#! /bin/pythonimport impimport requestsimport jsonimport sysdef readfile(filepath): f = open(filepath, 'r') jdb = json.load(f) f.close() count = len(jdb['domains']) return jdb,countdef writefile(filepa
2020-07-22 10:50:10
430
原创 Chinaz网站排名爬取
#! /bin/pythonimport requestsimport jsonimport datetimeimport reimport sysfrom bs4 import BeautifulSoupdef excuteSpider(url,headers,session,): req = session.get(url, headers=headers) req.encoding = "utf-8" bsObj = BeautifulSoup(.
2020-07-22 10:14:16
2175
1
原创 Alexa网站排名爬取
Python 话说是一门面向监狱编程的语言,吾等不信,前来尝试。。。。开玩笑了,工作需要~前一段时间刚接触 Python 的时候,觉得有些不适应,特别是语法显得别扭,后来发现它和golang还是挺像的同样的包管理调用机制:python:同样也是包管理机制: import requestsyum install pippip install xxxx友好一点直接上代码:代码中自带解析值得一提的是Python的json数组处理真不方便 代码中有处理import requests /
2020-07-21 18:37:04
1037
2
原创 git clone下的包不能直接加载到项目中
git问题描述:golang 的开发是以包引用的机制,所以经常会用到第三地方的包。当你 git get/clone xxx 第三方的包时 编译无误,但是git push 却是一个空文件 提交代码到gitlab上 却是个空 的文件夹 导致别人pull下来编译报错原因:因为别人的包是一个项目,你自己的也是一个项目。解决方案:你把它当作包使用 应该把其 .git删掉,它是项目依赖。一个项目中只能有一个。...
2020-07-13 18:39:23
541
原创 go语言之程序中获取环境变量
“–————人与人之间还是直接点好——————”go如何通过程序中获取环境变量到达控制效果~如下是个测试程序,主要是用户通过启动程序前 设置环境变量root$ export LOG_NUMBER=3进而达到控制日志的等级的效果!其它功能可同理!func init() { if fileNumber := os.Getenv("LOG_NUMBER"); fileNumber != "" { toInt, err := strconv.Atoi(fileNumber) if e
2020-07-07 18:17:01
918
原创 mqtt客户端
“–————人与人之间还是直接点好——————” eclipse paho 是一个 Mqtt客户端库代码路径:git clone https://github.com/eclipse/paho.mqtt.c.git编译: cd paho.mqtt.c make安装: sudo make installTest paho_c_pub -t my_topic --connection localhost:1883 paho_c_sub -t my_topic --connection lo
2020-07-07 18:07:38
249
原创 go语言之日志,按文件大小日期轮询rotatelogs
“–————人与人之间还是直接点好——————”**为go的log 增加轮询的功能** 使日志自动 保存,清理 实现轮询的机制! 包地址: https://github.com/gggwvg/logrotate 具体参数信息如程序所示!package mainimport ( "time" "github.com/gggwvg/logrotate" "github.com/sirupsen/logrus")func main() { opts := []logrotat
2020-07-07 18:04:00
2456
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅