Golang?strings包常用字符串操作函数
目录func Contains
func HasPrefix
func HasSuffix
func Replace
func Split
func ToLower
func ToUpper
func Repeat
func Count
func Index
func Join
在编写代码的时候最...[2021/12/17]
go语言处理TCP拆包/粘包的具体实现
目录part 1
part 2
part 3
part 1
最近在学习go自带的rpc,看完了一遍想着自己实现一个codec,也就是自定义消息的序列化和反序列化。消息的序列化和反序列化涉及到两步:
1、从网络中读取数据和将数据写到网络中;
2、根据拿到的二进制数据反序列化以及把现有...[2021/12/9]
go语言中五种字符串的拼接方式(小结)
目录+拼接方式
sprintf函数
Join函数
buffer.Builderbuffer.WriteString函数
buffer.Builder函数
ps:直接使用运算符
主要结论
+拼接方式
这种方式是我在写golang经常用的方式,go语言用+拼接,php使用.拼接,不过由于gol...[2021/12/9]
golang中gin框架接入jwt使用token验证身份golang中gin框架接入jwt使用token验证身份
目录jwt
流程:
1.token 工具类
2. 使用该中间件
3. controller部分代码
jwt
jwt的原理和se ion有点相像,其目的是为了解决rest api中无状态性
因为rest接口,需要权限校验。但是又不能每个请求都把用户名密码传入,因此产生了这个token的方...[2021/12/9]
Go与C语言的互操作实现Go与C语言的互操作实现
目录一、Go调用C代码的原理
二、在Go中使用C语言的类型
1、原生类型
数值类型
指针类型
字符串类型
数组类型
2、自定义类型
枚举(enum)结构体(struct)联合体(union)
typedef
三、Go中访问C的变量和函数
四、C中使用Go函数
五、其他
Go有强烈的C背景,除了语法...[2021/12/9]
go gin+token(JWT)验证实现登陆验证
1.准备
go get github.com/dgrijalva/jwt-go
go get github.com/gin-gonic/gin
?2.代码
package main
import (
"errors"
"fmt"
"github.c...[2021/12/9]
使用Go HTTP客户端打造高性能服务
目录问题一:默认的 HTTP Client
问题二:默认的 Http Transport
总结
HTTP(超文本传输协议)是一种用于客户端和服务器之间传输数据的通信协议。如果想要访问服务器资源,HTTP 请求是必不可少的。Go 语言里,net/http 包附带了默认配置,我们可以适当调整便可以获得...[2021/12/9]
GO语言临界资源安全问题的深入理解GO语言临界资源安全问题的深入理解
目录一、临界资源二、临界资源安全问题三、临界资源安全问题的解决四、写在最后 一、临界资源
临界资源: 指并发环境中多个进程/线程/协程共享的资源。
但是在并发编程中对临界资源的处理不当, 往往会导致数据不一致的问题。
示例代码:
package main
?
import...[2021/12/9]
使用Go实现TLS服务器和客户端的示例使用Go实现TLS服务器和客户端的示例
传输层安全协议(Transport Layer Security,缩写:TLS),及其前身安全套接层(Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
SSL包含记录层(Record Layer)和传输层,记录层协议确定了传输...[2021/12/8]
go语言生成随机数和随机字符串的实现方法
目录生成随机数
生成随机字符串
生成随机数
随机数的生成是计算机科学的一个研究领域,同时也是一种艺术。这是因为计算机是纯粹的逻辑机器,所以使用计算机生成随机数异常困难!
你可以用 math/rand 包来生成随机数。开始生成随机数之前首先需要一个种子,种子用于整个过程的初始化,它相当重...[2021/12/8]
Golang两行代码实现发送钉钉机器人消息
废话不多说, 先看代码
创建一个钉钉机器人, 必须使用加签方式
1. 安装 ding 模块包
go get -u github.com/wanghuiyt/ding
2. 普通群消息使用
使用你自己生成的Acce Token和Secret
d := ding...[2021/12/8]
CMD下执行Go出现中文乱码的解决方法
目录1、报错信息如下2、原因分析3、解决方法4、封装处理乱码方法5、解决乱码完整代码 1、报错信息如下
2、原因分析
因为Go的编码是UTF-8,而CMD的活动页是cp936(GBK),因此产生乱码。在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.ex...[2021/12/8]
Go语言实现一个简单生产者消费者模型Go语言实现一个简单生产者消费者模型
目录一、生产者消费者模型二、Go语言实现1、无缓冲channel2、有缓冲channel三、实际应用 简介:介绍生产者消费者模型,及go简单实现的demo。
一、生产者消费者模型
生产者消费者模型:某个模块(函数等〉负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、...[2021/12/8]
几个小技巧帮你实现Golang永久阻塞
目录使用 sync.WaitGroup
空 select
死循环
用 sync.Mutex
os.Signal
空 channel 或者 nil channel
总结
参考
Go 的运行时的当前设计,假定程序员自己负责检测何时终止一个 goroutine 以及何时终止该程序。可以通过调用 os.E...[2021/12/8]
基于Go语言实现的简易api网关的示例代码
浏览器的请求去请求目标地址,然后获得结果它再发送给浏览器。对于Go语言来说,实现转发只需要简单的一行代码即可实现,如下所示:
httputil.NewSingleHostReverseProxy(addre )
基于此功能,进行简单包装,实现从远端admin管理中心获取需要...[2021/12/8]
Golang打包配置文件的实现示例
目录背景
实现
工具
打包
调用
总结
众所周知,Golang 适合写 CLI 工具,但你可能还不知道 Golang 还可以打包配置文件。
背景
最近在写一个涉及到管理阿里云 ECS 的 CLI 工具,这里当然就要考虑阿里云资源使用的安全性了,要求阿里云账号的 Acce KeyId 和...[2021/12/8]
golang开发安装go-torch火焰图操作步骤
目录安装使用另一种自定义显示方式代码修改使用查看 安装
1、 安装go-torch
go get github...[2021/11/16]
golang开发及数字证书研究分享
目录私钥的生成RSAECDSADSA给私钥上锁(加访问密码)生成证书请求go对dsa类型的证书生成证书坑设置CA签名算法的选择代码时间 在go语言提供的系统包中包含了大量和数字证书有关的方法。在这些方法中就有私钥生成的方法、私钥解析的方法、证书请求生成的方法、证书生成的方法等等。通过这些方法应该能够...[2021/11/16]
Golang开发Go依赖管理工具dep安装验证实现过程
目录Go依赖管理工具环境要求目前版本安装验证初始化默认初始化优先从$GOPATH初始化Gopkg.tomlGopkg.lock常用命令dep ensuredep ensure -adddep ensure -update Go依赖管理工具
Go dependency management tool...[2021/11/16]
Golang 语言极简类型转换库cast的使用详解
目录01 介绍02 转换为字符串类型03 总结 01 介绍
在 Golang 语言项目开发中,因为 Golang 语言是强类型,所以经常会使用到类型转换。本文我们介绍类型转换三方库 - github.com pf13/cast ,它是一个极简类型转换的三方库,通过它提供的函数,可以方便我们进行类...[2021/11/15]
golang编程开发使用sort排序示例详解
golang sort package: https: tudygolang.com/article 3360
sort 操作的对象通常是一个 slice,需要满足三个基本的接口,并且能够使用整数来索引
A type, typically a collection, that ...[2021/11/15]
Go语言编程学习golang配置golint
目录下载golint打开setting对话框设置一个快捷键 下载golint
下载golang 的 lint,下载地址:https: github.com/golang/lint
mkdir -p $GOPATH rc/golang.org/x/
cd $GOPATH rc/gol...[2021/11/15]
Go语言七篇入门教程六网络编程
目录1. Socket 编程1.1 Dial()函数2. HTTP 编程2.1 HTTP 客户端2.2 HTTP 服务端2.2.1 处理 HTTP 请求3. RPC 编程3.1 Go 语言中的 RPC 支持与处理3.2 Gob 简介3.3 设计优雅的 RPC 接口如何学习Go 1. Socket 编...[2021/11/9]
Go语言七篇入门教程七GC垃圾回收三色标记
目录GC如何判断一个对象是否可达
三色标记法原理如下如何学习Go GC
GC全称Garbage Collection
目前主流的垃圾回收算法有两类,分别是追踪式垃圾回收算法(Tracing garbage collection)和引用计数法( Reference counting )。
而...[2021/11/9]
golang语言中wasm 环境搭建的过程详解
golang 安装
通过官方地址 下载。MacOS 也可通过 brew 快速安装:
$ brew install golang
$ go version
go version go1.17.2 darwin/arm64
golang 环境测试
新建文件 main...[2021/11/9]
Go语言小白入门刷题打印输出沙漏
目录题解思路代码如下 题解
【PTA团体程序设计天梯赛】 L1-002 打印沙漏 (20 分) Go语言|Golang
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***...[2021/11/9]
Golang语言学习拿捏Go反射示例教程
目录1. 反射简介1.1 反射是什么?1.2 为什么需要反射?2. reflect包2.1 基本反射2.2 反射与指针2.3 反射与对象2.4 反射与函数2.5 反射例子3. 总结 1. 反射简介
1.1 反射是什么?
Go语言提供了一种机制在运行时更新和检查变量的值、调用变量的方法和变量支...[2021/11/9]
使用Go语言解决Scan空格结束输入问题
目录问题ScanScanfScanln解决 问题
Go语言的输入Scan,无论是Scanf,还是Scanln还是其他,都是以空格结束输入的。
但是我们输入可能是带空格的。
比如 Fan One 666
Scan
var msg string
_,_ =fmt.Scan(&...[2021/11/9]
解析golang 标准库template的代码生成方法
curd-gen 项目
curd-gen 项目的创建本来是为了做为 illuminant 项目的一个工具,用来生成前端增删改查页面中的基本代码。
最近,随着 antd Pro v5 的升级,将项目进行了升级,现在生成的都是 ts 代码。这个项目的自动生成代码都是基于 golang 的标准库 ...[2021/11/8]
解析golang中的并发安全和锁问题解析golang中的并发安全和锁问题
1. 并发安全
package main
import (
"fmt"
"sync"
)
var (
sum int
wg sync.WaitGroup
)
func test() {
for i := 0; ...[2021/11/8]
Golang通脉之类型定义
目录1、自定义类型2、类型定义2.1 定义结构体2.2 定义接口2.3 定义其他的新类型2.4 定义函数的类型3、类型别名4、类型定义和类型别名的区别5、非本地类型不能定义方法6、在结构体成员嵌入时使用别名 1、自定义类型
在Go语言中有一些基本的数据类型,如 string 、 整型 、 浮点型...[2021/10/25]
golang中接口对象的转型两种方式golang中接口对象的转型两种方式
接口对象的转型有两种方式:
1. 方式一:instance,ok:=接口对象.(实际类型)
如果该接口对象是对应的实际类型,那么instance就是转型之后对象,ok的值为true
配合if...else if...使用
2. 方式二:
接口对象.(type)
...[2021/10/11]
Go语言的接口详解
目录1、接口的用途2、类型断言3、类型选择4、空接口5、匿名空接口6、实现多个接口7、接口嵌套8、接口零值9、make和new的区别总结 接口就是一系列方法的集合(规范行为)
在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为,规范子类对象的行为。
在 Go 语言中的接口是非侵入式...[2021/10/11]
Go语言并发编程之互斥锁Mutex和读写锁RWMutex
目录一、互斥锁Mutex1、Mutex介绍2、Mutex使用实例二、读写锁RWMutex1、RWMutex介绍2、RWMutex使用实例 在并发编程中,多个Goroutine访问同一块内存资源时可能会出现竞态条件,我们需要在临界区中使用适当的同步操作来以避免竞态条件。Go 语言中提供了很多同步工具,...[2021/10/8]
Go语言--切片(Slice)详解
目录一、定义切片1、声明一个未指定大小的数组来定义切片2、使用make()函数来创建切片二、切片是可索引的1、len() 和 cap() 函数三、切片截取四、增加切片的容量 说明:
Go 语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一...[2021/10/8]
Go 泛型和非泛型代码详解
目录1. 开启泛型2.无泛型代码和泛型代码2.1. AddSlice2.2. 带方法的约束 StringConstraint 1. 开启泛型
在 Go1.17 版本中,可以通过:
export GOFLAGS="-gcflags=-G=3"
或者在编译运行程序时加上...[2021/10/8]
Go 语言中的死锁问题解决
目录死锁
如何避免死锁死锁代码
死锁
死锁的4个条件
不可剥夺
线程已经获得的资源,在未使用完之前,不能被其他线程剥夺,只能在使用完后自己释放。
请求保持
线程 T1 保持了一个资源 R1 占用,但是又提出另外一个资源 R2 请求,此时,资源 R...[2021/8/26]
Go语言实现Base64、Base58编码与解码
目录1. 常见的编码
2. go语言实现base64的编码与解码
2.1 Base64编码原理
2.2 实现Base64的编码与解码
3. go语言实现base58编码与解码
3.1 base58的编码过程3.2 base58编解码具体实现
4. 最后 1. 常见的编码
base64:26个...[2021/7/26]
Go语言死锁与goroutine泄露问题的解决Go语言死锁与goroutine泄露问题的解决
目录什么时候会导致死锁
发送单个值时的死锁
多个值发送的死锁
解决多值发送死锁
应该先发送还是先接收
goroutine 泄漏
如何发现泄露
小结
什么时候会导致死锁
在计算机组成原理里说过 死锁有三个必要条件他们分别是 循环等待、资源共享、非抢占式,在并发中出现通道死锁只有两种情况:
...[2021/7/26]
浅析golang开发Error的使用详解
Error是Go语言开发中最基础也是最重要的部分,跟其他语言的try catch的作用基本一致,想想在PHP JAVA开发中,try catch 不会使用,或者使用不灵活,就无法感知到程序运行中出现了什么错误,是特别可怕的一件事。
Error 基础
Golang中 error类型就是一个最基...[2021/7/21]
Mac下Vs code配置Go语言环境的详细过程Mac下Vs code配置Go语言环境的详细过程
背景:最近受朋友介绍,学习Go语言。那么开始吧,首先从配置环境开始。
电脑:Mac Air,Vs code已经安装
一、Go下载和安装
下载地址:https: golang.google.cn/dl/
Mac版选择pkg,下载就可以直接安装了。其他类似操作,具体也可查找相关信息
二...[2021/7/19]
简单聊一聊Go语言中的数组和切片
目录1. 数组
2. 切片(Slice)
append 函数
总结 1. 数组
数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,因此在 Go 语言中很少直接使用数组。和数组对应的类型是 Slice(切片),它是可以增长和收缩的动态序列,...[2021/7/19]
Go并发控制WaitGroup的使用场景分析
1. 前言
上一篇介绍了 Go并发控制--Channel
使用channel来控制子协程的优点是实现简单,缺点是当需要大量创建协程时就需要有相同数量的channel,而且对于子协程继续派生出来的协程不方便控制。
2. 使用WaitGroup控制
WaitGroup,可理解为Wait-G...[2021/7/12]
Go并发控制Channel使用场景分析
1. 前言
channel一个类型管道,通过它可以在goroutine之间发送和接收消息。它是Golang在语言层面提供的goroutine间的通信方式。
Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communicatio...[2021/7/12]
Go 语言结构实例分析
当前的调试部分可以使用 go run filename.go 来执行。
可以生成一个 build.sh 脚本,用于在指定位置产生已编译好的 可执文件:
#!/usr/bin/env bash
CURRENT_DIR=`pwd`
OLD_GO_PATH="$GOPATH" ...[2021/7/5]
Go语言空白表示符_的实例用法
在GO语言中,导入了包,却不在代码中使用它,是非法的。当这么做时,编译器是会报错的。其原因是为了避免导入过多未使用的包,从而导致编译时间显著增加。如下代码:
package main
import (
"geometry/rectangle" 导入自定的包
)
...[2021/7/5]
golang fmt格式“占位符”的实例用法详解golang fmt格式“占位符”的实例用法详解
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。
# 定义示例类型和变量
type Human struct {
Name string
}
var people = Human{Name:"zhangsan"}
...[2021/7/5]
golang中字符串MD5生成方式总结
方案一
func md5V(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}
方案二
fun...[2021/7/5]
go select编译期的优化处理逻辑使用场景分析go select编译期的优化处理逻辑使用场景分析
前言
select作为Go chan通信的重要监听工具,有着很广泛的使用场景。select的使用主要是搭配通信case使用,表面上看,只是简单的select及case搭配,实际上根据case的数量及类型,在编译时select会进行优化处理,根据不同的情况调用不同的底层逻辑。
select的编译...[2021/6/28]
深入理解 sync.Once 与 sync.Pool
深入理解 sync.Once 与 sync.Pool
sync.Once 代表在这个对象下在这个示例下多次执行能保证只会执行一次操作。
var once sync.Once
for i:=0; i < 10; i++ {
once.Do(func(){
fmt.Println("e...[2021/6/28]