- 博客(75)
- 资源 (1)
- 收藏
- 关注
原创 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
9261
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
455
原创 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
735
原创 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
499
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
425
1
原创 为何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
3291
原创 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
7085
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
7053
原创 go-join——按规则快速拼接字符串的工具
go-join是一个按规则快速拼接字符串的工具,适用于map、struct、url encoded url string等类型。
2020-07-29 22:49:12
2042
原创 深入了解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
27228
17
原创 Go字符串拼接方式深入比较
从源码的角度分析Go中"+"、"fmt.Sprintf"、strings.Join三种拼接字符串的优缺点及性能问题,帮助你更好地了解、选择、使用字符串拼接。
2020-06-07 15:42:20
2372
原创 深入了解Go Slice(一)—— make的详细处理过程
关于Slice的使用有很多文章已经介绍了,本系列文章无意再重复介绍使用过程,主要专注于了解Slice后的处理逻辑,从源码的角度加深对使用的了解,解决一些常见的使用错误点。
2020-05-24 11:21:09
6635
原创 Base64 Encoding详解
本文主要以Go base64 package为例,详细介绍了Base64中4种Encoding的异同点及使用环境,同时对base64编/解码的详细实现过程进行了较深入的探讨。
2020-05-15 15:27:01
6931
原创 golang struct json tag的使用及深入理解
struct json tag主要在struct与json数据转换的过程(Marshal/Unmarshal)中使用。本文主要介绍struct json tag的使用及探寻源码中的设计处理过程。
2020-05-09 10:54:09
24384
原创 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
8067
原创 zap细节拾遗——日志信息内容的具体顺序问题
前言我们在之前的篇章中主要按照几个核心使用点进行源码的分析,有些细节未能覆盖到,因此特意对使用时可能需要注意的细节,特意说明下。1.输出的日志信息内容的具体顺序问题先说结论,先后顺序为:Level-Time-LoggerName-Caller-Message-已排序的InitialFields-Stack-Fields注意:以上部分信息可缺省。(1)config build时对Ini...
2020-03-03 17:47:37
1589
原创 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
3128
原创 zap——Logger的设计思路
前言之前的一系列文章中主要追踪的是代码的执行逻辑和处理思路,进而熟悉代码,加深理解及使用。但是zap为什么快?它是怎么设计的?在熟悉代码后,再回头看看zap的设计思路,看看能否解答之前的一些疑惑。设计思路zap README的Performance一节中提到:For applications that log in the hot path, reflection-based serial...
2020-02-07 14:40:32
1696
原创 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
3074
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人