自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 问答 (1)
  • 收藏
  • 关注

原创 webstorm开发vue项目的配置

代码风格检查 eslint 配置让webstorm自动读取Eslint的配置。设置tab缩进为2格设置快捷键 command + option + L 格式化代码

2020-05-02 00:44:58 1235

原创 debain 安装python3

一、下载安装包wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz二、配置安装环境apt install -y libffi-dev 三、编译安装pythontar xvf Python-3.7.0.tar cd Python-3.7.0./configure --prefix=/usr/local/...

2020-04-23 10:29:01 763

原创 Caddy 源码阅读

CaddyCaddy 是一个go编写的web server。 类似于nginx。官网上是这么介绍的:Caddy is the HTTP/2 web server with automatic HTTPS. (说实话官网v1版本的介绍并不怎么清楚,反而是v2版本的介绍更明确)Caddy的作用Caddy simplifies your infrastructure. It takes car...

2020-03-01 22:22:35 1357

原创 golang 实现简单DNS服务器

简单的DNS服务器提供一个简单的可以查询域名和反向查询的DNS服务器。dig命令主要用来从 DNS 域名服务器查询主机地址信息。查找www.baidu.com的ip (A记录):命令:dig @127.0.0.1 www.baidu.com根据ip查找对应域名 (PTR记录):命令:dig @127.0.0.1 -x 220.181.38.150源码 :package mai...

2020-03-01 19:18:22 3874

原创 golang 文件服务器-命令行工具

背景经常进入容器操作,有时候会有在容器之间或在容器和本机之间传输文件的需求。于是用golang写了一个命令行工具,可以把当前目录启动为文件服务器的根目录。需要下载时就可以使用curl命令下载相应文件。fileserver项目地址: https://github.com/FengGeSe/fileserver使用帮助$ fileserver -h文件服务器Usage: fil...

2020-02-18 10:47:12 373

原创 golang 压测工具vegeta改造-支持自定义压测任务

背景之前在公司做压测工作的时候,使用了web压测工具vegeta。后续又接到过dns的性能压测、redis的性能压测等任务。http的压测工具vegeta并不能满足需求了。于是模仿vegeta的lib包写了attacker 这个项目。Attackerattacker是一个支持自定义任务的项目。 attacker模仿了vegeta的压测逻辑,支持自定义任务。可以按照指定的压测周期,压测频率执行...

2020-02-18 10:38:18 997

原创 golang 客户端/服务端(C/S) 模式的命令行工具(cobra)

背景做项目测试的时候,为了方便自己,用cobra写了一个测试用的命令行工具。比如帮我发一个http请求到被测服务上去, 拿到相应参数做校验和其他二次处理。 再比如连接数据库拿到相关记录,并人性化显示出来。这个命令行的测试工具节省了很多手工操作的成本,于是我推广给开发用,减少他们自测的成本。但是这个命令行工具更新迭代的很快,每次都得重新给开发新的命令。于是我将原本客户端的功能收敛到服务端,客户端...

2020-02-14 12:12:36 644

原创 golang日志框架zap

zap是uber开源的Go高性能日志库封装package logimport ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore")var ( logger *zap.Logger automicLevel = zap.NewAtomicLevelAt(zapcore.InfoLevel))func ini...

2019-12-10 18:34:52 1666

原创 docker 本地搭建mysql 5.7 开发环境

docker-compose.ymlversion: '3'services: mysql: image: mysql:5.7 container_name: mysql restart: always ports: - 0.0.0.0:3306:3306 environment: - MYSQL_ROOT_PASSWORD=...

2019-12-01 12:35:48 278

原创 golang 项目 Makefile demo

因为看到很多golang项目都使用Makefile来完成程序的编译运行,这里我也百度了一些博客,从别人写的Makefile中摘取了我经常用到的功能。整理记录如下:功能list:help help命令使用sed命令从Makefile中获取命令列表和注释build 通过ldflags蚕食编译时注入版本信息(golang 版本 项目版本 git commit 构件时间)build-...

2019-11-30 21:52:40 1160

原创 DNS 学习记录

前言目前使用k8s来构建公司的线下测试环境,需要修改coreDNS, 于是最近看博客了解了DNS相关知识,这里总结下记录成博客。如有错误,请在评论区留言,看到了会及时修改。DNS的作用ip是互联网上每个主机的唯一表示,是一串很长的数字,方便机器识别,却不方便人类记忆。于是DNS出现了,将难记的数字映射成域名。DNS和ip是多对多的关系。可以理解为一个ip或多个ip的别名。DNS的原理DN...

2019-09-18 14:40:57 1037

原创 基于go-kit开发的demo项目

go-kit demo基于go-kit的一个demo工程。项目地址: https://github.com/FengGeSe/demogo-kit: A standard library for microservices.目标支持多种协议和数据传输格式开闭原则中间件功能 pb+grpc json+http error处理 路由TODO dao层 容器部署...

2019-08-26 11:54:39 3866

原创 【源码解析】压测工具vegeta

