
Golang进阶之路
文章平均质量分 53
Golang一些实战实例、经验总结。
wade3015
这个作者很懒,什么都没留下…
展开
-
golang 使用time包时间间隔报错
时间间隔,即Duartion类型, 业务也是很常用的类型。 // func ParseDuration(s string) (Duration, error) tp, _ := time.ParseDuration("1.5s") fmt.Println(tp.Truncate(1000), tp.Seconds(), tp.Nanoseconds()) func (d Duration) Hours() float64 func (d ..原创 2020-10-27 23:07:26 · 1643 阅读 · 0 评论 -
Golang利用sync.WaitGroup实现协程同步详解
###协程同步在实际项目开发过程中经常会遇到并发需要协程同步的场景,经常看到有人会问如何等待主协程中创建的协程执行完毕之后再结束主协程,例如下面代码,通过起100个协程实现并发打印的例子:package mainimport ( "fmt")func main() { for i := 0; i < 100 ; i++{ go func(i int) { fmt.Println("Goroutine ",i) }(i) }}执行以上代码很可能看不到输原创 2020-06-19 18:34:06 · 3743 阅读 · 0 评论 -
Gin验证请求参数-自定义验证规则
Gin对请求参数自定义验证规则可以分三步:自定义结构体验证绑定binding标签 针对该标签定义验证方法 再将该验证方法注册到validator验证器里面自定义结构体验证绑定binding标签需要在请求参数结构体后面binding,加入自定义验证标签,如bookabledate标签,用于验证预约时间必须大于今天type Booking struct { CheckIn ti...原创 2019-11-17 13:34:24 · 7702 阅读 · 1 评论 -
关于golang并发的深入理解
预备知识1.1 进程、线程、协程进程(Process):在内存中的程序。有自己独立的独占的虚拟 CPU 、虚拟的 Memory、虚拟的 IO devices。OS 直接支持并调度。进程之间只能通过系统提供的 IO 机制通讯。共享内存(变量)是不可能的!(1) 每一进程占用独立的地址空间。此处的地址空间包括代码、数据及其他资源。(2) 进程间的通信开销较大且受到许多限制。...原创 2019-03-04 19:57:53 · 2279 阅读 · 1 评论 -
golang实现MySQL数据库事物的提交与回滚
MySQL 事务主要用于处理操作量大,复杂度高的数据。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务用来管理 insert,update,delete 语句,事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consi...原创 2019-02-23 16:30:24 · 6077 阅读 · 2 评论 -
golang常用文本处理总结
本文主要对一些常用文本处理方法汇总总结,后期持续更新。一、JSON解析到结构体在介绍这部分之前先简要介绍一下Json语法JSON 语法是 JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组1.JSON名称/值对"name" : "value"2.J...原创 2019-01-05 17:12:38 · 2841 阅读 · 0 评论 -
关于golang指针的理解与使用
Go指针理解Go 有指针,但是没有指针运算。你不能用指针变量遍历字符串的各个字节。在 Go 中调用函数的时候,得记得变量是值传递的。通过类型作为前缀来定义一个指针’ * ’:var p * int。现在 p 是一个指向整数值的指针。所有新定义的变量都被赋值为其类型的零值,而指针也一样。一个新定义的或者没有任何指向的指针,有值 nil。在其他语言中,这经常被叫做空(NULL)指针,在 Go ...原创 2019-01-05 16:16:39 · 11563 阅读 · 0 评论 -
golang测试用例详细介绍
Go为何需要test测试用例软件项目开发过程中需要写一些函数解决某一问题,这时候就需要考虑函数是否可以正确运行,是否能实现预期结果,函数代码质量等问题。那么如何函数是否符合这些要求呢?这时候就需要对函数进行全面的单元测试。单元测试的重点在于发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让线上的程序能够在高并发的情况下还能保持稳定...原创 2019-01-03 23:03:00 · 1338 阅读 · 0 评论 -
golang语言log4go日志包使用详解
在go项目的当前文件夹里生成一个logs文件夹,生成test.log的日志文件存放于该路径下。package mainimport ( "os" "strings" "github.com/alecthomas/log4go" )func initConfigs() { log4goInit() log4go.LoadConfiguration(&quo原创 2018-12-13 19:56:43 · 3627 阅读 · 0 评论 -
golang定时任务详解
c := time.Tick(5 * time.Second)for {&lt;- cgo f()}原创 2018-12-08 09:15:25 · 22176 阅读 · 3 评论 -
golang常用加密解密算法总结(AES、DES、RSA、Sha1MD5)
在项目开发过程中,当操作一些用户的隐私信息,诸如密码、帐户密钥等数据时,往往需要加密后可以在网上传输。这时,需要一些高效地、简单易用的加密算法加密数据,然后把加密后的数据存入数据库或进行其他操作;当需要读取数据时,把加密后的数据取出来,再通过算法解密。关于加密解密当前我们项目中常用的加解密的方式无非三种.对称加密, 加解密都使用的是同一个密钥, 其中的代表就是AES非对加解密, 加解密使...原创 2018-11-24 23:53:26 · 24854 阅读 · 0 评论 -
golang 使用make、new和append的注意细节
使用append向slice追加元素遇到的坑,在此总结一下。一,细节1urls := make(map[string]string, 3) urls["baidu"] = "www.baidu.com"urls["google"] = "www.google.com"urls["csdn"] = "www.youkuaiyun.com"names := make([]string, len原创 2018-11-24 22:22:42 · 4907 阅读 · 0 评论 -
golang正则表达式的使用详解
正则表达式是一种进行模式匹配和文本操纵的功能强大的工具。正则表达式灵活、易用,按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合。使用正则表达式需引入&quot;regexp&quot;包,通常还需与&quot;strings&quot;包配合使用,推荐一篇《Go strings 字符串处理包常用方法详解》链接地址本文主要介绍regexp包下一些常用方法的使用方法一、数字、汉字、拼音的匹配f.原创 2018-11-24 14:34:32 · 23283 阅读 · 0 评论 -
golang关于数组的一些常用操作总结
数组初始化一维数组var a [4]int //元素自动初始化为零[0 0 0 0] b := [4]int{2, 5} //未提供初始化值得元素自动初始化为0 [2 5 0 0] c := [...]int{1, 2, 3} //编译器按初始化值数量确定数组长度 [1 2 3] d := [2]string{"TigerwolfC","chen_peggy"}e := [...]i...原创 2018-11-19 00:00:44 · 11057 阅读 · 1 评论 -
Go strings 字符串处理包常用方法详解
golang字符串相关操作主要使用strings包下相关操作,本文主要介绍strings包下一些常用方法的使用方法。函数:Contain(s,str string) bool说明:查找子串是否在指定的字符串中实例:package mainimport ( &quot;fmt&quot; &quot;strings&quot;)func main() { fmt.Println(strin原创 2018-11-04 16:17:10 · 6872 阅读 · 2 评论 -
golang创建文件目录os.Mkdir、os.MkdirAll区别
我试图从一个Go可执行文件(如’dir1 / dir2 / dir3’)创建一组嵌套目录,并打印错误出来看看。err:=os.Mkdir(“dir1/dir2/dir3”,os.ModePerm)if err!=nil{ fmt.Println(err) }result:mkdir ./dir1/dir2/dir3: The system cannot find the path s...原创 2018-11-01 00:20:17 · 78746 阅读 · 3 评论 -
golang编译程序在linux上的部署
本文主要介绍在window环境下通过交叉编译(在一个平台上生成另一个平台的可执行程序)生成可执行文件,并在Linux下进行部署。开发环境开发环境为 :windows开发IDE为:liteidex目标使用开发工具liteide对go程序进行交叉编译,将生成的可执行文件部署在Linux服务器上,使我们开发的程序能直接运行在linux上。操作步骤1.交叉编译Windows 下编译 L...原创 2018-10-25 22:10:11 · 13800 阅读 · 1 评论 -
golang几种常用配置文件使用方法总结(yaml、toml、json、xml、ini)
yaml配置文件的使用方法总结首先介绍使用yaml配置文件,这里使用的是github上第三方开源gopkg.in/yaml.v2第一步:下载go get gopkg.in/yaml.v21第二步:新建一个yaml文件,比如conf.yamlhost: localhost:3306user: rootpwd: 123456dbname: test1234特别需要强调的是冒号...原创 2018-10-24 23:36:45 · 42298 阅读 · 5 评论 -
golang生成指定位数的随机数
1.随机数随机数,是使用一个确定性的算法计算出来随机数序2.rand库golang中产生随机数主要有两个包,分别是“math/rand”和“crypto/rand”。“math/rand”的rand包实现了伪随机数生成器。&amp;quot;crypto/rand&amp;quot;的rand包实现了用于加解密的更安全的随机数生成器。3.生成指定位数随机数以生成六位随机数为例package mainimport (...原创 2018-10-14 23:21:43 · 23371 阅读 · 0 评论 -
golang中map的一些注意事项
map类似其它语言中的哈希表或字典,以key-value形式存储数据 key必须是支持==或!=比较运算的类型,不可以是函数、map或slice Map通过key查找value比线性搜索快很多 Map使用make()创建,支持:=这种简写方式 make([keyType]valueType,cap),cap表示容量,可省略 超出容量时会自动扩容,但尽量提供一个合理的初始值 ...原创 2019-09-01 15:34:38 · 26538 阅读 · 8 评论