![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang
王者之路001
解决问题才是王道!
展开
-
golang数字转字符串方法
在golang中,有多种数字转字符串的方法。1)fmt方法fmt 包应该是最常见的了,从刚开始学习 Golang 就接触到了,写 ‘hello, world' 就得用它。它还支持格式化变量转为字符串。关于fmt的sprintf的定义如下:func Sprintf(format string, a ...interface{}) stringSprintf formats acco...原创 2019-06-13 12:12:30 · 7842 阅读 · 2 评论 -
golang的sort库
1.golang中排序 排序是程序员要考虑的主要算法之一。在不同语言中会实现不同的排序,C默认是对数组进行排序, C++是对一个序列进行排序, Go则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个slice(分片, 类似于数组),或是包含 slice 的一个对象。 golang中的排序主要通过sort库;sort库的排序可以通过插入排序、归并排序、堆排...原创 2019-07-02 17:33:29 · 758 阅读 · 0 评论 -
golang中获取字符串长度的办法
1.不同字符与获取字符串长度 获取字符串长度,是字符串操作的重要方法。理论来说,获取字符串长度,只要从头到尾查找一遍就可以了。但遗憾的是,不同字符具有不同的编码格式。拉丁字母一个字符只要一个字节就行,而中文则可能需要两道三个字节;UNICODE把所有字符设置为2个字节,UTF-8格式则把所有字符设置为1--3个字节。 因此,字符串长度的获得,不等于按字节数查找,而要根...原创 2019-07-02 11:59:28 · 6527 阅读 · 0 评论 -
golang中implicit assignment of unexported field问题
在golang中,如果结构体的内部变量在别的包调用,会出现类似“implicit assignment of unexported field”的问题。因为,在golang中,软件结构是以包为单位的,在同一个包内属于内部,不同包之间属于包间。给外部包用的变量,必须首字母大写,否则就会出现上述问题。同时,结构体内部的变量,如果不声明为首字母大写的变量,也会出现该问题。PS:Golan...原创 2019-07-02 11:43:33 · 6002 阅读 · 0 评论 -
golang生成随机ID的方法之ObjectID
1.ObjectIDObjectID是一般是MongdoDB中的对象。MongoDB中存储文档必须有一个“_id”键,这个键默认为Object对象。ObjectID相对于字符串有多方面好处:1)方便查询;2)含有有用信息,比如创建日期等信息;3)占用磁盘空间小。2.ObjectID原理ObjectID是BSON(Binary JSON)类型的数据,由12位值组成。1...原创 2019-06-18 17:29:03 · 3648 阅读 · 0 评论 -
golang的BitSet
1.BitSet是什么BitSet是借鉴位图(BitMap)概念创造的一个数据结构。所谓的BitMap 就是用一个 bit 位来标记某个元素对应的 Value,而 Key 即是该元素。由于采用了 Bit 为单位来存储数据,因此在内存占用方面,可以大大节省。(《编程珠玑》第一章引入的问题,提到了 Bitmap)BitSet的好处是用很小的空间标记已存的数据(每一bit对应)。在查找中,我...原创 2019-06-25 16:56:05 · 1483 阅读 · 0 评论 -
golang中cannot refer to unexported name问题
今日在golang中编写了个特定包,该包的某个函数试图让外部引用。结果,在外部引用中,该函数发生错误:cannot refer to unexported name。比较奇怪的是,其他函数可以被引用。后来发现一个golang的语法:模块中要导出的函数,必须首字母大写。PS:1)C语言外部引用的函数,没有这个限制; 2)C语言会有extern C或者extern说...原创 2019-06-12 13:14:29 · 12540 阅读 · 2 评论 -
golang全局变量
任何编程语言中都有全局变量和局部变量。在golang中,全局变量的生命周期属于整个包,这个和C不同,因为C语言没有包的概念。在golang的main包中,main包定义的全局变量无法被其他包引用。如果想使用全局变量,建议在其他包中定义并进行引用。在golang中,局部变量的生命周期属于花括号之内,这和C语言一致。还有,注意全局变量声明了一个变量之后,如果再声明一个同名局部变量,...原创 2019-06-12 12:05:53 · 6807 阅读 · 0 评论 -
golang同步机制之通道
1.通道是什么通道,在golang中的形式为类型为chan,是golang中同步的两个机制之一(另一个是WaitGroup)。chan的语法形式如下:ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .chan的类型可以是chan、chan<-、<-chan任意一种+数据类型(如i...原创 2019-06-21 16:18:08 · 555 阅读 · 0 评论 -
golang的atomic原子操作
1.atomic是最轻量级的锁,在一些场景中非常有效。2.atomic的原理是CAS操作,该操作的优势是,可以在不形成临界区和创建互斥量的情况下完成并发安全的值替换操作。这可以大大的减少同步对程序性能的损耗。 当然,CAS操作也有劣势。在被操作值被频繁变更的情况下,CAS操作并不那么容易成功。3.原子操作函数分为下面系列函数,其中Xxx可以是Int32/Int64/Uint32/Ui...原创 2019-06-17 13:24:23 · 6614 阅读 · 0 评论 -
golang字符串拼接方式
字符串拼接是字符的常见操作。在golang中,遇见了字符串拼接。作为一个长期的C程序员,我第一反应是:字符串拼接函数strcat,但发现golang并无字符串拼接函数。 我想起了最简单的方法,通过+操作符进行字符串拼接。 但我查了相关资料后发现:golang中的string类型也是只读且不可变的;因此,这种拼接字符串的方式会导致大量的string创建、销毁和内...原创 2019-06-11 12:13:19 · 1139 阅读 · 0 评论 -
golang中 json.Marshal 特殊字符转义问题
模拟了一个http服务器,在对json进行格式化之后,http客户端(我用的是postman)收到了json,我发现json中有转义字符 "\u002",但符号 & 消失了。 查了相关资料,发现是我的用的json.Marshal方法的原因。json.Marshal方法会把部分字符转为转移字符,从而方便前端的把JSON转为HTML。 查了部分资料,有这...原创 2019-06-11 11:31:28 · 10444 阅读 · 0 评论 -
golang并发控制方法WaitGroup
1.WaitGroup的作用WaitGroup是Golang并发的两种方式之一,一个是Channel,另一个是WaitGroup。WaitGroup的API只有3个,非常简单好用,但是有各种坑。2.WaitGroup的用法WaitGroup有3个API:1)Add(delta int):增加/减少若干计数2)Done:减少 1 个计数,等价于 Add(-1)3)Wait:等...原创 2019-06-20 19:27:50 · 5453 阅读 · 0 评论 -
golang捕捉异常
1.异常信号POSIX.1-1990标准中定义的信号列表如下:信号 值 动作 说明 SIGHUP 1 Term 终端控制进程结束(终端连接断开) SIGINT 2 Term 用户发送INTR字符(Ctrl+C)触发 SIGQUIT 3 Core 用户发送QUIT字符(Ctrl+/)触发 SIGILL ...原创 2019-06-20 19:14:20 · 1918 阅读 · 0 评论 -
三目运算
1. C语言三目运算C语言的三目运算表达式为 ?:,该表达式用法如下 a > b ? a : bC语言的三目运算可以作为简单函数,比如模板函数(模板确切说不是纯C语言,而是C++):template<Type T>T max(T a, T b){ return a > b ? a : b;}2.python三目运算python 的...原创 2019-06-20 14:33:03 · 3509 阅读 · 2 评论 -
golang数字、布尔值转字符串
1.golang数字、布尔值转字符串的方法golang的数字和布尔值转字符串,可以用strconv包。strconv提供了如下几个函数提供转换:1)funcFormatBool(bbool)stringFormatBool 将布尔值转换为字符串 "true" 或 "false"2)func FormatFloat(f float64, fmt byte, prec, bi...原创 2019-06-20 13:16:24 · 5434 阅读 · 0 评论 -
golang import加“.” 和 “_”
golang的import表示导入包,其中. 和 _ 分别有特殊含义。.表示导入以后,该包的函数和变量不需要再直接写入包名称。_的作用就更特殊。当导入一个包的时候,该包的init和其他函数都会被导入;但不是所有函数都需要. "_"符号可以只导入init,而不需要导入其他函数。...原创 2019-06-14 16:15:13 · 4658 阅读 · 3 评论 -
golang的logrus取消标准输出
golang的logrus库,会进行标准输出。如果把日志输出到ES上,不需要再进行标准化输出,可以用方法如下:logger := logrus.New() src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend) if err != nil { fmt.Println("Open S...原创 2019-07-10 18:41:36 · 2673 阅读 · 0 评论