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 · 1553 阅读 · 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 · 3671 阅读 · 0 评论 -
Gin验证请求参数-自定义验证规则
Gin对请求参数自定义验证规则可以分三步:自定义结构体验证绑定binding标签 针对该标签定义验证方法 再将该验证方法注册到validator验证器里面自定义结构体验证绑定binding标签需要在请求参数结构体后面binding,加入自定义验证标签,如bookabledate标签,用于验证预约时间必须大于今天type Booking struct { CheckIn ti...原创 2019-11-17 13:34:24 · 7562 阅读 · 1 评论 -
关于golang并发的深入理解
预备知识1.1 进程、线程、协程进程(Process):在内存中的程序。有自己独立的独占的虚拟 CPU 、虚拟的 Memory、虚拟的 IO devices。OS 直接支持并调度。进程之间只能通过系统提供的 IO 机制通讯。共享内存(变量)是不可能的!(1) 每一进程占用独立的地址空间。此处的地址空间包括代码、数据及其他资源。(2) 进程间的通信开销较大且受到许多限制。...原创 2019-03-04 19:57:53 · 2180 阅读 · 1 评论 -
golang中一些容易出错的知识点总结
检查 key 是否存在可以用 map 直接访问,检查返回的第二个参数即可// 错误的 key 检测方式func main() { x := map[string]string{"one": "2", "two": "", "three": "3"} if v := x["two"]; v == "" { fmt.Println("key two is...原创 2019-03-06 18:29:38 · 884 阅读 · 0 评论 -
golang匿名函数与闭包理解
匿名函数:所谓匿名函数,就是没有名字的函数定义匿名函数func(x,y int) int { return x + y}匿名函数作为返回值func getPrintMessage() func(string) { // returns an anonymous function return func(message string) { ...原创 2019-03-06 18:23:19 · 1226 阅读 · 1 评论 -
golang实现MySQL数据库事物的提交与回滚
MySQL 事务主要用于处理操作量大,复杂度高的数据。在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务用来管理 insert,update,delete 语句,事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consi...原创 2019-02-23 16:30:24 · 6008 阅读 · 2 评论 -
golang常用文本处理总结
本文主要对一些常用文本处理方法汇总总结,后期持续更新。一、JSON解析到结构体在介绍这部分之前先简要介绍一下Json语法JSON 语法是 JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组1.JSON名称/值对"name" : "value"2.J...原创 2019-01-05 17:12:38 · 2792 阅读 · 0 评论 -
golang中文件复制技巧总结
在文本操作过程中经常涉及一些文件拷贝需求,这里介绍几种文件复制技巧。方法1:使用io.Copy()该实用程序的第一个版本将使用io.Copy()标准GO库的功能。实现中可以找到实用程序的逻辑。copy()职能如下:func copy(src,dst string) (int64,error) { sourceFileStat,err := os.Stat(src) if err ...原创 2019-05-15 22:26:22 · 2764 阅读 · 0 评论 -
golang中关于读写锁、互斥锁的理解
锁的概述为了解决协程同步的问题我们使用了channel,但是GO也提供了传统的同步工具。它们都在GO的标准库代码包sync和sync/atomic中。下面我们看一下锁的应用。什么是锁呢?就是某个协程(线程)在访问某个资源时先锁住,防止其它协程的访问,等访问完毕解锁后其他协程再来加锁进行访问。1.1死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成...原创 2019-05-30 20:22:26 · 3369 阅读 · 2 评论 -
golang使用select超时处理
在一些出现goroutine阻塞的情况下,如何避免整个程序进入阻塞的情况呢?可以采用select来设置超时,具体情况参照下面例子。package mainimport ( "fmt" "time")func main() { ch := make(chan int) quit := make(chan bool) go func() { //子g...原创 2019-05-28 00:17:45 · 1878 阅读 · 0 评论 -
golang包管理工具之govendor的使用
1、govendor简介 golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下。常用的依赖包管理工具有godep,govendor等,在Golang1.5之后,Go提供了GO15VENDOREXPERIMENT环境变量(Go 1.6版本默认开启该环境变量)...原创 2019-05-28 20:26:20 · 1758 阅读 · 0 评论 -
golang猜数字游戏
猜数字游戏,其游戏规则为:程序随机生成一个 100到 999之间的三位数字作为猜测的结果,由用户猜测此数字。用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;直到用户猜对结果,则提示游戏结束。package mainimport ( "fmt" "math/rand" "time")func main() { //生成三位数(100-999)的随机数 //ran...原创 2019-06-17 18:51:35 · 729 阅读 · 0 评论 -
golang函数作为类型例子———数组中分离奇偶数
定义一个函数类型,实现定义的函数类型,作为参数调用package mainimport "fmt"//函数作为数据类型type myFunc func(arr int) boolfunc main() { arr := []int{1,6,7,21,23,33,34,456,76,89,97,31,16,17,29} odd := Filter(arr,isOdd) fm...原创 2019-08-11 17:50:37 · 1327 阅读 · 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 · 26163 阅读 · 8 评论 -
关于golang指针的理解与使用
Go指针理解Go 有指针,但是没有指针运算。你不能用指针变量遍历字符串的各个字节。在 Go 中调用函数的时候,得记得变量是值传递的。通过类型作为前缀来定义一个指针’ * ’:var p * int。现在 p 是一个指向整数值的指针。所有新定义的变量都被赋值为其类型的零值,而指针也一样。一个新定义的或者没有任何指向的指针,有值 nil。在其他语言中,这经常被叫做空(NULL)指针,在 Go ...原创 2019-01-05 16:16:39 · 11473 阅读 · 0 评论 -
golang测试用例详细介绍
Go为何需要test测试用例软件项目开发过程中需要写一些函数解决某一问题,这时候就需要考虑函数是否可以正确运行,是否能实现预期结果,函数代码质量等问题。那么如何函数是否符合这些要求呢?这时候就需要对函数进行全面的单元测试。单元测试的重点在于发现程序设计或实现的逻辑错误,使问题及早暴露,便于问题的定位解决,而性能测试的重点在于发现程序设计上的一些问题,让线上的程序能够在高并发的情况下还能保持稳定...原创 2019-01-03 23:03:00 · 1265 阅读 · 0 评论 -
Beego获取http请求内容详细介绍
beego是一个使用 Golang 来设计的快速构建并开发 Go 应用程序的开源http框架,可以快速开发API、Web、后端服务等各种应用,功能支持RESTFul,MVC模型;含有智能路由,内置强大模块,采用了 Go 原生的 http 包来处理请求;goroutine 的并发效率足以应付大流量的 Web 应用和 API 应用等等,简单易用,功能强大。 beego已经为...原创 2018-12-17 21:56:52 · 8374 阅读 · 0 评论 -
golang mysql数据库基本操作笔记
mysql目前来说是使用最为流行的关系型数据库,golang操作mysql使用最多的包go-sql-driver/mysql。sqlx包是作为database/sql包的一个额外扩展包,在原有的database/sql加了很多扩展,如直接将查询的数据转为结构体,大大简化了代码书写,当然database/sql包中的方法同样起作用。github地址:https://github.com/go-...原创 2018-10-28 13:06:33 · 1658 阅读 · 0 评论 -
golang hbase数据库基本操作笔记
HBase是一个面向列的分布式数据库,适合一些需要实时随机地访问超大规模数据集的场合,hbase可以提供高并发读写操作的支持。表是由Key-Value组成的,下面主要介绍一下golang下hbase的一些基本操作。本文用到的库主要有:“github.com/tsuna/gohbase”“github.com/tsuna/gohbase/filter”“github.com/tsuna/goh...原创 2018-10-21 15:37:51 · 3921 阅读 · 3 评论 -
golang实现Hbase数据库分页查询
在开发过程中,经常会涉及到从数据库查询数据,当数据小于一定条数时可以在一页进行显示,当条数比较多时往往希望分页显示。本文主要介绍通过golang实现hbase的分页查询。使用到的库有:“github.com/tsuna/gohbase”“github.com/tsuna/gohbase/filter”“github.com/tsuna/gohbase/hrpc”具体代码如下,其中star...原创 2018-10-21 16:09:49 · 1997 阅读 · 0 评论 -
Redis按照数字、汉字、拼音快速搜索通讯录接口
Redis 是内存级操作,所以单次的查询会很快,非常适合用于一些快速搜索场景。本文以邮箱通讯录为例,介绍redis快速搜索。编程语言:golang接口框架:beego1、Redis连接采用连接池方式连接redis数据库var RedisClient *redis.Poolfunc ConnectRedis() { host := beego.AppConfig.DefaultStr...原创 2018-10-21 17:09:26 · 941 阅读 · 0 评论 -
golang编译程序在linux上的部署
本文主要介绍在window环境下通过交叉编译(在一个平台上生成另一个平台的可执行程序)生成可执行文件,并在Linux下进行部署。开发环境开发环境为 :windows开发IDE为:liteidex目标使用开发工具liteide对go程序进行交叉编译,将生成的可执行文件部署在Linux服务器上,使我们开发的程序能直接运行在linux上。操作步骤1.交叉编译Windows 下编译 L...原创 2018-10-25 22:10:11 · 13701 阅读 · 1 评论 -
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 · 76944 阅读 · 3 评论 -
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 · 41247 阅读 · 5 评论 -
golang实现https请求跳过证书验证
请求 https 网站跳过证书验证我在用 Golang 访问 IPPBX 的管理页面时出现以下错误,因为证书是未经过认证的,而是自己创建的。错误信息:Get https://192.168.0.199:8443/config/app: x509: certificate signed by unknown authority所有我需要忽略检查证书,以下是部分代码。import (“cry...原创 2018-12-17 22:43:48 · 23039 阅读 · 0 评论 -
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 · 6779 阅读 · 2 评论 -
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 · 10908 阅读 · 1 评论 -
golang正则表达式的使用详解
正则表达式是一种进行模式匹配和文本操纵的功能强大的工具。正则表达式灵活、易用,按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合。使用正则表达式需引入&quot;regexp&quot;包,通常还需与&quot;strings&quot;包配合使用,推荐一篇《Go strings 字符串处理包常用方法详解》链接地址本文主要介绍regexp包下一些常用方法的使用方法一、数字、汉字、拼音的匹配f.原创 2018-11-24 14:34:32 · 23206 阅读 · 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.csdn.net"names := make([]string, len原创 2018-11-24 22:22:42 · 4852 阅读 · 0 评论 -
golang常用加密解密算法总结(AES、DES、RSA、Sha1MD5)
在项目开发过程中,当操作一些用户的隐私信息,诸如密码、帐户密钥等数据时,往往需要加密后可以在网上传输。这时,需要一些高效地、简单易用的加密算法加密数据,然后把加密后的数据存入数据库或进行其他操作;当需要读取数据时,把加密后的数据取出来,再通过算法解密。关于加密解密当前我们项目中常用的加解密的方式无非三种.对称加密, 加解密都使用的是同一个密钥, 其中的代表就是AES非对加解密, 加解密使...原创 2018-11-24 23:53:26 · 24006 阅读 · 0 评论 -
golang定时任务详解
c := time.Tick(5 * time.Second)for {&lt;- cgo f()}原创 2018-12-08 09:15:25 · 22042 阅读 · 3 评论 -
beego邮箱随机码验证
程序开发中经常遇到一些需要登录验证的场合,这里简要介绍一下基于beego框架的邮箱随机码验证先定义一个Map存放邮箱号即对应随机码var captchaMap map[string]stringfunc Initialize() { captchaMap = make(map[string]string)}在models中定义返回结构,其中code 含义 1 成功 0 失败...原创 2018-12-08 09:43:16 · 1091 阅读 · 3 评论 -
beego发送邮件和上传文件接口
本文主要介绍采用beego框架的邮件发送和文件上传接口在models中定义好请求参数模型和返回结果模型type SmtpRecv struct { From string `json:&quot;from&quot;` To []string `json:&quot;to&quot;` Cc []string `json:&quot;cc&am原创 2018-12-08 10:12:32 · 1697 阅读 · 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 · 3551 阅读 · 0 评论 -
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 · 23033 阅读 · 0 评论