序言之前做压测的时候,找到的一个go语言的http压测工具vegeta(贝吉塔)。 github地址:https://github.com/tsenart/vegeta 。

2019-08-19 16:21:06 2652

原创 【golang】优雅且安全的并发写slice或map

并发写 slice和map是不安全的【golang面试准备】验证map&slice并发不安全怎么能高并发写入?slice&map并发不安全,都是在写的时候发生的,那么就要保证同一时间只有一个gorutine来写这个slice或者map。有两种方式实现:加锁方式:n个goroutine都有可能执行写入操作,保证同一时间只能有一个在执行写操作。 加锁操作简单,适用于性能...

2019-07-18 18:52:54 10766 1

原创 【golang】make & new

newnew用来初始化变量并分配内存。它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配类型零值的指针。channel, func, map, slice等零值是nil。func main() { m := *new(map[int]int) // new返回指针 m[1] = 2 fmt.Println(m)}// Output:...

2019-07-18 08:57:48 2229 1

原创 【golang】验证map&slice并发不安全

并发安全golang的slice和map是常用的数据结构,为了降低性能损耗,slice和map并没有相应的设计来保证并发安全。slice验证非并发安全起n个goroutine并发的超slice中append数据,n个goroutine都结束后,打印slice的长度。package mainimport ( "fmt" "sync")func main() {...

2019-07-16 15:31:42 1436

原创 【golang】map

Mapmap[string]struct{}func main() { m := map[string]struct { Name string Age int }{ "wss": {"wss", 24}, } m["wss"].Age = 10 // Error: cannot assign to str...

2019-07-15 14:55:43 386

原创 【golang】数组和切片

数组和切片数组和切片的创建数组只声明但不初始化func main() { var a [2]int a[0] = 1 fmt.Println(a)}// Output:[1 0]ps: 数组声明时,所有元素默认值都是0。 一般很少这样做,尽量自己初始化。切片只声明但不初始化func main() { var a []int a...

2019-07-13 17:01:34 132

原创 【golang】字符串

字符串字符串底层是字节数组。遍历一个字符串。想当于遍历一个byte数组。如果字符串全都是英文字母的话,遍历字节数组也没啥问题。当字符串里含有中文、日文、表情符等内容的话,按照字节数组的遍历方式没有太大意义。golang中字符串的遍历有两种方式:for i byte=uintfunc main() { s := "你好hello" fmt.Println("len:", len(...

2019-07-13 16:26:15 200

原创 【golang】defer

deferdefer简介在Go语言中,可以使用关键字defer向函数注册退出调用,即主函数退出时,defer后的函数才被调用。defer语句的作用是不管程序是否出现异常,均在函数退出时自动执行相关代码。多个defer函数按照先进后出的顺序执行。defer特点参数的实时解析func test() { i := 0 defer fmt.Println(i) //输出0,...

2019-07-10 21:20:28 252

原创 golang - 验证互斥锁sync.Mutex是否生效的【错误】案例

package mainimport ( "fmt" "sync")var ( count int countGuard sync.Mutex wg sync.WaitGroup m = map[int]int{})func main() { wg.Add(1000) for i := 0; i < 1000; ...

2019-07-03 07:42:00 953

原创 Package libseccomp was not found in the pkg-config search path.

下载runc源码, 并执行make操作的时候,报错:Package libseccomp was not found in the pkg-config search path.Perhaps you should add the directory containing `libseccomp.pc'to the PKG_CONFIG_PATH environment variableN...

2019-06-13 09:08:16 4871 1

原创 【实现简单的容器】- namespace隔离和cgroup资源限制

上一篇 【实现简单的容器】- goalng实现namespace隔离的容器上一篇文章实现了六种namespace隔离的容器,本文将在这个基础上,使用cgroup给容器增加资源限制(内存和cpu时间片限制)。golang 实现package mainimport ( "bufio" "fmt" "io/ioutil" "os" "os/exec" "path" "strcon...

2019-06-06 14:04:45 1863 2

原创 【实现简单的容器】- goalng实现namespace隔离的容器

实现namespace隔离的容器继上一篇博客【实现简单的容器】- docker基础技术之namespace讲解和实现的5种namespace技术。 本文用简短的一段golang程序来实现6种namespace隔离后的容器。6种namespace 分别是syscall.CLONE_NEWUTS 隔离主机名和域名syscall.CLONE_NEWIPC 隔离进程间通信sy...

2019-05-31 00:18:52 1815 1

转载 【fork/exec /proc/self/exe: no such file or directory】namespace里面mount /proc 后,退出后要重新mount

根据mydocker项目实现了简单的docker后,发现在容器中mount /proc 后, 结束程序,再执行就会报错:{"level":"error","msg":"fork/exec /proc/self/exe: no such file or directory","time":"2019-05-30T20:49:35+08:00"}水平有限,不知道问题出在哪,于是去github上找...

2019-05-30 21:08:14 3391

原创 ubuntu Your kernel does not support swap limit capabilities.memory limit without swap

创建一个内存限制的容器的时候,docker报错:docker run -d -m 100m busybox Your kernel does not support swap limit capabilities.memory limit without swap

2019-05-30 00:25:10 985

原创 【实现简单的容器】- docker基础技术之namespace

简介docker是一个是用来linux namespace 和 cgroups 的虚拟化工具。下面几个小节学习linux namespace技术,以及使用golang实现。环境:ubuntu 16.04 LTSgolang 1.12.5ps: mac系统的syscall和linux上的有些不同。一、UTS Namespace 主机名和域名隔离UTS namespace用来隔...

2019-05-29 10:28:12 1402 2

原创 golang 爬楼梯算法(递归&非递归)

题目:递归方法递归实现的可读性高,实现简单。func ClimbStairs(n int) int { var count int = 0 Climb(0, n, &count) return count}// current 当前爬的楼梯数// n 目标楼梯数// count 计数func Climb( current, n int, count *int) {...

2019-05-13 21:05:21 944

原创 golang 实现简单的栈

第一种 基于[]inttype Stack []int// pushfunc (s *Stack) Push(a int) { *s = append(*s, a)}// popfunc (s *Stack) Pop() int { a := (*s)[len(*s)-1] *s = (*s)[:len(*s)-1] return a}// lenfunc (s *...

2019-05-13 20:56:46 466

原创 为什么选择了golang

学习经历大一两个学期来学习C++复杂而又全面的语法。重载、多继承、虚函数、纯虚函数、拷贝函数、构造函数、析构函数、友元函数、内联函数、模板。。。大二的时候学习了java, java的语法比C++少很多。垃圾回收不用开发人员考虑。用面向对象的思想来描述和解决问题。写代码的时候比C++简单了,但是感觉还是有些繁琐。面向对象并不是万能的,只能通过设计模式来弥补。大三的时候接触到了python. ...

2019-04-19 16:31:44 383

转载 golang reflect 判断是否为零值

在使用reflect的过程中,想让结构体的值根据tag中default的值来进行赋值操作。如果这个field本身有值,就不赋予默认值,如果是零值,则赋予默认值。没办法判断这个值有没有被赋值过,但可以判断是否是零值。原文地址https://studygolang.com/articles/12029?fr=sidebar...

2019-03-25 18:35:11 4577

转载 k8s 日志级别

k8s 相关组件启动时 -v参数指定的日志级别:--v=0 Generally useful for this to ALWAYS be visible to an operator.--v=1 A reasonable default log level if you don’t want verbosity.--v=2 Useful steady state informat...

2019-02-26 16:31:00 5780

转载 golang 超好用 json 解析包

介绍当遇到接收的json的结构不明确的时候,每次想获取json里面的字段,都要不断断言字段的类型,使用起来特别不方便。这里推荐一个第三方包https://github.com/tidwall/gjson使用go get -u github.com/tidwall/gjsonpackage mainimport "github.com/tidwall/gjson"const j...

2019-02-18 17:26:34 7676 2

原创 安装k8s Error initializing network controller: Error creating default "bridge" network

在安装好flanneld之后。修改docker配置,重启docker的过程中报错:journalctl -x -u dockerJan 24 11:54:53 myserver dockerd[11139]: time="2019-01-24T11:54:53.565543199+08:00" level=info msg="stopping event stream following gr...

2019-01-24 12:06:38 3563

原创 golang 错误: cannot use XXX literal (type XXX) as type XXX in assignment:XXX does not implement XXX

出错代码如下:package mainimport ( "fmt")type Speaker interface { Hello()}type User struct { Name string Age int}func (this *User) Hello() { fmt.Println("hello my name is", t...

2019-01-17 11:05:05 25876

原创 linux 设置中国时区

centos 7$ timedatectl list-timezones |grep Shanghai #查找中国时区的完整名称Asia/Shanghai$ timedatectl set-timezone Asia/Shanghai #其他时区以此类推

2018-12-30 10:33:20 2882

原创 k8s 1.13部署pod和node中无法ping同cluster ip

问题在node上和pod中无法ping通cluster ip节点之前的网络是kube-proxy管理的,检查kube-proxy 的配置[Unit]Description=Kubernetes ProxyAfter=network.target[Service]WorkingDirectory=/var/lib/kube-proxyExecStart=/usr/local/bi...

2018-12-25 22:15:47 8159 7

原创 linux 安装docker-compose

下载sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose添加执行权限sudo chmod +x /usr/local/bin/docker-compose...

2018-12-19 19:31:12 532 1

原创 安装docker (二进制文件)

下载各个版本的docker二进制安装包:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/下载docker-18.09.0版本wget https://download.docker.com/linux/static/stable/x86_64/docker-18.09.0.tgz安装新建脚本文件ins...

2018-12-19 19:14:03 1238

原创 算法: Find Pivot Index

Given an array of integers nums, write a method that returns the “pivot” index of this array.We define the pivot index as the index where the sum of the numbers to the left of the index is equal to t...

2018-12-03 13:18:01 416

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除