Golang redis 操作初体验

安装 我使用的是 https://github.com/go-redis/r... 这个 golang 客户端, 因此安装方式如下: go get gopkg.in/redis.v4 接着在代码中导入此包即可: import "gopkg.in/redis.v4" 基本操作 创建客户端 通过 redis.NewClient 函数即可创建一个 redis 客户端, 这个方法接收一个 redis.Options 对象参数, 通过这个参数, 我们可以配置 redis 相关的属性, 例如 redis 服...阅读全文

2016年10月06日发布 永顺
阅读:5635 评论:0

Go时间戳和日期字符串的相互转换

Go语言中,获取时间戳用time.Now().Unix(),格式化时间用t.Format,解析时间用time.Parse。 看实例代码: package main import ( "fmt" "time" ) func main() { //获取时间戳 timestamp := time.Now().Unix() fmt.Println(timestamp) //格式化为字符串,tm为Time类型 tm := time.Unix(timestamp, 0) fmt.Println(tm.For...阅读全文

2015-03-19 10:00 baiyuxiong
阅读:102656 评论:2

【GoLang笔记】遍历map时的key随机化问题及解决方法

之前的一篇笔记曾分析过,Go的map在底层是用hashmap实现的。由于高效的hash函数肯定不是对key做顺序散列的,所以,与其它语言实现的hashmap类似,在使用Go语言map过程中,key-value的插入顺序与遍历map时key的访问顺序是不相同的。熟悉hashmap的同学对这个情况应该非常清楚。 所以,本文要提到的肯定不是这个,而是一个比较让人惊奇的情况,下面开始说明。 1. 通过range遍历map时,key的顺序被随机化 在golang 1.4版本中,借助关键字range对Go语...阅读全文

阅读:28170 评论:0

golang 随机数

package main import "fmt" import "math/rand" func main() { //例如,rand.Intn 返回一个随机的整数 n,0 <= n <= 100。 fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Println() //rand.Float64 返回一个64位浮点数 f,0.0 <= f <= 1.0。 fmt.Println(rand.Float64()) //这个技...阅读全文

2015-04-20 11:17 benlightning
阅读:44432 评论:3

golang连接mysql数据库实现增删改查

golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动。这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/MySQL这个驱动,更新维护都比较好。下面演示下具体的使用,完整代码示例可以参考最后。 下载驱动 sudo go get github.com/go-sql-driver/mysql 如果提示这样的失败信息:cannot download, $GOPATH not set. For more det...阅读全文

阅读:2047 评论:0

golang 断言 + 类型转换

转自博客园http://my.oschina.net/u/157514/blog/148285 golang 语言中 也有类似javascript 的 typeof 判断类型的 方法 比如 func (a interface{}){ //第一种 if inst,ok:=a.(TypeA);ok{ inst.MethodA() } //第二种 switch inst:=a.(type){ case TypeA: inst.MethodA() default: fmt.Println("unknow...阅读全文

2015-04-20 12:45 u012210379
阅读:5390 评论:0

排序算法详解(Go语言实现):冒泡排序/选择排序/快速排序/插入排序

算法是程序的灵魂,而排序算法则是一种最基本的算法。排序算法有许多种,本文介绍4中排序算法:冒泡排序,选择排序,快速排序和插入排序,以从小到大为例。 一、冒泡排序 冒泡排序的原理是,对给定的数组进行多次遍历,每次均比较相邻的两个数,如果前一个比后一个大,则交换这两个数。经过第一次遍历之后,最大的数就在最右侧了;第二次遍历之后,第二大的数就在右数第二个位置了;以此类推。 //冒泡排序(排序10000个随机整数,用时约145ms) func bubbleSort(nums []int) { for i...阅读全文

2015-01-03 10:56 books1958
阅读:2162 评论:0

Golang 数组过滤操作benchmark效率对比

说明 之前做的go项目,遇到一个关于数组的增删效率问题: 循环数组--判断--删除数组--得到需要的数组 示例:如果我需要在arr1中过滤掉arr2第一次写的方法如下 arr1:=[]int{1,2,3......,999,1000} arr2:=[]int{5,10,15......,995,1000} for k, v := range arr1{ for _, vv := range arr2{ if v == vv { arr1= append(arr1[:k], arr1[k+1:]....阅读全文

阅读:3706 评论:0

golang笔记——string

任何语言中,字符串操作API都是非常重要的,有些还是熟记比较好,当然如果记不住可以去看源码文件,不得不说GO语言源码看起来非常舒服。 字符串操作相关的API大多封装在 strings 包里,下面列一些常见的 func Count(s, sep string) int 获取指定子字符串的个数 func Contains(s, substr string) bool 判断是否包括某子字符串 func ContainsAny(s, chars string) bool 判断是否包括某字符串中的做任意一...阅读全文

2016-03-04 11:35 tianyajuanke
阅读:3322 评论:0

golang截取中文字符串

1.问题: 在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。 例如: 想要截取前四个字 name := "我是胡八一" fmt.Println("name[:4] = ",name[:4]) 执行后得到的结果会是这样的: name[:4] = 我? 2.解决方法: 先将其转为[]rune,再截取后,转会string nameRune ...阅读全文

阅读:11308 评论:1

golang中的格式化输入输出

【简介】 fmt 包实现了格式化 I/O 函数,类似于 C 的 printf 和 scanf。格式“占位符”衍生自 C,但比 C 更简单。 【打印】 占位符: [一般] %v 相应值的默认格式。在打印结构体时,“加号”标记(%+v)会添加字段名 %#v 相应值的 Go 语法表示 %T 相应值的类型的 Go 语法表示 %% 字面上的百分号,并非值的占位符 [布尔] %t 单词 true 或 false。 [整数] %b 二进制表示 %c 相应 Unicode 码点所表示的字符 %d 十进制表示 %...阅读全文

阅读:10702 评论:0

Go语言_时间篇

Go的time包是标准库中的包之一 不用说,几乎是开发必须用到的包之一。time包的说明文档在: http://golang.org/pkg/time/ 先注意下Overview中的一句话: The calendrical calculations always assume a Gregorian calendar. 这个包的时间计算式是基于格里历,就是我们使用的公历。关于格里历的历史,可以看百度百科: http://baike.baidu.com/view/391054.htm 看看godo...阅读全文

阅读:6286 评论:0

go执行定时任务

自己写的go定时器执行任务,欢迎拍砖。 package main import ( "fmt" "time" "bufio" "os" "strings" "errors" "io/ioutil" "strconv" "regexp" "net/http" ) var taskList []*Task type MyTimer struct{ Config []map[string]interface{} } func NewMyTimer() *MyTimer{ return &MyTimer...阅读全文

2016/09/02 15:27 qii
阅读:7416 评论:0

golang实践-如何实现高性能的定时任务管理器

前段时间,因为业务需要,实现了单协程、单timer的多定时任务管理器,其特点在于: 1、能够添加一次性、重复性任务,并能在其执行前撤销或频繁更改。 2、支持同一时间点,多个任务提醒。 3、适用于中等密度,大跨度的单次、多次定时任务。 4、支持10万次/秒的定时任务执行、提醒、撤销或添加操作,平均延迟10微秒内 5、支持注册任务的函数调用,及事件通知。 代码比较简单,也分享到github,有兴趣的可以看看:定时器源代码。目前版本还处于维护阶段,接口可能会有点变化,或许还会根据我们的业务调整增加第三...阅读全文

2017-02-22 14:08 qq_26981997
阅读:13791 评论:0

Go 标准库介绍二: time

介绍Go 标准库 time 常用导出函数,结构体及其方法。 import "time" 12 import "time" time包提供显示和计算时间用的函数。 1. 时间处理类型 Go 中时间处理依赖的数据类型: time.Time, time.Month, time.Weekday, time.Duration, time.Location。 1.1 time.Time 时间点 time.Time 代表一个纳秒精度的时间点. /usr/local/go/src/time/time.go 定义...阅读全文

阅读:3449 评论:0

golang panic recover

Go语言中异常处理painc()和recover()的用法 1、Painc用法是:用于抛出错误。Recover()用法是:将Recover()写在defer中,并且在可能发生panic的地方之前,先调用此defer的东西(让系统方法域结束时,有代码要执行。)当程序遇到panic的时候(当然,也可以正常的调用出现的异常情况),系统将跳过后面的代码,进入defer,如果defer函数中recover(),则返回捕获到的panic的值。 2、代码: package main import "fmt" ...阅读全文

2017-07-09 17:03:49 杰克慢
阅读:871 评论:0

Go 系列教程 —— 1. 介绍与安装

这是我们 Golang 系列教程的第一个教程。 ## Golang 是什么 Go 亦称为 Golang (译注:按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编译型的静态语言。 Golang 的主要关注点是使得高可用性和可扩展性的 Web 应用的开发变得简便容易。(译注:Go 的定位是系统编程语言,只是对 Web 开发支持较好) ## 为何选择 Golang 既然有很多其他编程语言可以做同样的工作,如 Python...阅读全文

2017-11-22 14:18:25 heyulong
阅读:43069 评论:10

Go 系列教程 —— 9. 循环

这是 Go 语言系列教程的第 9 部分。 循环语句是用来重复执行某一段代码。 `for` 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 `while` 和 `do while` 循环。 ## for 循环语法 ```go for initialisation; condition; post { } ``` 初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 `true` ,则 `{}` 内的循环体将在 ...阅读全文

阅读:21261 评论:5

golang string转换数组

在golang中, 有数组和切片两种类型. 切片是引用类型,而数组是值类型. 如果想在函数中传入数组的指针参数, 则必须指定数组的数量, 如 func stringToRuneArr(s string, arr *[5]rune) 如果去掉 arr *[5]rune 中的5, 则指参数变成了切片类型, 数组的指针就传不进去了, 编译会报错, 那么难道一定要写死数组的长度吗? 这样也太不优雅. 经过一番搜索, 发现其实方法很简单, 就是把函数的参数改为切片, 然后传数组的切片进去. 因为切片是引用...阅读全文

2018-07-24 23:53 elonlee
阅读:23061 评论:0

并发与锁

并发与锁 JUC AQS AQS整体结构 锁的获取过程 CAS rote 回转数的问题 获取失败挂起的过程 释放锁唤醒等待的过程 如何防止丢失唤醒 入队时不能“贪睡”,找可靠等待者并让他叫醒自己,不在进而就获取锁,其他所有情况都告诉标记前驱别忘了叫醒自己 这就够了吗,显然还不行;满足自己去“睡”的条件的check和“睡”显然不是一个原子操作。在check后和“睡着”前如果条件变了就没人叫醒 unpark和park早就预防相关问题,猜想内部是有变量记忆了上次的操作后状态,同时基于操作系统提供的锁保...阅读全文

2018.08.05 22:12* 七赤九紫星
阅读:1819 评论:0