Golang
文章平均质量分 69
~庞贝
Go后端开发
展开
-
GoLang之并发编程-定时器
Timer:时间到了,执行只执行1次// 1.timer基本使用 timer1 := time . NewTimer(2 * time . Second) t1 := time . Now() fmt . Printf("t1:%v\n" , t1) //t1:2022-09-26 20:00:31.647493 +0800 CST m=+0.024507301 t2 :=原创 2022-09-26 20:54:49 · 1794 阅读 · 0 评论 -
常见的限流方式
什么是限流呢?限流是限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对于超过限制的流量,则通过拒绝服务的方式保证整体系统的可用性。根据限流作用范围,可以分为单机限流和分布式限流;根据限流方式,又分为计数器、滑动窗口、漏桶和令牌桶限流,下面我们对这块详细进行讲解。计数器是一种最简单限流算法,其原理就是:在一段时间间隔内,对请求进行计数,与阀值进行比较判断是否需要限流,一旦到了时间临界点,将计数器清零。程序执行逻辑:那么问题来了,如果有个需求对于某个接口 /query 每分钟最多允许访问 200原创 2022-06-02 20:42:54 · 818 阅读 · 0 评论 -
strings包和strconv包
目录前缀和后缀字符串包含关系判断子字符串或字符在父字符串中出现的位置(索引)字符串替换统计字符串出现次数重复字符串修改字符串大小写修剪字符串分割字符串拼接 slice 到字符串从字符串中读取内容字符串与其它类型的转换前缀和后缀HasPrefix 判断字符串 s 是否以 prefix 开头:strings.HasPrefix(s, prefix string) boolHasSuffix 判断字符串 s 是否以 suffix 结尾:strings.HasSuffix(s, suffix strin原创 2022-04-03 20:06:50 · 231 阅读 · 0 评论 -
了解kafka
目录KafkaKafka是什么什么是消息队列为什么要使用消息队列削峰填谷解耦异步消息队列的缺点消息队列的三大难题:消息的两种模型 Pull VS Push现在还有人用Redis写消息队列么?Kafka登场Kafka 的使用场景KafkaKafka是什么你可以将它作为消息队列使用,点对点或者发布订阅的模式都可以。你也可以将它作为消息引擎使用,实现信息流的管理。总之,他是传递消息的一个工具。那么,我们首先要知道的问题就是:它是怎么传递消息的。它的优势在哪里。它该怎么使用,怎么写代码。使用的原创 2022-04-01 10:03:21 · 1871 阅读 · 0 评论 -
Go互斥锁(Mutex)
目录Mutex状态正常模式和饥饿模式加锁和解锁小结MutexGo 语言的 sync.Mutex 由两个字段 state 和 sema 组成。其中 state 表示当前互斥锁的状态,而 sema 是用于控制锁状态的信号量。type Mutex struct { state int32 sema uint32}上述两个加起来只占 8 字节空间的结构体表示了 Go 语言中的互斥锁。状态互斥锁的状态比较复杂,如下图所示,最低三位分别表示 mutexLocked、mutexWoken 和 mut原创 2022-03-21 21:37:16 · 3566 阅读 · 2 评论 -
MySQL存储引擎
目录MySQL存储引擎官网5.7版本支持的10种存储引擎:InnoDB:特点InnoDB引擎调优事务(ACID)MyISAM:特点MyISAM引擎调优Memory特点索引结构B-Tree(B树)B+ Tree(B+树)为什么B+ 树比B 树更适合作为索引?HashInnoDB B+Tree结构来存储索引B+ 树可以存储多少行数据MyISAM B+Tree结构来存储索引MySQL存储引擎官网5.7版本支持的10种存储引擎:MyISAM: 拥有较高的插入,查询速度,但不支持事务InnoDB :5.5.原创 2022-03-20 21:33:24 · 156 阅读 · 0 评论 -
goblog后端代码的编写
goblog后端代码的编写目录结构目录goblog后端代码的编写目录结构使用技术├─ .gitignore│ go.mod // 项目依赖│ go.sum│ LICENSE│ main.go //主程序│ README.md│ ├─api ├─v1 ├─article.go ├─category.go ├─login.go ├─upload.go ├─user.go├─config // 项目配置入口 config.ini├─d原创 2022-03-20 10:59:31 · 537 阅读 · 0 评论 -
Bcrypt和Scrypt加密
目录Bcrypt加密:Scrypt加密Bcrypt加密:package mainimport ( "fmt" "golang.org/x/crypto/bcrypt")func HashPassword(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14) return string(bytes), err}fu原创 2022-03-17 14:04:02 · 1185 阅读 · 0 评论 -
Context介绍
目录Context设计原理默认上下文取消信号传值方法小结Context上下文 context.Context Go 语言中用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与 Goroutine 有比较密切的关系,是 Go 语言中独特的设计,在其他编程语言中我们很少见到类似的概念。context.Context 是 Go 语言在 1.7 版本中引入标准库的接口1,该接口定义了四个需要实现的方法,其中包括:Deadline — 返回 context.Context 被取消的时间,也就是完成工原创 2022-03-14 20:45:26 · 7189 阅读 · 0 评论 -
解决golang使用elastic连接elasticsearch时自动转换连接地址
解决golang使用elastic连接elasticsearch时自动转换连接地址 elastic.SetSniff(false)client, _ := elastic.NewClient( // ... // 将sniff设置为false后,便不会自动转换地址 elastic.SetSniff(false),)原创 2022-03-13 13:32:31 · 1726 阅读 · 0 评论 -
Elasticsearch中文分词插件安装以及运用案例
目录中文分词的安装分词调用中文分词案例创建索引中文分词的安装将elasticsearch-analysis-ik-5.6.2.zip解压到 /soft/elasticsearch-5.6.2/plugins/ik/下注意版本一致杀死es的进程ps -ef|grep Elasticsearch | grep -v grepkill xxxkill `ps -ef|grep Elasticsearch | grep -v grep|awk '{print &2}'`开启es和hea原创 2022-03-13 10:33:53 · 1354 阅读 · 0 评论 -
ElasticSearch head 安装
目录ElasticSearch head 安装1.安装xz2.安装node3.安装Git4.安装Head启动ElasticSearch head 安装更新yumsudo yum update -y由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。前期工作准环境1.安装xzyum install -y xz2.安装node1.下载压缩包;wget https://nodejs.org/dist/v10.16.3/node-v10.16.3原创 2022-03-13 10:31:51 · 2361 阅读 · 0 评论 -
ElasticSearch 增删改查
目录RESTful接口URL的格式的增删改查RESTful接URL的格式:添加查询修改删除复杂查询过滤查询(filter)range 范围过滤RESTful接口URL的格式的增删改查通过http形式发送请求对es进行操作RESTful接URL的格式:http://192.168.10.16:9200/<index>/<type>/[<id>]案例添加curl -XPUT 'http://118.178.242.230:9200/store/books/1原创 2022-03-12 18:06:32 · 645 阅读 · 0 评论 -
二叉树的遍历
目录前序遍历递归迭代中序遍历递归迭代后序遍历递归迭代前序遍历递归func preorderTraversal(root *TreeNode) (vals []int) { var preorder func(*TreeNode) preorder = func(node *TreeNode) { if node == nil { return } vals = append(vals, node.Val)原创 2022-03-10 22:10:35 · 195 阅读 · 0 评论 -
Elasticsearch介绍及安装
目录Elasticsearch介绍使用场景特点倒排索引核心概念近实时Cluster(机器)Node(结点)Index(索引-数据库)Type(类型表)Document(文档-行)Filed(字段-列)mapping(映射-约束)es存储es安装Elasticsearch介绍Elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api,接口、javapi.接口(还有其他语言的api接口)。Elasticsearch是一个实时分布式搜索和分析引擎。它用于全文搜索、结构化原创 2022-03-10 14:48:25 · 138 阅读 · 0 评论 -
Go并发编程
目录并发编程并发介绍进程和线程并发和并行并发并行协程和线程goroutine 只是由官方实现的超级"线程池"。并发不是并行:Goroutine使用goroutine启动单个goroutine启动多个goroutine注意goroutine与线程可增长的栈goroutine调度GPM模型Goroutine调度器的GMP模型的设计思想GMP模型有关P和M的个数问题P和M何时会被创建runtime包runtime.Gosched()runtime.Goexit()runtime.GOMAXPROCSChannel原创 2022-03-08 13:45:56 · 697 阅读 · 0 评论 -
golang反射
目录反射变量的内在机制反射的使用空接口与反射结构体与反射反射反射是指在程序运行期对程序本身进行访问和修改的能力变量的内在机制变量包含类型信息和值信息 var arr [10]int arr[0] = 10类型信息:是静态的元信息,是预先定义好的值信息:是程序运行过程中动态改变的反射的使用reflect包封装了反射相关的方法获取类型信息:reflect.TypeOf,是静态的获取值信息:reflect.ValueOf,是动态的空接口与反射反射可以在运行时动态获取程序的各种详细原创 2022-03-04 22:29:45 · 335 阅读 · 1 评论 -
Context标准库
目录Context为什么需要Context基本示例全局变量方式通道方式官方版的方案Context初识Context接口Background()和TODO()With系列函数WithCancelWithDeadlineWithTimeoutWithValue使用Context的注意事项客户端超时取消示例Context在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处原创 2022-03-04 22:28:34 · 358 阅读 · 0 评论 -
Http标准库
目录Httpnet/http介绍HTTP协议HTTP客户端GET请求示例带参数的GET请求示例Post请求示例自定义Client自定义Transport服务端默认的Server默认的Server示例自定义ServerHttpGo语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。net/http介绍HTTP协议超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计H原创 2022-03-04 22:27:35 · 473 阅读 · 0 评论 -
Strconv标准库
目录Strconvstrconv包基本数据类型和string的转换基本数据类型转stringstring转基本数据类型注意事项Atoi()Itoa()Parse系列函数ParseBool()ParseInt()ParseUnit()ParseFloat()代码示例Format系列函数FormatBool()FormatInt()FormatUint()FormatFloat()代码示例其他isPrint()CanBackquote()Strconvstrconv包strconv包实现了基本数据类型与其原创 2022-03-04 22:26:34 · 229 阅读 · 0 评论 -
Strconv标准库
目录Strconvstrconv包基本数据类型和string的转换基本数据类型转stringstring转基本数据类型注意事项Atoi()Itoa()Parse系列函数ParseBool()ParseInt()ParseUnit()ParseFloat()代码示例Format系列函数FormatBool()FormatInt()FormatUint()FormatFloat()代码示例其他isPrint()CanBackquote()Strconvstrconv包strconv包实现了基本数据类型与其原创 2022-03-03 21:45:13 · 228 阅读 · 0 评论 -
io标准库
IO操作输入输出的底层原理终端其实是一个文件,相关实例如下:os.Stdin:标准输入的文件实例,类型为*Fileos.Stdout:标准输出的文件实例,类型为*Fileos.Stderr:标准错误输出的文件实例,类型为*File文件操作相关APIfunc Create(name string) (file *File, err Error)根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666func NewFile(fd uintptr, name原创 2022-03-03 21:03:15 · 88 阅读 · 0 评论 -
log标准库
目录log使用Logger配置loggerflag选项配置日志前缀配置日志输出位置创建loggerlogGo语言内置的log包实现了简单的日志服务。本文介绍了标准库log的基本使用。使用Loggerlog包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln原创 2022-03-03 13:41:40 · 397 阅读 · 0 评论 -
flag标准库
目录flagos.Argsflag包基本使用导入flag包flag参数类型定义命令行flag参数flag.Type()flag.TypeVar()flag.Parse()flag其他函数完整示例定义使用flagGo语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。os.Args如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。package mainimport ( "fmt" "os")//o原创 2022-03-03 13:40:56 · 525 阅读 · 0 评论 -
time标准库
目录timetime包时间类型时间戳时间间隔时间操作AddSubEqualBeforeAfter定时器时间格式化解析字符串格式的时间time时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。time包time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。时间类型time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下:func timeDemo() { no原创 2022-03-02 22:02:46 · 155 阅读 · 0 评论 -
fmt标准库
目录常用标准库fmt向外输出PrintFprintSprintErrorf格式化占位符通用占位符布尔型整型浮点数与复数字符串和[]byte指针宽度标识符其他falg获取输入fmt.Scanfmt.Scanffmt.Scanlnbufio.NewReaderFscan系列Sscan系列常用标准库fmt向外输出PrintPrint系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。func原创 2022-03-02 21:06:15 · 778 阅读 · 0 评论 -
JWT(Golang)
目录JWT什么是JWT为什么要用JWT传统Session认证的弊端JWT认证的优势JWT结构1.Header2.Payload3.SignatureJWT的种类1.nonsecure JWT2.JWSGo的运用structmap生成解析tokenJWT什么是JWT在介绍JWT之前,我们先来回顾一下利用token进行用户身份验证的流程:客户端使用用户名和密码请求登录服务端收到请求,验证用户名和密码验证成功后,服务端会签发一个token,再把这个token返回给客户端客户端收到token后可以把原创 2022-03-02 20:02:46 · 3097 阅读 · 0 评论 -
Air实时加载
目录Air实时加载为什么需要实时加载?Air介绍安装AirGoMacOSLinuxWindowsDcoker使用Airair_example.conf示例Air实时加载本章我们要介绍一个神器——Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率。为什么需要实时加载?之前使用Python编写Web项目的时候,常见的Flask或Django框架都是支持实时加载的,你修改了项目代码之后,程序能够自动重新加载并执行(live-reload),这在日常的开原创 2022-03-02 16:39:06 · 163 阅读 · 0 评论 -
gopsuitl包的使用
目录gopsuitl包查看cpu信息获取CPU负载信息:内存信息(Memory)主机信息(Host)磁盘信息(Disk)网络信息(net IO)gopsuitl包查看cpu信息go get github.com/shirou/gopsutilgo.modmodule gowebProject/gopsutilgo 1.17require ( github.com/go-ole/go-ole v1.2.6 // indirect github.com/shirou/gopsut原创 2022-02-25 18:24:50 · 471 阅读 · 0 评论 -
etcd使用
etcd使用启动etcd.exe再cmd下设置环境变量如果使用etcdctl.exe来操作etcd要设置环境变量windowsSET ETCDCTL_AOP=3Mac和Linux export ETCDCTL_AOP=3存值、取值etcdctl.exe --endpoints=http://127.0.0.1:2379 put jt "dd"etcdctl.exe --endpoints=http://127.0.0.1:2379 get jtetcd不能导入的问题go原创 2022-02-23 21:44:47 · 743 阅读 · 0 评论 -
etcd包不能导入的问题
etcd包不能导入的问题go get go.etcd.io/etcd/clientv3导包后去出现下面的问题在go.mod添加replace google.golang.org/grpc => google.golang.org/grpc v1.26.0再导入即可:go get go.etcd.io/etcd/clientv3package mainimport ( "context" "fmt" "go.etcd.io/etcd/clientv3"原创 2022-02-23 21:21:15 · 299 阅读 · 0 评论 -
kafka
Kafka 教程Apache Kafka 是一个分布式发布-订阅消息系统,具有高吞吐、低延时、可扩展、容错以及持久化存储等特点,使用 Kafka 可以方便地构建分布式应用程序。Kafka 将消息保存在磁盘上,并在集群内复制以防止数据丢失。Kafka 建立在 ZooKeeper 同步服务之上,能与 Apache Storm 和 Spark 很好地集成,进行实时流数据分析。Apache Kafka 官网地址:https://kafka.apache.org/1. Kafka 简介Apache K原创 2022-02-23 18:08:28 · 1027 阅读 · 0 评论 -
初识kafka(kafka的使用)
目录kafka的使用:修改配置文件zookeeper.properties文件server.properties文件启动zookeeper启动kafka启动类:配置kafka启动消费者kafka的使用:修改配置文件zookeeper.properties文件server.properties文件启动zookeeper在kafka文件下启动命令窗口输入:.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.propert原创 2022-02-22 19:55:02 · 1013 阅读 · 0 评论 -
Golang学习资料推荐
文档推荐李文周博客:https://www.liwenzhou.com/archives/Go语言标准库:https://studygolang.com/pkgdocGo语言高级编程:https://chai2010.cn/advanced-go-programming-book/Golang中文学习质料:http://go.wuhaolin.cn/Go语言中文文档:https://www.topgoer.com/Go 语言编程之旅:https://golang2.eddycjy.com/Go原创 2022-02-20 18:03:41 · 1151 阅读 · 0 评论 -
golang的template
目录templatetext/template传入字符串传入结构体传入多个变量注释移除空格条件判断rangewith预定义函数比较函数自定义函数嵌套templateblock(模板继承)未用模板使用模板修改默认的标识符text/template与html/tempalte的区别templatetext/template定义模板解析模板渲染模板定义模板:<!doctype html><html lang="en"><head> <meta原创 2022-02-17 18:13:36 · 3286 阅读 · 2 评论 -
Golang日志
日志使用Loggerlog包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。例如,我们可以像下面的代码一样直接通过log包来调用上面提到的方法,默认它们会将日志信息打印到终端界面:package mai原创 2022-02-14 21:37:12 · 792 阅读 · 0 评论 -
Golang操作mysql
Golang操作mysql的crud原创 2022-02-13 21:11:20 · 3136 阅读 · 2 评论 -
Golang哈希表和二叉树的运用
递归,哈希表和二叉树的遍历原创 2022-02-13 14:59:08 · 240 阅读 · 0 评论 -
Golang栈
栈的介绍,以及栈实现一个简单的计算器原创 2022-02-12 19:27:42 · 1190 阅读 · 0 评论 -
Golang知识图谱
原创 2022-02-12 15:25:10 · 598 阅读 · 0 评论