![](https://img-blog.csdnimg.cn/20201202163705265.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
go packages
文章平均质量分 85
好代码本身就是最好的文档。当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释。
ghostwritten
关注领域:go python k8s docker 数据库 运维
打造一个专属个人更精准的问题解决搜索引擎。
展开
-
go package学习目录
https://github.com/darjun/go-daily-lib原创 2021-01-14 13:33:36 · 356 阅读 · 0 评论 -
go 库 viper 配置解析神器
几乎所有的后端服务,都需要一些配置项来配置我们的服务,一些小型的项目,配置不是很多,可以选择只通过命令行参数来传递配置。但是大型项目配置很多,通过命令行参数传递就变得很麻烦,不好维护。标准的解决方案是将这些配置信息保存在配置文件中,由程序启动时加载和解析。Go 生态中有很多包可以加载并解析配置文件,目前最受欢迎的是 Viper 包。Viper 是 Go 应用程序现代化的、完整的解决方案,能够处理不同格式的配置文件,让我们在构建现代应用程序时,不必担心配置文件格式。原创 2022-12-20 15:21:21 · 738 阅读 · 0 评论 -
Go 包 fmt 打印输出
格式化输出函数func Print(a ...interface{}) (n int, err error)Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格,返回写入的字节数和遇到的任何错误。func Printf(format string, a ...interface{}) (n int, err error)Prin...原创 2020-02-25 22:51:43 · 1265 阅读 · 1 评论 -
Go Mutex 【3】--易错点
上一讲,我带你一起领略了 Mutex 的架构演进之美,现在我们已经清楚 Mutex 的实现细节了。当前 Mutex 的实现貌似非常复杂,其实主要还是针对饥饿模式和公平性问题,做了一些额外处理。但是,我们在第一讲中已经体验过了,Mutex 使用起来还是非常简单的,毕竟,它只有 Lock 和 Unlock 两个方法,使用起来还能复杂到哪里去?正常使用 Mutex 时,确实是这样的,很简单,基本不会有什么错误,即使出现错误,也是在一些复杂的场景中,比如跨函数调用 Mutex 或者是在重构或者修补 Bug 时误操转载 2021-10-12 17:57:55 · 210 阅读 · 0 评论 -
go unsafe包使用详解
1.unsafe 作用从golang的定义来看,unsafe 是类型安全的操作。顾名思义,它应该非常谨慎地使用; unsafe可能很危险,但也可能非常有用。例如,当使用系统调用和Go结构必须具有与C结构相同的内存布局时,您可能别无选择,只能使用unsafe。关于指针操作,在unsafe包官方定义里有四个描述:任何类型的指针都可以被转化为PointerPointer可以被转化为任何类型的指针...原创 2020-03-13 00:21:31 · 552 阅读 · 0 评论 -
go string字符串详解
字符串是不可变值类型,内部用指针指向 UTF-8 字节数组。默认值是空字符串 “”。用索引号访问某字节,如 s[i]。不能用序号获取字节元素指针,&s[i] 非法。不可变类型,无法修改字节数组。字节数组尾部不包含 NULL。使用索引号访问字符 (byte)package mainfunc main() { s := "abc" println(s[0] ...原创 2020-03-04 10:17:28 · 3321 阅读 · 0 评论 -
go类型转换strconv详解
零值变量在定义时没有明确的初始化时会赋值为 零值 。零值是:数值类型为 0 ,布尔类型为 false ,字符串为 “” (空字符串)。Golang 不支持隐式类型转换,即便是从窄向宽转换也不行。package mainvar b byte =100// var n int = b// ./main.go:5:5: cannot use b (type byte) as type...原创 2020-03-05 12:47:22 · 1676 阅读 · 0 评论 -
go ini配置文件管理详解
https://juejin.cn/post/6844904048764649479转载 2021-01-13 12:36:04 · 1094 阅读 · 0 评论 -
go net/http【2】ServeMux 和 Handler使用详解
文章目录1. 介绍2. 自定义处理器(Custom Handlers)-方法3. 将函数作为处理器4. 更便利的 DefaultServeMux1. 介绍ServrMux 本质上是一个 HTTP 请求路由器(或者叫多路复用器,Multiplexor)。它把收到的请求与一组预先定义的 URL 路径列表做对比,然后在匹配到路径的时候调用关联的处理器(Handler)。处理器(Handler)负责输出HTTP响应的头和正文。任何满足了http.Handler接口的对象都可作为一个处理器。通俗的说,对象只要转载 2021-01-11 15:20:12 · 1921 阅读 · 0 评论 -
go tls实现TLS 服务器和客户端通讯
简介传输层安全协议(Transport Layer Security,缩写:TLS),及其前身安全套接层(Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。SSL包含记录层(Record Layer)和传输层,记录层协议确定了传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间转载 2021-01-08 17:39:09 · 1356 阅读 · 0 评论 -
go Context【1】控制goroutine详解
为什么需要 Context背景对于 Golang 开发者来说context(上下文)包一定不会陌生。但很多时候,我们懒惰的只是见过它,或能起到什么作用,并不会去深究它。应用场景:在 Go http 包的 Server 中,每一个请求在都有一个对应的goroutine去处理。请求处理函数通常会启动额外的goroutine用来访问后端服务,比如数据库和 RPC 服务。用来处理一个请求的goroutine通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的 token、请求的截止时间。当原创 2020-12-31 15:52:48 · 800 阅读 · 0 评论 -
go k8s operator logf日志格式化处理详解
文章目录1. 简介2. 默认的Zap记录器3. 示例4. 自定义zap记录器5. 部署到集群时设置标志6. 创建结构化的日志语句7. 非默认日志记录1. 简介操作员SDK生成的操作员使用该logr界面进行记录。此日志界面具有多个后端,例如zap,SDK默认在生成的代码中使用这些后端。logr.Logger公开结构化的日志记录方法,这些方法可帮助创建机器可读的日志并向日志记录添加大量信息。2. 默认的Zap记录器在搭建新项目时,Operator SDK使用zap基于logr后端的后端。为了帮助配置..原创 2020-12-24 11:49:06 · 1994 阅读 · 0 评论 -
go io.Pipe()使用详解
文章目录io.Pipe()定义io.Pipe使用io.Pipe在进程通讯中使用io.Pipe()定义func Pipe() (*PipeReader, *PipeWriter)io.Pipe使用io.Pipe会返回一个reader和writer,对reader读取(或写入writer)后,进程会被锁住,直到writer有新数据流进入或关闭(或reader把数据读走)。如下面程序会出现死锁。package mainimport ( "io")func main() { read..原创 2020-12-07 17:00:22 · 3537 阅读 · 0 评论 -
go k8s.io/klog包详解
文章目录1. 介绍2. 使用方法3. 实例3.1 输出到文件3.2 输出至终端3.3 输出自定义格式3.4 klog与glog3.5 klogv1与klgov23.6 获取环境变量1. 介绍创建klog的决定并不是一件容易的事,但是由于glog中存在一些缺陷,所以有必要这样做。最终,由于没有积极开发glog而创建了fork。这可以在glog自述文件中看到这使我们无法在没有分叉的情况下解决许多用例。下面列出了需要开发功能的因素:glog 提出了很多“陷阱”,并介绍了容器化环境中的挑战,所有这些都没有原创 2020-11-24 00:12:35 · 8545 阅读 · 0 评论 -
go net/http 【3】设置 http response 响应头详解
文章目录01 设置WriteHeader的顺序问题2. go会对Header中的key进行规范化处理01 设置WriteHeader的顺序问题之前遇到个问题,在一段代码中这样设置WriteHeader,最后在header中取Name时怎么也取不到。w.WriteHeader(201)w.Header().Set("Name", "my name is smallsoup")用 golang 写 http server 时,可以很方便可通过 w.Header.Set(k, v) 来设置 htt原创 2020-11-19 23:32:22 · 2505 阅读 · 0 评论 -
Go 并发编程Mutex(二)--源码
们从 Mutex 的一个简单实现开始,看看它是怎样逐步提升性能和公平性的。在这个过程中,我们可以学习如何逐步设计一个完善的同步原语,并能对复杂度、性能、结构设计的权衡考量有新的认识。经过这样一个学习,我们不仅能通透掌握 Mutex,更好地使用这个工具,同时,对我们自己设计并发数据接口也非常有帮助。那具体怎么来讲呢?我把 Mutex 的架构演进分成了四个阶段,下面给你画了一张图来说明。“初版”的 Mutex 使用一个 flag 来表示锁是否被持有,实现比较简单;后来照顾到新来的 goroutine,所以会让转载 2020-10-22 10:59:07 · 293 阅读 · 0 评论 -
Go Mutex【1】并发编程详解
并发场景说起并发访问问题,真是太常见了,比如多个 goroutine 并发更新同一个资源,像计数器;同时更新用户的账户信息;秒杀系统;往同一个 buffer 中并发写入数据等等。如果没有互斥控制,就会出现一些异常情况,比如计数器的计数不准确、用户的账户可能出现透支、秒杀系统出现超卖、buffer 中的数据混乱,等等,后果都很严重这些问题怎么解决呢?对,用互斥锁,那在 Go 语言里,就是 Mutex。互斥锁叫做排它锁。那在 Go 标准库中,它提供了 Mutex 来实现互斥锁这个功能。Mutex 是使用最原创 2020-10-21 16:23:42 · 415 阅读 · 0 评论 -
go math/rand与crypto/rand包详解
math/rand对于Random的使用,在业务中使用频率是非常高的,本文就小结下常用的方法:在Golang中,有两个包提供了rand,分别为 “math/rand” 和 “crypto/rand”, 对应两种应用场景。一、“math/rand” 包实现了伪随机数生成器。也就是生成 整形和浮点型。该包中根据生成伪随机数是是否有种子(可以理解为初始化伪随机数),可以分为两类:1、有种子。通常以时钟,输入输出等特殊节点作为参数,初始化。该类型生成的随机数相比无种子时重复概率较低。2、无种子。可转载 2020-08-07 14:02:25 · 3690 阅读 · 1 评论 -
go cron定时任务
参考资料github: https://github.com/robfig/cron实战:https://www.jianshu.com/p/626acb9549b1源码分析原创 2020-08-03 01:41:06 · 248 阅读 · 0 评论 -
go tunny生成和管理goroutine池详解
参考资料https://github.com/Jeffail/tunny转载 2020-08-03 01:31:00 · 614 阅读 · 0 评论 -
go context处理单个请求的多个goroutine详解
golang服务器开发利器 context用法详解原创 2020-08-02 18:32:46 · 784 阅读 · 0 评论 -
go os/exec 包linux 命令处理详解
参考资料:https://blog.csdn.net/mrbuffoon/article/details/88946034https://blog.csdn.net/u013256816/article/details/99670090原创 2020-08-02 17:36:25 · 335 阅读 · 0 评论 -
go github.com/imroc/req轻量级http请求处理详解
https://github.com/imroc/req原创 2020-07-26 23:14:37 · 1623 阅读 · 0 评论 -
go runtime处理操作详解
go标准库的学习-runtime原创 2020-07-26 21:37:04 · 528 阅读 · 0 评论 -
go net/url模块详解
介绍解析url函数func PathEscapefunc PathEscape(s string) stringPathEscape 会将字符串转义出来,以便将其安全地放置在 URL 路径段中。func PathUnescapefunc PathUnescape(s string) (string, errorPathUnescape 执行 PathEscape 的逆转换,将 %AB 转换为字节 0xAB 。如果任何 % 之后没有两个十六进制数字,它将返回一个错误。PathUnesca原创 2020-07-26 20:23:27 · 1508 阅读 · 1 评论 -
go github.com/gin-gonic/gin详解
gin介绍github.com/gin-gonic/gin是一个轻量级的 WEB 框架,支持 RestFull 风格 API,支持 GET,POST,PUT,PATCH,DELETE,OPTIONS 等 http 方法,支持文件上传,分组路由,Multipart/Urlencoded FORM,以及支持 JsonP,参数处理等等功能,这些都和 WEB 紧密相关,通过提供这些功能,使开发人员更方便...原创 2020-07-16 11:30:06 · 3176 阅读 · 0 评论 -
go logrus包最好的日志管理详解
参考链接:Go进阶10:logrus日志使用教程原创 2020-05-25 23:36:19 · 3976 阅读 · 0 评论 -
go fmt打印详解
fmt介绍软件包fmt实现了格式化的I / O,其功能类似于C的printf和scanf。格式’动词’来自C,但更简单。占位符通用占位符说明示例输出%v相应值的默认格式Printf("%v",person ){zhangsan}%+v类似%v,但输出结构体时会添加字段名式Printf("%+v",person ){Name:zhangsan}%#v相应值的Go语法表示Printf("#v",person )main.Person={zhangsa原创 2020-05-25 23:14:56 · 1381 阅读 · 0 评论 -
go strconv包类型转译详解
临时链接:https://www.cnblogs.com/Survivalist/articles/10287383.html原创 2020-05-06 23:35:45 · 254 阅读 · 0 评论 -
go reflect包反射详解
1. 温习静态与动态类型1.1 静态类型静态类型就是变量声明时的赋予的类型。比如:type MyInt int // int 就是静态类型type A struct{ Name string // string就是静态}var i *int // *int就是静态类型1.2. 动态类型动态类型:运行时给这个变量复制时,这个值的类型(如果值为nil的时候没有动态类型)...转载 2020-04-14 23:48:11 · 880 阅读 · 0 评论 -
go rexgexp包正则表达式详解
1 regexp.Match判断在 b 中能否找到正则表达式 pattern 所匹配的子串func Match(pattern string, b []byte) (matched bool, err error)pattern:要查找的正则表达式b:要在其中进行查找的 []bytematched:返回是否找到匹配项err:返回查找过程中遇到的任何错误package main...原创 2020-04-09 16:18:11 · 631 阅读 · 0 评论 -
go redisgo包基础详解
1 介绍redigo是golang的一个操作redis的第三方库,之所以选择这个库,是因为它的文档十分丰富,操作起来也比较简单。Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。2. 导入包import ( "github.com/gomodule/redigo/redis")3.源github地址https://gith...原创 2020-04-14 16:05:25 · 2628 阅读 · 1 评论 -
go database/sql包数据库连接详解
1 介绍sql.DB不是一个连接,它是数据库的抽象接口。它可以根据driver打开关闭数据库连接,管理连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果你没有把连接释放回连接池,会导致过多连接使系统资源耗尽。2 导入driverimport ( "database/sql" _ "github.com/go-sql-driver/mysql")...原创 2020-04-06 02:02:19 · 817 阅读 · 0 评论 -
go error接口与errors包详解
1 error接口定义: type error interface{ Error() string //Error()是一个方法,是每一个订制的error对象需要填充的错误消息,可以理解成是一个字段Error}1.1 常见调用方式模板n, err := Foo(0) if err != nil { // 错误处理 } else { // 使用返...原创 2020-04-03 15:24:36 · 2851 阅读 · 2 评论 -
Go 包 os 文件操作
1 os介绍Go 在 os 中提供了文件的基本操作,包括通常意义的打开、创建、读写等操作,除此以外为了追求便捷以及性能上,Go 还在 io/ioutil 以及 bufio 提供一些其他函数供开发者使用2 练习2.1 环境变量2.1.1 获取所有环境变量, 返回变量列表func Environ() []stringpackage main import ( "fmt" ...原创 2020-04-02 21:06:42 · 2461 阅读 · 1 评论 -
go flag包详解
1 命令行语法命令行语法主要有以下几种形式:cmd -flag // 只支持bool类型cmd -flag=xxxcmd -flag xxx // 只支持非bool类型以上语法对于一个或两个‘-’号是一样的,即cmd -flag xxx (使用空格,一个 - 符号)cmd --flag xxx (使用空格,两个 - 符号)cmd -flag=xxx (使用等号,一...原创 2020-04-02 00:47:52 · 325 阅读 · 0 评论 -
go log包日志管理详解
1. Log三类方法Print() 用于输出日志Fatal() 输出日志的同时,调用os.Exit(1)方法退出,小提示:如果函数下存在defer不会执行Panic() 输出日志的同时,调用panic方法,但defer会执行三类区别:Fatal会保存日志并终止程序,Panic会保存日志并丢出异常终止程序,Print会保存日志但是程序继续三类源代码func Printl...原创 2020-04-01 23:16:24 · 1550 阅读 · 0 评论 -
go bufio缓冲io详解
bufio介绍bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。bufio目的bufio 是通过缓冲来提高效率简单的说就是,把文件读取进缓冲(内存)之后再读取的时候就可以避免文件系统的io 从而提高速度。同理,在进行写操作时,先把文件写入缓冲(内存),然后由缓冲写入文件系...原创 2020-03-26 12:02:31 · 1766 阅读 · 0 评论 -
go strings包详解
[root@localhost strings]# cat strings.gopackage mainimport ( "bytes" "fmt" "strings")func main() { s := "Hello,World!!!!!" //Count计算字符串sep在s中的非重叠个数:2 ...原创 2020-03-25 15:53:42 · 1181 阅读 · 0 评论 -
go web net/http【1】处理URL详解
参考链接:https://mojotv.cn/2019/07/30/golang-http-request原创 2020-03-14 00:18:52 · 2198 阅读 · 0 评论