自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(172)
  • 收藏
  • 关注

原创 通过 go module 引入`cleint-go`的正确姿势

1. 问题在项目上我喜欢通过go module做包管理,在使用的过程中会遇到各种导入包的因为版本问题无法正常使用的问题,这次遇到的问题如下:项目中引用了client-go包,执行完 go mod tidy 及 go mod vendor 后,运行程序发现程序无法运行,报错如下: cannot load k8s.io/api/auditregistration/v1alpha1…2. 刨根问底第一时间检查vendor目录下报错信息中的库是否存在,发现真的不存在,于是查看go.mod文件:requ

2021-05-14 20:13:10 840 1

原创 epel-release的作用解密

再我们平时使用 RHEL 系列 Linux 操作系统的时候,安装软件包通常需要安装一个 epel-release 的软件包,那这个包有什么用呢?EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。官方的rpm repository提供的rpm包也不够丰富,很多时候需要自己编译那太辛苦了,而EPEL恰恰可以解决这两方面的问题。EPEL 安装方法:[root@rand

2021-03-03 09:38:19 12126

原创 beego项目管理工具bee安装失败解决办法,总有一个适合你

因为墙的原因导致安装bee失败的解决办法,总有一个适合你。先来看两种常见的报错:第一种:$ go get -u github.com/beego/bee# cd C:\GOPATH\src\golang.org\x\text; git pull --ff-onlyfatal: unable to access 'https://go.googlesource.com/text/': Failed to connect to go.googlesource.com port 443: Timed.

2020-10-09 18:25:25 4861 1

原创 Go语言标准库学习之archive/zip——Go语言自带的文件压缩利器

在 Go 语言标准库中提供了 archive/zip 包用来进行文件的压缩和解压缩,正好最近工作中用到了这个库,在这里向大家介绍 zip 库的使用方法,希望对你有帮助。1. 主要方法介绍FileHeader 对象描述了 zip 文件中的一个文件信息,相关方法如下:FileInfoHeader// FileInfoHeader返回一个根据fi填写了部分字段的Header。// 因为os.FileInfo接口的Name方法只返回它描述的文件的无路径名,有可能需要将返回值的Name字段修改为文件.

2020-09-30 18:19:36 4002

原创 在Linux服务器上如何配置用户的sudo权限,教你配置如何让用户只能读写文件、上传文件、下载文件,但是不能删除文件

最近公司的中间件服务器因为同事的误操作,导致系统硬盘分区表丢失,系统直接挂掉了,好在最后恢复了,恢复后,老大有一个需求,想对中间件服务器做一下权限限制,之前大家都是以 admin 用户登陆的,它可以使用 root 用户的所有权限,但是现在我们想要让 admin 用户只能上传、下载文件,但是不能删除文件、重启系统,那么改怎么做呢?思路:刚看到这个需求,第一时间想到的是文件权限控制,但是仔细一想这样并不能满足需求,应为用户有了上传下载权限,必然就有删除文件的权限,于是我想到可以配置 sudo ,禁止 a.

2020-09-04 14:43:12 1571

原创 kubernetes 开发必须要知道的知识点—— API Group

在使用k8s进行服务的部署过程中我们会使用到Deployment、Service、Pod等资源,在 yaml 文件中我们需要指定对应的 API 版本,我们可以通过访问相应的接口来管理相应的资源信息,在 k8s 中为了提高 API 的可扩展性,采用了 API Groups 进行标识这些接口,在 client-go 源码中就是通过指定的 API Groups 来访问 k8s 集群的,这里向大家介绍 API Groups 都有哪些,希望对你有帮助。当前 k8s 支持两类 API Groups:1. Cor.

2020-09-03 23:42:08 3845

原创 如何通过Hash算法实现服务器节点的合理调度——通过Go语言实现一致性Hash算法

在分布式系统开发中,我们经常会遇到服务器负载均衡的问题,我们需要将用户的请求均匀的分摊到每一台服务器,从而保证系统资源的有效利用。那么如何将请求均匀的进行分配呢?比较常见的就是 Hash 算法了,但是普通的余数hash(hash(比如用户id)%服务器机器数)算法伸缩性很差,当新增或者下线服务器机器时候,用户id与服务器的映射关系会大量失效。一致性hash则利用hash环对其进行了改进。1. Hash 算法Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, .

2020-09-03 22:56:12 400

原创 open-falcon监控系统组件学习之——agent组件

agent是监控系统中比较重要的一块,小米的oprn-falcon采用rpc的方式与server端进行通信,点击agent可以看到源码,当然,后面随着代码commit,本文介绍的部分内容会与实际代码不同,但思路是不会变的。一、 Agent 模块启动流程1. flag参数main函数是整个agnet代码的入口,我们从这里开始进行分析。cfg := flag.String("c", "cfg.json", "configuration file")version := flag.Bool("v",.

2020-09-02 14:13:25 1249

原创 Go语言标准库学习之reflect——Go语言中如何通过反射获取interface{}类型数据的值、类型以及方法调用

在Go语言中我们常常会用到接口类型来编写万能程序,函数接收到参数后,我们需要分析出参数类型,这就需要用到类型反射了,这篇文章向大家介绍Go语言标准库 reflect 的使用,希望对你有帮助。一、interface和反射1. Go语言中类型设计原则学习反射前,我们先了解一下Golang关于类型设计的一些原则:变量包括(type,value)两部分。type包括static type和concrete type,简单来说static type是在编码看得见的类型(int、string、float.

2020-09-02 14:10:11 7525

原创 open-falcon监控系统组件学习之——judge组件

在 open-falcon 监控系统中,judge 模块负责告警判断,它会定期向 hbs 请求告警策略信息,然后将告警信息推送到 redis ,本文向大家介绍 judge 是如何进行告警诊断的,希望对你有帮助。阅读前需要了解的概念:1. 监控数据分类GAUGE:实测值,直接使用采集的原始数值,比如气温;COUNTER:记录连续增长的数据,只增不减。比如汽车行驶里程,网卡流出流量,cpu_idle等;DERIVE:变化率,类似COUNTER ,但是可增可减;GAUGE 类型的值在进行告警诊.

2020-08-27 18:15:17 1006

原创 open-falcon监控系统组件学习之——transfer组件

在open-falcon监控系统中,agent采集到数据后就会将数据上报的 transfer 组件,那transfer都做了什么呢?带着这个问题,我们一起学习transfer组件,希望对你有帮助。一、 transfer 启动的时候都做了什么同样我们从main函数入手,下面时main函数的执行流程:#mermaid-svg-AJRPKzW60NAb9hkn .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--merm.

2020-08-27 14:50:46 556

原创 超级详细的跨域问题解决方法指南——以gin框架为例,解决跨域问题

一、什么是跨域1. 同源策略所谓同源是指:域名、协议、端口相同,而浏览器实现了同源策略,这里引用百度百科的解释:同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。2. 同源策略分类同源策略分为两种:DOM 同源策略:禁止对不同源页面 DOM 进行操作。这里主要场景是 iframe 跨域的情况,不同域名的 ifram

2020-08-27 14:14:10 4843

原创 windows系统安装protocol buffer如何解决protoc-gen-go依赖包安装的一系列问题

今天在学习 protocol buffer 的时候遇到了 protoc-gen-go not find 的问题,我是在 windows10 系统中安装的 protoc ,在官网下载了安装包(包虽然很小,但是下载是真的慢),然后安装,以为万事大吉,结果报依赖的问题,这里记录下解决方法,希望对大叫有帮助。1. 先来看问题$ protoc --go_out=. hello.proto'protoc-gen-go' 不是内部或外部命令,也不是可运行的程序或批处理文件。--go_out: protoc-.

2020-08-24 10:47:51 3268

原创 Go语言标准库学习之container——Go语言如何实现单链表、循环链表、双向链表、堆

在 Go 语言中我们可以直接使用 container 标准库完成链表和堆操作,非常方便,我们不需要自己去实现这些方法,本文向大家介绍 container 库的使用方法,希望对你有帮助。一、双向链表1. ElementElement 中保存了链表的所有信息,我们来看一下源码:type Element struct { // 双链接元素列表中的下一个和上一个指针。 next, prev *Element // 此元素所属的链表。 list *List // value 中保存了链表的值 .

2020-08-19 11:42:22 344

原创 Go语言标准库学习之database/sql——数据库管理的利器

在Go语言标准库中提供了进行数据库操作的 database/sql 库,需要注意的是在使用 sql 库的时候需要导入数据库驱动。本文记录了 database/sql 标准库的学习笔记,希望对你有帮助。1. 数据库连接链接数据库只需要四步即可:#mermaid-svg-bDLD3V9aDVQFpofO .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;c.

2020-08-14 15:20:59 770

原创 Go语言标准库学习之strings——字符串格式化的利器

在 GO 语言中,我们可以使用 strings 标准库对字符串进行一系列操作,strings 标准库在日常的编程过程中是十分常用的,这里向大家介绍strings标准库的使用,希望对你有帮助。一、字符串切割1. 字符串前后端字符清理// 返回将s前后端所有cutset包含的utf-8码值都去掉的字符串。func Trim(s string, cutset string) string// 返回将s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。func TrimSpace(.

2020-08-03 17:14:13 800

原创 Go语言标准库学习之net——有趣的网络编程

在go语言标准库中,net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。本文向大家介绍net标准库的使用,希望对你有帮助。一、 服务端1. 解析地址在TCP服务端我们需要监听一个TCP地址,因此建立服务端前我们需要生成一个正确的TCP地址,这就需要用到下面的函数了。// ResolveTCPAddr函数会输出一个TCP连接地址和一个错误信息func ResolveTCPAddr(network, address string) (*TCPAddr.

2020-08-03 15:53:19 3352

原创 Go语言标准库学习之sync二(通过sync.Pool大幅度提升程序运行性能)

sync.pool对象在并发比较高的系统中是非常常见的,这篇博客向大家介绍sync包创建可复用的实例池的原理以及使用方法,希望对你有帮助。1. 池的内部工作流程我们调用sync.pool包中的方法的时候,init函数会自动注册一个清理pool对象的方法,该方法会在GC执行前被调用,所以Pool会在调用GC的时候性能较低(初始化的对象都被清理了,重新创建就会产生开销)。Pool只在两次GC之间是有效的,下面是官方的一张图,用来理解池的管理方式:对于我们创建的每个 sync.Pool,go 生成一.

2020-07-30 11:18:10 505 1

原创 Go语言标准库学习之os/signal——使用Go语言管理信号

os/signal包实现了对输入信号的访问。这个包只有两个重要方法,这里向大家介绍一下,希望对你有帮助。1. 信号的转发Notify函数让signal包将输入信号转发到c。如果没有列出要传递的信号,会将所有输入信号传递到c;否则只传递列出的输入信号。signal包不会为了向c发送信息而阻塞(就是说如果发送时c阻塞了,signal包会直接放弃):调用者应该保证c有足够的缓存空间可以跟上期望的信号频率。对使用单一信号用于通知的通道,缓存为1就足够了。可以使用同一通道多次调用Notify:每一次都会.

2020-07-21 11:11:14 1981 2

原创 Go语言标准库学习之encoding/gob——Go语言Gob流的管理

gob包是用来管理gob流的,它可以实现在编码器(发送器)和解码器(接收器)之间进行二进制数据流的发送,一般用来传递远端程序调用的参数和结果,比如net/rpc包就有用到这个。下面我们来学习以下gob标准库的使用,希望对你有帮助。一、主要函数介绍gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。与json编码格式相比,gob编码可以实现json所不支持的struct的方法序列化,利用g.

2020-07-21 10:10:05 2032

原创 Shell编程从入门到精通——基本文本处理(三)

这篇文章向大家介绍如何基本文本处理的四个命令,分别是cut、paste、join和tr,这四个命令可以完成对文本的切割拼接以及文本内容的替换,在Shell编程中经常会用到,希望对你有帮助。一、使用cut命令选取文本列cut命令可以从垂直方向上对文本进行操作,下面介绍cut命令的使用方法。1. cut命令及其语法cut命令的基本语法如下:cut option... [file]...在上面的语法中,option表示选项,cut命令常用的选项如下所列: -b: 只选择指定的字节。 -.

2020-07-20 22:12:15 232

原创 Go语言标准库学习之os/exec——执行系统命令

os/exec包提供了执行外部命令的方法,它包装了os.StartProcess函数以便更容易的修正输入和输出,使用管道连接I/O,以及作其它的一些调整。这里记录以下os/eexec包的学习笔记,希望对你有帮助。1. 执行外部命令外部执行命令都是Cmd对象的方法,我们先了解一下Cmd对象:type Cmd struct { // Path是将要执行的命令的路径。 // // 该字段不能为空,如为相对路径会相对于Dir字段。 Path string // Ar.

2020-07-20 11:33:47 835

原创 Go mod踩坑记

这篇博客向大家介绍,我再使用Go mod进行包管理中遇到的问题,持续更新,希望对你有帮助。1. Go mod 下载包报unrecognized的问题今天在一个开源项目上使用go mod进行包管理的时候遇到了下面的问题:golang.org/x/[email protected]: unrecognized import path "golang.org/x/sys"遇到类似的问题,我们可以通过匹配值proxy的方式进行处理(类似的方法,应该也可以,不.

2020-07-17 14:46:26 2498

原创 Go语言标准库学习之unsafe——不安全的标准库(不同类型指针之间的转换)

unsafe包提供了一些跳过go语言类型安全限制的操作。这个标准库用的比较少,这篇博客向大家介绍以下,如何使用unsafe包,希望对你有帮助。1. unsafe包介绍(1)两种重要类型ArbitraryType// ArbitraryType表示任意一种类型,但并非一个实际存在与unsafe包的类型。type ArbitraryType intPointer// Pointer类型用于表示任意类型的指针。type Pointer *ArbitraryType有4个特殊的只能.

2020-07-16 17:27:33 352

原创 Go语言标准库学习之net/rpc——Server/Client之间通信的秘密

RPC(Remote Procedure Call)远程过程调用,它可以使一台主机上的进程调用另一台主机的进程,由以访为其他若干个主机提供服务,也就是我们常说的C/S服务,Server与Client之间通过rpc方式进行通信。下面向大叫刨析以下net/rpc标准库,希望对你有帮助。一、Server和Client1. server(1)Server对象在Server对象中定义了互斥锁用来保护请求数据,另外还包含请求信息和返回的信息以及注册的服务。// Server represents an R.

2020-07-15 16:46:50 1689

原创 Go语言标准库学习之context——在go语言中如何使用context优雅的结束一个goroutine

在编程过程中我们经常会遇到context这个单词,他的中文翻译是上下文。所谓的上下文就是指语境,每一段程序都有很多的外部变量。只有想Add这种简单的函数才是没有外部变量的。一旦写的一段程序中有了外部变量,这段程序就是不完整的,不能独立运行,要想让他运行,就必须把所有的外部变量的值一个一个的全部传进去,这些值的集合就叫上下文。本文向大家介绍如何在go语言中使用上下文,希望对你有帮助。1. context包的四个重要方法在介绍context的四个重要方法前,我们先看一下Context接口:type.

2020-07-15 12:01:05 567

原创 Go语言标准库学习flag——很方便的编写自己的命令行程序

和其它语言一样,go语言也提供了用来接收命令行参数的功能(flag包),我们可以使用flag包很方便的写一些自定义的命令,就像cobra包一样,这里向大家介绍flag包的使用方法,如果项目需要复杂或更高级的命令行解析方式,可以使用 https://github.com/urfave/cli 或者 https://github.com/spf13/cobra 这两个强大的库。希望对你有帮助。一、flag自定义命令的步骤flag包自定义的步骤很简单,一般只需要两步:接收参数解析参数自定.

2020-07-14 14:38:22 737

原创 Shell编程从入门到精通——基本文本处理(二)

这篇博客,向大家介绍如何使用sort命令进行文本排序,以及如何进行文本统计。希望对你有帮助。一、使用sort命令对文本排序在Shell中很多数据是以文本的形式存在,因此,用户经常需要对这些文本进行排序,为此Shell提供了sort命令来完成这个任务。1. sort命令的基本用法Shell中sort命令有三种使用模式,分别是排序文本、检查文件是否已经排序以及合并文件,首先介绍一下如何使用sort命令进行文本排序,下面是sort命令的基本语法:sort [option]... [file]....

2020-07-09 10:14:13 170

原创 Shell编程从入门到精通——基本文本处理(一)

在Shell编程中用来做文本处理的命令有很多,第一部分,向大家介绍echo、文本的格式化输出、sort命令以及如何进行文本的统计,希望对你有帮助。一、使用echo输出文本行在Shell中使用echo命令输出文本是非常多见的,下面是echo命令的使用语法:echo [options] string...在上面的语法中,options表示命令选项,echo常用的命令选项比较少,如下:-n  不在最后自动换行-e  使用反斜杠的解释-E  抑制反斜杠的解释1.显示普通字符下面演示如何使用.

2020-07-05 10:52:20 363

原创 Go语言cobra库学习笔记——从入门到精通

Go语言中,我们可以使用cobra很方便的进行命令行工具的开发,kubelet命令就是使用这个库开发的。在这片博客中,我将会总结一下我学习cobra库的笔记,希望对你有帮助。点击这里可以进入cobra官方说明。一、安装cobra1. 安装cobrago get github.com/spf13/cobra/cobra将cobra下载完成后,GOPATH/bin目录会生成一个cobra可执行程序,通过这个程序我们可以初始化一个cobra代码框架。2. 初始化一个项目我们可以通过下面的命令初始化.

2020-07-03 17:12:22 6304 3

原创 Go语言标准库学习之sync一(go语言中的锁)

在go语言多线程编程的过程中,我们会遇到多线程进行资源读写的问题,在GO语言中我们可以使用channel进行控制,但是除了channel我们还可以通过sync库进行资源的读写控制,这也就是我们常说的锁。锁的作用就是某个协程(线程)在访问某个资源时先锁住,防止其它协程的访问,等访问完毕解锁后其他协程再来加锁进行访问。本文向记录了学习sync标准库的学习笔记,希望对你有帮助。一、互斥锁1.什么是互斥锁这里摘录百度百科的解释 :互斥锁是用来保证共享数据操作的完整性的。每个对象都对应于一个可称为" 互.

2020-07-02 16:00:41 586

原创 Go语言中的html/template标准库学习笔记一(template库的使用)

在MVC(model-view-controller)架构中,我们经常会用到模板文件,本片博文介绍html/template的使用方法,关于模板语法,请参考我的另一篇博客Go语言中的html/template标准库学习笔记一(template语法介绍)1.先介绍一下Template结构体// Template is a specialized Template from "text/template" that produces a safe// HTML document fragment.t.

2020-06-30 18:04:11 1255

原创 Go语言中的html/template标准库学习笔记二(template语法介绍)

在Go语言中,我们可以使用html/template标准库将多个html文件组合起来。大家可能会问,为什么要组合多个模板呢?下面通过举例来解答解答这个问题,顺便学习一下template语法。1. 字段操作这里的字段操作是指我们可以将自定义的内容替换模板文件的内容,当然这里不限文件类型,txt文件也是可以进行替换的,只不过html/template会有一些针对html模板非常实用的方法。{{ . }}在上面的语法中使用双括号括起来了一个点,点的两边有空格,这是模板语法必须要满足的格式,其中的点是可.

2020-06-29 16:34:14 1094

原创 让你轻松了解什么是HTTP协议,什么是URI

1.Http简介HTTP是一种无状态、由文本构成的请求-响应(request-response)协议,这种协议使用的是客户端-服务器(client-server)计算模型。请求-响应是两台计算机进行通信的基本方式,其中一台计算机会向另一台计算机发送请求,而接收到请求的计算机则会对请求进行响应。在客户端-服务端计算模型中,发送请求的一方(客户端)负责向返回响应的一方(服务器)发起会话,而服务端则负责为客户提供服务。在HTTP协议中,客户端也被称为用户代理(user-agent),而服务器则通常会被称为We

2020-06-24 15:44:50 805

原创 Go语言成长路线

2020-06-24 10:15:44 480

原创 Shell编程从入门到精通——正则表达式

所谓正则表达式就是用来描述某些字符串匹配规则的工具。一、什么是正则表达式在程序的设计过程中,用户不可避免的需要进行文本的操作,而处理文本信息的时候通过正则表达式匹配想要的字符,可以避免通过复杂的代码来过滤文本,从而可以大大提高程序的可读性。二、正则表达式基础1. 正则表达式原理通过正则表达式可以过滤文本,它通过定义一些列的元字符,通过元字符配合其他字符来表达一种规则,只有符合该规则的文本才能保留下来,不符合的就会被过滤掉。所谓元字符是指用来描述字符的字符。元字符的作用在于对字符表达式的内容、.

2020-06-14 21:58:43 468

原创 Shell编程从入门到精通——数组

在Shell编程中同样支持数组操作,我们可以在Shell脚本对数组进行增删改查。一、定义数组1. 通过指定元素值来定义数组在Shell中用户可以像其他编程语言一样通过元素值来定义数组,语法如下:array[key]=valuearray表示数组的名称,key参数表示数组元素的索引,通常是一个整数,value为元素的值,需要注意的是,数组的下标从零开始。#! /usr/bin/env bash#指定数组元素值array[1]=helloarray[3]=worldecho "${a.

2020-06-14 16:00:29 362

原创 Shell编程从入门到精通——函数

和其他编程语言一样,Shell语言中也存在函数,通过函数可已将实现某一任务的命令进行封装,可以提高程序的可读性和重用性。一、函数1.什么是函数函数就是将一组功能相对独立的代码集中起来形成一个代码块,这个代码块可以实现某个具体的功能。2.函数的定义在Shell中有两种定义函数的方法:function_name (){ statement1 statement2 ......}或者function function_name (){ stateme.

2020-06-12 10:43:13 444

原创 使用pip安装django,但是不能导入模块的解决方法

今天在win10系统安装django模块,使用的是pip安装的模式,但是安装后,导入模块一直提示找不到模块,经过一番探索终于找到问题的原因,在这里分享出来,希望对大家有帮助。1. 了解python环境变量刚开始学习python的时候,第一步就是进行python的安装,安装完成后我们需要将python的安装路径加入到path环境变量中,但是python导入模块时使用的环境变量并不是在path中查找的。我们使用python --help命令可以看到以下信息:我们可以看到python导入模块的路径是.

2020-06-02 11:45:15 3093 1

转载 带你探秘Session、Cookie、Token三者的关系

HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。1.在网上找到一张很好的图,描述了三者的关系。2. 什么是session3. 什么是cookie...

2020-05-27 11:24:35 191

空空如也

空空如也

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

TA关注的人

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