golang
文章平均质量分 62
dota爱好者
略
展开
-
golang元转分、分转元
参考https://godoc.org/github.com/shopspring/decimal#example-NewFromFloat代码package digitalConverimport ( "fmt" "github.com/shopspring/decimal")//一分钱转一块钱,//分转元func Fen2Yuan(price uint64) strin...原创 2020-04-11 15:15:13 · 3453 阅读 · 0 评论 -
使用json.RawMessage处理api返回时部分字段类型不定的情况
背景当遇到请求的api返回数据结构中,部分字段的类型不能确定时,可以在定义结构体该字段时,指定其类型为json.RawMessage,这样当从api取返回数据时,json.Unmarshal后,该字段仍然是[]byte类型,而我们可以对这一个字段再做针对性的处理。/*{“type”:“File”,“data”:{“filename”:“this is a file”}}{“t...原创 2020-04-11 14:02:58 · 2665 阅读 · 1 评论 -
simpleJson处理api返回数据结构不确定的情况
SimpleJson包的简单使用代码展示借鉴代码展示下面展示一些 内联代码片。// A code blockpackage jsonPracimport ( "fmt" simplejson "github.com/bitly/go-simplejson")func Unmarshal(s string) { res, err := simplejson.NewJson...原创 2020-04-09 20:51:53 · 450 阅读 · 0 评论 -
golang测试
Go 程序编写三类测试,即:功能测试(test)、基准测试(benchmark,也称性能测试),以及示例测试(example)。测试源码文件的主名称应该以被测源码文件的主名称为前导,并且必须以“_test”为后缀。对于功能测试函数来说,其名称必须以Test为前缀,并且参数列表中只应有一个*testing.T类型的参数声明。对于性能测试函数来说,其名称必须以Benchmark为前缀,并且唯...原创 2019-04-04 15:24:53 · 529 阅读 · 0 评论 -
Golang的Panic和Recover
原文来自:https://golangbot.com/panic-and-recover/什么是 panic?在 Go 语言中,程序中一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 pani...转载 2019-03-26 11:49:17 · 2734 阅读 · 1 评论 -
map-字典的底层、约束和操作
Go 语言的字典类型其实是一个哈希表(hash table)的特定实现,它能存储的不是单一值的集合,而是键-元素对的集合。在这个实现中,键和元素的最大不同在于,前者的类型是受限的,而后者却可以是任意类型的。带着问题map的底层结构是什么样的?map的键值映射过程?键不能是哪些类型?为什么?map是什么情况下扩容?for range map为什么是无序的?map基础数据结构ma...原创 2019-03-19 01:42:39 · 572 阅读 · 0 评论 -
container包
container/list链表一个很大的优点:插入快,删除快。而数组的有优点就是遍历快,索引快。故链表适合于那些频繁插入删除操作的场景。数组适合于那些多次查询的场景。golang语言的链表实现在标准库container/list中。使用案例:作为构造队列、栈的基础数据结构。list包含两个公开的程序实体,List和Element;是一个带哨兵头节点的双向链表list在内部就是一个双...原创 2019-03-21 16:53:31 · 582 阅读 · 0 评论 -
golang底层数据类型实现原理
虽然golang是用C实现的,并且被称为下一代的C语言,但是golang跟C的差别还是很大的。它定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struct来实现。了解golang的数据类型和数据结构的底层实现,将有助于我们更好的理解golang并写出质量更好的代码。基础类型源码在:$GOROOT/src/pkg/runtime/runtime.h...转载 2019-03-17 23:04:04 · 2400 阅读 · 0 评论 -
unsafe.sizeof()
描述// Sizeof takes an expression x of any type and returns the size in bytes// of a hypothetical variable v as if v was declared via var v = x.// The size does not include any memory possibly refere...原创 2019-03-17 22:24:26 · 4165 阅读 · 0 评论 -
flag包
命令源码文件如何接收参数?Go 语言标准库中有一个代码包专门用于接收和解析命令参数,即flag包。使用案例根据运行程序时给定的参数问候某人package mainimport ( "flag" "fmt")var name stringfunc init() { flag.StringVar(&name, "name",原创 2019-03-17 18:34:44 · 1259 阅读 · 0 评论 -
select块
select块是为channel特殊设计的语法,它和switch语法非常相近。分支上它们都可以有多个case块和做多一个default块,但是也有很多不同.特性包含默认分支和候选分支候选分支中的case表达式都会在该语句执行开始时先被求值,并且求值的顺序是依从代码编写的顺序从上到下的select 到 括号{之间不得有任何表达式fallthrough关键字不能用在select里面所有的...原创 2019-03-17 15:44:23 · 231 阅读 · 0 评论 -
golang概述
概述一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言常识每个go源代码文件的开头都是一个package声明,表示该go代码所属的包;包是go语言中最基本的分发单位,也是工程管理中依赖关系的体现。要生成go可执行程序,必须建立一个名为main的package,并且在该package中包含一个叫main()的函数;Go语言的main()函数不能带参数,也不能定义返回值,传入...原创 2019-03-17 14:52:08 · 414 阅读 · 0 评论 -
通道(channel)
描述主要用于多个goroutine间传递数据.一个通道相当于一个先进先出(FIFO)的队列.channel用来在协程[goroutine]之前传递数据,准确的说,是用来传递数据的所有权。一个设计良好的程序应该确保同一时刻channel里面的数据只会被同一个协程拥有,这样就可以避免并发带来的数据不安全问题[data races]。官方的go编译器限制channel最多能容纳到65535个元...原创 2019-03-17 14:32:02 · 3961 阅读 · 1 评论 -
切片(slice)
slice 数据结构type slice struct { array unsafe.Pointer //指向底层数组的指针 len int //切片中元素个数 cap int //切片总容量}golang 源码基于数组或者slice生成一个slice的时候,新的slice和原来数组/slice 的底层数组是同一个基于数组或者slice生成sl...原创 2019-03-17 12:53:04 · 730 阅读 · 0 评论 -
sync.Map
原文地址:The new kid in town — Go’s sync.Map对Go1.9中新加入的类型sync.Map的学习和探索性分析。Go1.9出来后,我就迫不及待的开始尝试接触sync包中新加入的sync.Map容器了。首先,为什么要将它加入到标准库中?它又应该在哪里使用?不幸的是,答案是:除非...转载 2019-03-17 11:06:04 · 3986 阅读 · 0 评论