![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
文章平均质量分 78
yuchenfw
公众号:Go开发笔记
展开
-
Go json tag的大小写匹配问题
你知道json tag的具体匹配规则吗原创 2022-08-29 08:00:00 · 1250 阅读 · 1 评论 -
Go test之理
Go test背后执行的原理原创 2022-06-27 08:00:00 · 674 阅读 · 0 评论 -
Go Signal信号处理机制
深入了解Go Signal信号处理机制原创 2022-03-07 08:00:00 · 1235 阅读 · 0 评论 -
gomod的版本选择策略
gomod的最小版本选择策略原创 2022-01-03 21:14:06 · 3248 阅读 · 0 评论 -
Gorm TableName相关
前言使用Gorm构造模型时,通过实现Tabler interface的TableName() func可以指定table的名称。那么TableName()何时调用?操作时每次都会调用TableName()吗?TableName()支持动态表名吗?怎样实现动态表名?TableNameGorm增删改查等操作最终交由Excute执行。以Find为例:// Find find records that match given conditionsfunc (db *DB) Find(dest原创 2021-08-15 23:05:03 · 8583 阅读 · 1 评论 -
go select编译期的优化处理逻辑
你知道select case数量不同时的底层处理也不一样吗原创 2021-06-27 22:28:50 · 371 阅读 · 1 评论 -
Go channel——block为false时chansend/chanrecv的处理机制
前言本篇聚集select 2个case(1个send/recv case、1个default case)场景时send、recv的具体处理。更多内容分享,欢迎关注公众号:Go开发笔记chansendselect {case c <- v: ... foodefault: ... bar}其底层对应func为selectnbsend。selectnbsend// compiler implements//// select {// case c <- v://原创 2021-05-23 13:53:30 · 399 阅读 · 0 评论 -
Go channel——block为true时chansend/chanrecv的处理机制
前言上篇文章提到channel send/recv使用形式及场景,其中 select单个send/recv case与send/recv单独使用时一致,因此本篇先从这些简单场景出发关注send、recv的具体处理。更多内容分享,欢迎关注公众号:Go开发笔记send单独使用c <- x select单个send caseselect { case c <- x :}以上两种场景send处理方式一致,底层对应func为chansend1。chansend1具体实现原创 2021-05-16 20:39:17 · 649 阅读 · 0 评论 -
Go channel——send/recv使用形式及场景
搭配select的处理逻辑你清楚吗?原创 2021-05-09 23:13:19 · 547 阅读 · 0 评论 -
Go channel——基本机制及结构
前言GO官方博客的Share Memory By Communicating中提到:Go’s concurrency primitives - goroutines and channels - provide an elegant and distinct means of structuring concurrent software. (These concepts have an interesting history that begins with C. A. R. Hoare’s Com原创 2021-04-26 21:44:23 · 440 阅读 · 1 评论 -
iota的使用
iotaiota在builtin中说明如下:// iota is a predeclared identifier representing the untyped integer ordinal// number of the current const specification in a (usually parenthesized)// const declaration. It is zero-indexed.const iota = 0 // Untyped int.翻译过来就是:原创 2021-03-14 22:26:26 · 368 阅读 · 1 评论 -
strconv.FormatFloat的精度处理问题
strconv.FormatFloat真的是四舍五入吗?原创 2021-01-10 17:39:05 · 13680 阅读 · 1 评论 -
goquery的初步使用
goquery的初步使用原创 2020-12-10 10:41:18 · 2945 阅读 · 0 评论 -
为何sql.Rows使用结束后一定要Close
前言常见的sql.Rows使用方式如下:var db *sql.DB....rows, err :=db.QueryContext(ctx,selectSql,args...)...defer rows.Close()for rows.Next() { if err = rows.Scan(&dst); err != nil { return }}我们知道sql.Rows使用结束后一定要关闭。但为何要关闭?不关闭又会发生什么呢?源码会告诉我们答案。RowsRow原创 2020-11-09 22:48:05 · 3105 阅读 · 0 评论 -
了解Go编译处理(六)—— 表达式解析
Go表达式的解析原创 2020-11-01 22:05:18 · 983 阅读 · 0 评论 -
sqlx的使用及注意点
前言sqlx是基于Go内置database/sql包上的扩展,主要是简化了sql的使用过程。sqlx的sql.DB, sql.TX, sql.Stmt等保持底层实现不变,因此可以很方便地从database/sql切换到sqlx。sqlx另外还提供了一些功能:可以将Rows内容解析至struct(支持内嵌)、map、slice命名参数支持Get/Select可以快速将查询结果转为为struct/slice使用1. Open/ConnectOpen可能仅校验参数,而没有与db间创建连接,要确认原创 2020-10-25 20:56:25 · 6869 阅读 · 1 评论 -
一个json Unmarshal to slice的问题及延伸
一个json数组解析至slice的问题原创 2020-10-25 20:52:02 · 2694 阅读 · 1 评论 -
详解map(一)—— map的常用方法
前言map是语言中常用的一个数据结构,其在不同语言中有着不同的实现的,现在我们看下在go中的底层实现。更多内容分享,欢迎关注公众号:Go开发笔记map源码map的底层实现的源码位于runtime/map.go中,其相关方法的调用在编译时确认。map说明简单来说,map就是一个哈希表。数据被排列成一个bucket数组。每个bucket最多包含8个key/elem对。哈希的低位用于选择一个bucket。每个bucket包含每个hash的一些高位,以区分单个bucket中的条目。map的数据存储结构原创 2020-10-19 23:28:06 · 6952 阅读 · 0 评论 -
sync.Map详解
从源码了解sync.Map原创 2020-10-11 15:19:32 · 1981 阅读 · 0 评论 -
了解Go编译处理(五)—— 顶层声明解析
import、const、type、var的解析过程原创 2020-08-13 22:37:40 · 563 阅读 · 0 评论 -
了解Go编译处理(四)—— go文件的解析
go编译时.go文件的解析过程原创 2020-08-09 10:48:57 · 1552 阅读 · 0 评论 -
了解Go编译处理(三)—— 初识go compile
.go文件的编译过程原创 2020-08-02 10:30:47 · 2148 阅读 · 0 评论 -
go-join——按规则快速拼接字符串的工具
go-join是一个按规则快速拼接字符串的工具,适用于map、struct、url encoded url string等类型。原创 2020-07-29 22:49:12 · 1955 阅读 · 0 评论 -
Go类型零值及初始化
本文主要总结了常见的基础类型及组合的零值及使用过程中相关初始化的问题。原创 2020-07-19 15:23:43 · 2778 阅读 · 0 评论 -
了解Go编译处理(二)—— go build
从源码角度看go build的处理过程原创 2020-07-05 22:48:12 · 5872 阅读 · 0 评论 -
深入了解gorm Scan的使用
前言在使用gorm查询数据保存时,可以通过Scan快速方便地将数据存储到指定数据类型中,减少数据的手动转存及赋值过程。那么,你知道:Scan支持哪些数据类型吗?Scan如何确定接收类型的数据与查询数据之间的匹配关系的呢?我们带着这两个问题去看下相关的源码。Scan使用示例直接将查询到的数据存储到结果中。type Result struct { Name string Age int}var result Resultdb.Table("users").Selec原创 2020-07-02 23:06:10 · 26224 阅读 · 17 评论 -
了解Go编译处理(一)—— go tool
从go工具的源码了解go命令的处理过程。原创 2020-06-27 15:47:50 · 2392 阅读 · 0 评论 -
Go字符串拼接方式深入比较
从源码的角度分析Go中"+"、"fmt.Sprintf"、strings.Join三种拼接字符串的优缺点及性能问题,帮助你更好地了解、选择、使用字符串拼接。原创 2020-06-07 15:42:20 · 2229 阅读 · 0 评论 -
深入了解Go Slice(三)—— append的处理过程
从源码的角度看slice append数据的处理过程。原创 2020-06-01 22:55:08 · 2484 阅读 · 0 评论 -
深入了解Go Slice(二)—— 切片的详细处理过程
从源码的角度看Slice切片的实现过程,理解Slice后len、cap及数据的变化。原创 2020-05-25 22:24:24 · 809 阅读 · 0 评论 -
深入了解Go Slice(一)—— make的详细处理过程
关于Slice的使用有很多文章已经介绍了,本系列文章无意再重复介绍使用过程,主要专注于了解Slice后的处理逻辑,从源码的角度加深对使用的了解,解决一些常见的使用错误点。原创 2020-05-24 11:21:09 · 6376 阅读 · 0 评论 -
Base64 Encoding详解
本文主要以Go base64 package为例,详细介绍了Base64中4种Encoding的异同点及使用环境,同时对base64编/解码的详细实现过程进行了较深入的探讨。原创 2020-05-15 15:27:01 · 6501 阅读 · 0 评论 -
golang struct json tag的使用及深入理解
struct json tag主要在struct与json数据转换的过程(Marshal/Unmarshal)中使用。本文主要介绍struct json tag的使用及探寻源码中的设计处理过程。原创 2020-05-09 10:54:09 · 23244 阅读 · 0 评论 -
golang RSA秘钥的解析方式总结
文章目录前言解析方式1. 字符串格式(1)公钥(2)私钥2. 证书文件格式(1).pem、.cert、.cer、.crt(2).pkcs12、.pfx、.p123. N,E参数总结前言加密、解密、签名、验签等操作总少不了对秘钥的处理,秘钥的存储格式决定了解析方式。在golang中关于RSA加密、解密、签名、验签的总结一文中提到的仅是针对的字符串类型的秘钥处理,本文中将对常见的几种RSA秘钥存...原创 2020-04-26 22:40:15 · 7600 阅读 · 0 评论 -
优雅重启Go服务——gracehttp详解
从源码的角度详细说明gracehttp实现优雅重启的原理及过程。原创 2020-04-16 23:00:06 · 3366 阅读 · 0 评论 -
influxDB 2.0安装及使用说明
influxdb2.0使用指南原创 2020-03-29 11:57:33 · 42594 阅读 · 29 评论 -
zap细节拾遗——日志信息内容的具体顺序问题
前言我们在之前的篇章中主要按照几个核心使用点进行源码的分析,有些细节未能覆盖到,因此特意对使用时可能需要注意的细节,特意说明下。1.输出的日志信息内容的具体顺序问题先说结论,先后顺序为:Level-Time-LoggerName-Caller-Message-已排序的InitialFields-Stack-Fields注意:以上部分信息可缺省。(1)config build时对Ini...原创 2020-03-03 17:47:37 · 1443 阅读 · 0 评论 -
zap——SugaredLogger
SugaredLogger// A SugaredLogger wraps the base Logger functionality in a slower, but less// verbose, API. Any Logger can be converted to a SugaredLogger with its Sugar// method.//// Unlike the Lo...原创 2020-02-26 11:30:21 · 2973 阅读 · 0 评论 -
zap——Logger的设计思路
前言之前的一系列文章中主要追踪的是代码的执行逻辑和处理思路,进而熟悉代码,加深理解及使用。但是zap为什么快?它是怎么设计的?在熟悉代码后,再回头看看zap的设计思路,看看能否解答之前的一些疑惑。设计思路zap README的Performance一节中提到:For applications that log in the hot path, reflection-based serial...原创 2020-02-07 14:40:32 · 1642 阅读 · 0 评论 -
zap——logger的创建及logger的使用过程
文章目录根据Conifg创建LoggerbuildEncoderopenSinksCombineWriteSyncerslog的使用check levelWirteEncodeEntryc.out.WriteSync总结根据Conifg创建Logger// Build constructs a logger from the Config and Options.func (cfg Conf...原创 2020-01-18 15:23:19 · 2945 阅读 · 0 评论