Go语言中文网 为您找到相关结果 970

Golang 标准库:strconv 包的应用

strconv包 strconv包主要用于字符串与其他类型的转换。一般来说,几乎所有的类型都能被转换成字符串,但是从字符串转换成其他类型就不一定能成功了。 从数字类型转换到字符串,我们可以使用strconv.Itoa和strconv.FormatFloat()等函数,Itoa是把十进制数转换成字符串,FormatFloat是将64位浮点型的数字转换成字符串。 strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) 其中,fmt表示格式(其值可以是 'a', 'b', 'c'),prec表示精度,bitSize的值是32就表示float32,是64就表示float64。 从字符串到数字类型,也可以使用strconv.Ato...阅读全文

博文 2020-06-03 16:32:44 sunlingbot

Go并发编程

我想纠正一下 golang 中这(又)一个广为流传的误解:“Channel 优于锁机制” 或者 "Channel 取代锁机制"。对于很多情况下,我们既可以使用锁机制,也可以使用 Channel 来实现同一个目标,然而实际针对某个特定问题时,可能使用 Channel 会更加方便,但另外一些问题,使用锁机制会更加方便。Go wiki 上给出了一个回答:Use whichever is most expressive and/or most simple.Channel 和锁机制在 golang 中不是替代和被替代的关系。如果你试图用一种方式解决所有问题,那么必定会遇到让你抓狂的情况。最后附上一句话:Share memory by communicating, don't communicate ...阅读全文

博文 2019-01-14 17:34:45 下一块巧克力_14b6

golang 标准库间依赖的可视化展示

简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内容,网上也要讨论,但是没有发现直接能拿过来用的.标准库之间,是必然存在依赖关系的,不同库被依赖的程度必然是不一样的.但究竟有多大差别呢? 以下内容,数据源自真实环境的 golang 1.9 版本的标准库.所以,本文不仅是一篇可视化相关的讨论文章,更是提供了一个可以直接探究 golang 标准库间依赖关系的快速梳理工具. 数据准备 标准库各个包之间的相互关系,可以直接通过命令获取,然后简单变换为一个标准的 JSON 对象: go list -json std 示例输出: { "Dir": "/usr/local/go/s...阅读全文

博文 2017-10-08 20:03:21 ios122

Golang 博主走过的有关 error 的一些坑

Desc:为什么值为 nil 的 error 却不等于 nil 本片文章用来记录我在 Golang 开发学习过程中遇到的有关 error 的一些坑。或许你也遇到,或许你能在这里找到答案。当然通过 error 的例子,你也应该联想到其它场景。 err != nil 第一个问题是:为什么值为 nil 的 error 却不等于 nil? 思考如下代码: package main import ( "errors" "fmt" ) type Err struct { err string } func (e *Err) Error() string { return e.err } func returnErr() *Err { return nil } func main(...阅读全文

博文 2017-06-06 09:06:57 deepzz

兄弟连区块链教程区块链背后的信息安全2DES、3DES加密算法原理一

区块链教程区块链背后的信息安全2DES、3DES加密算法原理一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # DES、3DES加密算法原理及其GO语言实现 DES加密算法,为对称加密算法中的一种。70年代初由IBM研发,后1977年被美国国家标准局采纳为数据加密标准,即DES全称的由来:Data Encryption Standard。 对称加密算法,是相对于非对称加密算法而言的。两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。 常见的DES、3DES、AES均为对称加密算法,而RSA、椭圆曲线加...阅读全文

Coroutine

概述 协程可能是近几年来最新的并行/并发模型实现,常见语言中最早的实现可能是lua,近年来新晋语言golang的崛起更把这个概念发扬光大。 Kotlin 的实现设计思路有以下几个特点: 尽可能不使用核心语言,而是标准库来实现。 标准库只提供核心功能,官方的第三方库提供应用层接口。 异步等操作使用协程封装,同时协程可用于其他方面尽可能替代线程。 尽管如此,官方也不得不加入suspend关键字来标记协程可挂起函数,同时协程的实现也需要编译器支持。 suspend关键字与C#等语言中的async关键字很接近。线程的调度由操作系统完成,而协程需要由运行时管理。为了标记一个函数可以被运行时挂起,需要此关键字。当然协程的范围比异步更广,这里不再赘述...阅读全文

博文 2018-12-15 21:34:44 weiminsir

笨办法学golang(三)

这是Go语言学习笔记第三篇。 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 Go语言基本类型主要有布尔类型,数字类型,字符串类型以及新增的错误类型。 布尔(bool)类型 布尔类型的值只能是常量true或false.例如var v bool = true func mian() { var v1, v2 bool v1 = true v2 = 1 v3 := false v4 := (1 != 2) fmt.Printf("%v %v %v %v", v1, v2, v3, v4) } //为了节省篇幅,以后的示例代码自动省略package mian以及import包语句,不再赘述。 运行上述代码,会发现第4行报编译错误,原因是布尔类型不接受其他类型的赋值,不支持自动或强制类型...阅读全文

博文 2019-02-17 17:34:45 Morgansays

fasthttp中运用哪些go优化技巧?

fasthttp刚出道的时候号称比net/http快十倍,更少的内存分配。并同时在github上给出一些go开发上的小技巧。本文主要通过源码来窥探下fasthttp里是如何使用这些技巧的。减少[]byte的分配,尽量去复用它们两种方式进行复用:sync.Poolslice = slice[:0]。所有的类型的Reset方法,均使用此方式。例如类型URI、Args、ByteBuffer、Cookie、RequestHeader、ResponseHeader等。fasthttp里共有35个地方使用了sync.Pool。sync.Pool除了降低GC的压力,还能复用对象,减少内存分配。// 例如类型Servertype Server struct { // ... ctxPool sync.Poo...阅读全文

博文 2019-12-03 19:08:15 木白的技术私厨

Docker(1):Virtualbox Install Centos7 & Docker

1,关于docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。 在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。 摘自: http://dockerpool.com/static/books/docker_practice/...阅读全文

博文 2017-07-12 10:24:23 freewebsys

使用go/scanner库来查找golang标准库源码中最常用的标识符

在YouTube上又看了Francesc Campoy大神的视频。这一期他主要讲了go/scanner库的用法。那么什么是go/scanner呢? 官方的定义是: Package scanner implements a scanner for Go source text. It takes a []byte as source which can then be tokenized through repeated calls to the Scan method. 翻译过来就是: scanner包实现了一个对于go源码文本的扫描器,它把[]byte作为一个源,通过重复的调用Scan方法来进行标记 以下是官方给的例子: package main import ( "fmt" "go/sc...阅读全文

博文 2020-03-20 05:32:43 zooeymoon

C++标准库读书笔记: Concurrency

由于多核的出现,使用多线程能够显著提高性能。 C++11之前,C++并没有对并发提供语言层面的支持,C++标准库也没有。C++11之后: 语言层面,定义一个内存模型,保证在两个不同线程中对两个对象的操作相互独立,增加了 thread_local 关键字。 标准库提供了对开启多线程、同步多线程的支持。 The High-Level Interface: async() and Futures async() 提供了接口让一个可调用的对象(如某个函数)在独立的线程中运行。 future<> 类 允许等待某个线程完成,并访问其结果。 一个使用 async() 以及 Future 的例子 计算 func1() + func2(): 如果是单线程,只能依次运行,并把结果相加。总时间是两者时间之和。 多...阅读全文

博文 2017-09-30 07:34:47 找不到工作

现代软件开发流程-by 12-Factor

简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论: 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。 这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。 背景 本文的贡献者参与过数以百计的应用程序的开发和部署,并通过 Heroku 平台间接见证了数十万应用程序的开发,运作以及扩展的过程。...阅读全文

博文 2019-08-14 23:02:40 如来神掌

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境[golang快速入门[2.1]-go语言开发环境配置-windows]()[golang快速入门[2.2]-go语言开发环境配置-macOS]()[golang快速入门[2.3]-go语言开发环境配置-linux]()本文将介绍如何书写、编译、并运行第一个go语言程序同时详细介绍其内部机制书写第一个go语言程序首先我们可以在任意位置新建一个文件,命名为main.gogo源文件以.go作为后缀,命名时建议统一为小写英文字母用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码package main import "fm...阅读全文

博文 2020-02-09 00:33:10 jonson_jackson

001 go语言开发环境配置

ubuntu系统安装Go和liteide及环境配置 一、通过apt-get安装 1、安装 sudo apt-get install golang 2、设置GOPATH变量 GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOPATH库目录,所有的非标准库都放在GOPATH下。以GOPATH为“/home/zzh/gopath”目录为例子: image.png (1)把export GOPATH=/home/zzh/gopath 加入到~/.bashrc文件的最后。 (2)source ~/.bashrc 重新加载配置 image.png 这样就加好了GOPATH。注意:apt-get命令安装只能安装go1.6版本现在很多开源项目都用上了1.7以上建议手动安装更高版本。 二. 压缩包...阅读全文

博文 2019-10-19 10:32:56 aside section ._1OhGeD

Golang IO包的妙用

Golang 标准库对 IO 的抽象非常精巧,各个组件可以随意组合,可以作为接口设计的典范。这篇文章结合一个实际的例子来和大家分享一下。 背景 以一个RPC的协议包来说,每个包有如下结构: type Packet struct { TotalSize uint32 Magic [4]byte Payload []byte Checksum uint32 } 其中 TotalSize 是整个包除去 TotalSize 后的字节数, Magic 是一个固定长度的字串,Payload 是包的实际内容,包含业务逻辑的数据。Checksum 是对 Magic 和 Payload 的adler32 校验和。 编码(encode) 我们使用一个原型为func EncodePacket(w io.Write...阅读全文

博文 2018-11-13 22:34:39 Chole121

golang 标准库间依赖的可视化展示

简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内容,网上也要讨论,但是没有发现直接能拿过来用的.标准库之间,是必然存在依赖关系的,不同库被依赖的程度必然是不一样的.但究竟有多大差别呢? 以下内容,数据源自真实环境的 golang 1.9 版本的标准库.所以,本文不仅是一篇可视化相关的讨论文章,更是提供了一个可以直接探究 golang 标准库间依赖关系的快速梳理工具. 数据准备 标准库各个包之间的相互关系,可以直接通过命令获取,然后简单变换为一个标准的 JSON 对象: go list -json std 示例输出: { "Dir": "/usr/local/go/s...阅读全文

博文 2017-10-09 01:30:02 ios122

Go的栈空间管理

栈空间管理的基本逻辑go语言通过goroutine提供了并发编程支持,goroutine是go运行库的功能,而不是操作系统线程实现的,goroutine可以被理解成一个用户态的线程。既然goroutine是由go运行库管理的,那么go运行库也需要为每个goroutine创建并管理相应的栈空间,为每个goroutine分配的栈空间不能太大,goroutine开多时会浪费大量空间,也不能太小,会导致栈溢出。go语言选择栈的栈空间管理的方式是,一开始给一个比较小的空间,随着需要自动增长。当goroutine不需要那么大的空间时,栈空间也要自动缩小。分段栈 Segment Stacks在go 1.3之前,go使用分段栈。分段栈实现了一种不连续但是可以持续增长的栈,开始时,栈只有一个段,当需要更多的栈...阅读全文

博文 2018-10-17 10:03:14 simpleapples

golang 项目实战简明指南

开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行程序。本文不再赘述如何搭建 golang 开发环境,只说明下需要注意的地方。 从官网下载对应平台的 golang 安装包中包括 golang 的编译器、一些工具程序和标准库源码。早期的 golang 版本中,需要设置 GOROOT 和 GOPATH 两个环境变量。 从 1.8 版开始,GOPATH 不再需要显示设置。如果没有显示设置,则 GOPATH 的默认值为 $HOME/go 。GOPATH 可以设置多个目录,但推荐只设置一个或直接使用默认值,多个 GOPATH 会造成依赖管理的困难。推荐将 $GOP...阅读全文

博文 2018-12-10 14:43:13 litang.me

聊聊新的Go语言错误处理方案

今天早些时候,golang/x/exp中默默的更新了一个名曰xerrors的包,这个包和同样处于golang/x/exp下的另一个名叫errors的包名字十分相似,就连介绍也都一致: 123 Package errors implements functions to manipulate errors.This package implements the Go 2 draft designs for error inspection and printing 从目前的情况来看,基本上错误的处理形式基本已经定型,处理方式则是类似于之前的另一个github.com/pkg/errors包,但是具体细节不尽相同。 如何处理error?在之前介绍文章中提到过github.com/pkg/erro...阅读全文

博文 2020-02-22 17:56:09 ipfans's Blog

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境[golang快速入门[2.1]-go语言开发环境配置-windows]()[golang快速入门[2.2]-go语言开发环境配置-macOS]()[golang快速入门[2.3]-go语言开发环境配置-linux]()本文将介绍如何书写、编译、并运行第一个go语言程序同时详细介绍其内部机制书写第一个go语言程序首先我们可以在任意位置新建一个文件,命名为main.gogo源文件以.go作为后缀,命名时建议统一为小写英文字母用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码package main import "fm...阅读全文

博文 2020-02-09 00:33:10 jonson_jackson

Go36-8-链表

链表 Go语言的链表实现在其标准库的container/list代码包中。 这个包包含了2个程序实体: List : 实现了一个双向链表 Element : 代表了链表中元素的结构 操作链表 移动链表里的元素: func (l *List) MoveBefore(e, mark *Element) // 把元素e移动到mark元素的前面 func (l *List) MoveAfter(e, mark *Element) // 把元素e移动到mark元素的后面 func (l *List) MoveToFront(e *Element) // 把元素e移动到链表的最前端 func (l *List) MoveToBack(e *Element) // 把元素e移动到链表的最后端 上面的方法都...阅读全文

博文 2019-01-06 13:35:21 骑士救兵

2019-12-29 golang的单方法接口

golang的单方法接口 所谓单方法接口,就是指“仅有一个成员方法的interface类型”。例如: // Eater 进食。 type Eater interface { Eat(food string) (error) } 注意:一般单方法接口的命名惯例是 ”方法名称“+“er“ 。 gopl教程提倡单方法接口。为什么呢?除了职责单一之外,更是非常灵活,因为接口可以组合。如果说单方法接口比较”窄“,通过组合多个单方法接口,就可以立即得到一个更“宽”的接口。如同积木可以通过基本颗粒构建不同的形状。 golang面向接口编程,没有一般意义上的基类与子类的对应的概念 。 若有一系列相似的类型,各自提供接口的方法集合中的不同部分,此时若把接口的方法集合拆开,全部定义成单方法接口,就可以很灵活地实...阅读全文

博文 2019-12-29 22:32:44 _部洪波_

golang 基础(19)字符串

square-gopher.png 字符和字符串处理 func main(){ s := "Yes我爱Go!" fmt.Printf("%s\n",[]byte(s)) } 这样打印出是就是 "Yes我爱Go!"、打印一下(fmt.Println(len(s)))输出 s 长度为 12 。那么这个 12 是怎么来的呢。 fmt.Printf("%X\n",[]byte(s)) 可以打印出里面具体字节的数字,会使用 %X 来打印字节 596573E68891E788B1476F21 这样并不便于观察,我们可以通过 for 循环来讲字符一个一个打印出来 for _, b := range []byte(s){ fmt.Printf("%X ",b) } fmt.Println() 59 65 7...阅读全文

Golang构建Python高性能模块

package mainimport "C"​//指定那些函数能被外部调用//export testfunc test() int{ //计算 0-1000000000 的和 var s int for a := 0; a <= 10000000000; a++ { s += a } return s}​//pxport addstrfunc addstr(a,b * C.char) *C.char{ merge := C.GoString(a) + C.GoString(b) return C.CString(merge)​}func main(){}编译生成动态链接库,生成的.so文件可以被python加载并调用但是有一个需要注意的地方:Python是利用ctypes来跟so模块进行交互...阅读全文

博文 2020-05-20 16:53:43 大熊_7d48

golang标准库之strings包

Contains 判断字符串是否包含子串 package main import ( "fmt" "strings" ) func main() { src := "It's a cat." fmt.Println(strings.Contains(src, "It's")) fmt.Println(strings.ContainsRune(src, 'C')) //判断字符串s是否包含utf-8码值r fmt.Println(strings.ContainsRune(src, 83)) fmt.Println(strings.ContainsAny(src, "ABC ")) // 判断字符串s是否包含字符串chars中的任一字符 fmt.Println(strings.HasPrefix...阅读全文

博文 2019-09-30 20:32:45 aside section ._1OhGeD

再测Golang JSON类库

写项目一直需要进行序列化,听到了,也看到了很多同学老师对各个golang的json库进行测评。那本人为什么还要继续进行这一次测评呢?因为实践过的知识最有说服力,也是属于自己的,我也希望看到本博文的同学老师可以修改和执行测评的代码执行一遍,我相信会有不一定的体会。本次测评我选择了类库有: 类库 序号 类库 地址 备注 1 encoding/json Golan 2 easyjson github.com/mailru/easyjson 3 ffjson github.com/mailru/easyjson 4 iterator/json github.com/json-iterator/go 主要是针对上述的类型进行,本人采用了对不同的类库使用不同的结构体(仅仅是结构体名称不同,字段顺序和类型...阅读全文

博文 2018-07-02 12:23:23 梦朝思夕

空类的大小

空类就是没有任何数据成员的类,这种类占用的内存大小在不同的语言里面有不同的实现 c struct A {}; printf("sizeof(A): %lu\n", sizeof(struct A)); // sizeof(A): 0 这个结果输出是0,也就是说 c 语言中的空类大小为 0 struct A a1; struct A a2; printf("address(a1): %p\n", &a1); printf("address(a2): %p\n", &a2); printf("&a1 == &a2: %d\n", &a1 == &a2); // address(a1): 0x7ffdead15ff0 // address(a2): 0x7ffdead15ff0 // &a1 ==...阅读全文

Gox语言目前支持的Go语言标准库与第三方库-GX4.2

Gox语言目前内置支持大多数Go语言(Golang)的官方标准库,也支持一些常用的第三方库。这些内置的库使用时无需导入,直接按一定的名称规则使用即可:类似 strings这样一级名称的ku直接使用即可,例如 strings.Contains(a, "b");对于多级的包名,规定“/”字符用下划线“_”代替,其他字符一律去除,例如 net/http直接用net_http引用即可。另外github.com这样的名称将去掉后面的“.com”后缀,例如github.com/topxeq/sqltk用github_topxeq_sqltk引用即可,gonum.org/v1/plot用gonum_v1_plot引用。而像github.com/topxeq/tk这样特别常用的库,还可以直接用tk这样的简称...阅读全文

博文 2020-05-31 22:33:19 陆满庭

Go 问答 101

本文译自 Go FAQ 101 版权@归原文所有. 编译器和运行时编译错误 non-name *** on left side of := 什么意思到现在为止(Go 1.10), 对于短变量声明有一个强制性规则: := 左侧的所有条目必须是纯标识符, 并且至少有一个是新变量名. 这意味着容器元素(x[i]), 结构体字段(x.f), 指针解引用(*)以及限制性标识符不能出现在 := 的左侧. 目前, 针对这个问题有一个公开 issue. 看起来 Go 作者们想把这个问题留到 Go 2.0. 编译错误 unexpected newline, expecting { … 什么意思在 Go 中, 我们不能在随意的位置折断一行代码. 具体细节可以阅读 Go 换行规则. 通过该规则, 一般来说, 在大...阅读全文

博文 2019-04-01 14:17:37 lingchao.xin

golang 基础(18)字符串

square-gopher.png 字符串 immutability 字符串是不可变类型 strigs 标准库提供字符串基本操作 strconv 字符串与其他类型的转换 func main() { var c byte = 'H' fmt.Println(c) mj := string(45) fmt.Println(mj) } 我们尝试输出c byte = 'H'``和string(45)`` 72 - 结果可能预期有些差别,如果我们将```mj := string(72)`` 我们就会得到 72 H 在 go 语言会将 sybmol(符号)看作数字,而将string是作为sybmole 的数组 "hello world" 在 go 眼里是数组[72 101 100 108 111...]...阅读全文

Eosforce开发周报 21-jan 2019

工作1. FORCE IBC解决方案中继链BP模式中继合约完成基本合约框架。2. FORCEIO添加bus插件。3. FORCE IBC解决方案中继链实现映射Token合约。4. FORCE IBC解决方案中继链设计Token互换合约实现方案。5. FORCEIO重构账户名实现, 支持定制账户名格式。6. FORCEIO重构系统合约账户初始化实现。7. goeosforce库支持FORCEIO。8. 钱包完善FORCEIO支持。下一周工作1. FORCE IBC解决方案中继链BP模式中继合约开发。2. FORCEIO完成基本的跨链Token映射过程。3. FORCE IBC解决方案中继链实现基本的Token互换合约。4. 实现一个简单的FORCEIO golang客户端链接库。EOSForc...阅读全文

博文 2019-01-25 22:34:43 苏博明

golang标准库中的sort包

一、sort包的内容,以及使用 sort包提供了排序切片和用户自定义数据集以及相关功能的函数。 sort包主要针对[]int、[]float64、[]string、以及其他自定义切片的排序。 接口 func Interface interface 结构体 type IntSlice struct type Float64Slice type StringSlice 函数 func Ints(a []int) func IntsAreSorted(a []int) bool func SearchInts(a []int, x int) int func Float64s(a []float64) func Float64sAreSorted(a []float64) bool func Se...阅读全文

博文 2018-12-12 15:34:47 laijh

基本类型介绍

Golang 有更明确的数字类型命名,支持 Unicode,支持常用数据结构。 WX20190219-003105@2x.png 支持八进制、 十六进制,以及科学记数法。标准库 math 定义了各数字类型取值范围。 a, b, c, d := 071, 0x1F, 1e9, math.MinInt16 空指针值 nil,而非C/C++ NULL。 基本类型应用: bool:只能存true和false uint uint8 uint16 uint32 uint64 uintptr byte // uint8 的别名 :字符类型 rune // int32 的别名,代表一个Unicode码,用UTF-8 进行编码。 rune 类型在什么时候使用呢? 例如需要遍 历字符串中的字符。可以循环每个字节...阅读全文

博文 2019-02-19 03:35:23 weifansym

老弟在吗,我怀疑Go标准库中的二分查找有bug!

"老弟在吗,我怀疑Go标准库中的二分查找有bug!" "老哥别慌,源码之前没有秘密,你坐下听我吹吹c++的牛逼。。" 下面这段Go代码,你觉得index的结果是多少? arr := []int{1, 3, 5, 7} index := sort.Search(len(arr), func(i int) bool { return arr[i] == 3 }) index的结果并不是1,而是4。(额,返回4是什么鬼,难道不应该找到就返回对应的下标,找不到就返回-1吗) 我们映象中的二分是这样的: while (low <= high) { mid := (low + high) / 2 if arr[mid] < target { low = mid + 1 } else if arr[mid...阅读全文

博文 2020-05-01 14:32:40 就想叫yoko

空类的大小

空类就是没有任何数据成员的类,这种类占用的内存大小在不同的语言里面有不同的实现 ## c ``` c++ struct A {}; printf("sizeof(A): %lu\n", sizeof(struct A)); // sizeof(A): 0 ``` 这个结果输出是0,也就是说 c 语言中的空类大小为 0 ``` c++ struct A a1; struct A a2; printf("address(a1): %p\n", &a1); printf("address(a2): %p\n", &a2); printf("&a1 == &a2: %d\n", &a1 == &a2); // address(a1): 0x7ffdead15ff0 // address(a2): 0...阅读全文

博文 2019-11-27 20:56:02 hatlonely

go语言之JSON与md5值

go语言之JSON与md5值 一、Json是什么? 是一种轻量级的数据交换语言,用于数据交换。Json由于比XML更小、更快、更易解析,以及浏览器的内建快速解析支持,使得其更实用于网络数据交互。目前我们看到很多的开放平台,基本上都是采用了JSON作为他们的数据交互的接口。go语言提供了内置的encoding/json 标准库,在github上提供了更快的json标准库,github.com/pquerna/ffjson/ffjson 二、JSON数据的编码和解码 编码函数: func Marshal(v interface{}) ([]byte,error) 解码函数: func Unmarshal(data []byte, v interface{}) error 三、代码实现Json编码...阅读全文

博文 2018-10-24 16:35:13 PowerMichael

使用golang反向代理统计api访问次数

前言 今天写点有趣的小东西。事情是这样的,我经常看到有些软件加了统计数据的sdk,之后就可以实现统计接口的访问量,接口负载等等数据。而这些功能不需要原有的软件做些什么,对原来的业务完全无入侵,我觉得这样的功能很有实用性,所以没有参考其他类似的软件或者工具,我想自己试试怎么实现这样的功能。 思路 首先,我们先给要做的工具起个名字,就叫monitor。要实现无侵入,那么只能是在业务软件外面套一层,经由业务软件的流量,都需要经过monitor这一层,这让人很容易得想到了网关的功能也是类似的。恰好,golang实现反向代理十分简单。所以,思路就有了。先实现一个反向代理,将经由业务的流量都由monitor反向代理给业务软件。接着,将访问的api放进通道中,对api进行分类,就可以统计api的访问量了。...阅读全文

博文 2020-03-15 15:32:43 onepunchgo

golang快速入门[3]-go语言helloworld

golang快速入门[3]-go语言helloworld 在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux 本文将介绍如何书写、编译、并运行第一个go语言程序 同时详细介绍其内部机制 书写第一个go语言程序 首先我们可以在任意位置新建一个文件,命名为main.go go源文件以.go作为后缀,命名时建议统一为小写英文字母 用任意的文本编辑器(vim,notepade,emacs…)编辑文件,书写如下代码 package main import "fmt...阅读全文

博文 2020-02-12 07:32:58 唯识相链2

[译] Part 30: Golang 中的Error处理

文地址:Part 30: Error Handling 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 什么是Error? Error表示程序中的异常情况。假设我们正在尝试打开文件,文件系统中不存在该文件,那么这是一种异常情况,它就代表一种error。 Go中使用内置的error类型表示错误。 就像任何其他的内置类型,如int,float64,... error可以存储在变量中,从函数返回等等。 例子 用打开了一个不存在的文件的示例程序来解释一下。 package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.txt") if err != nil { fmt.Println(err) ret...阅读全文

博文 2019-03-31 18:34:39 咔叽咔叽_7647

通过例子学习 Go 和 Rust ---- 类型与泛型

这两门语言都是强类型的,不过rust由于其特有的Trait机制,使得咱可以在编写函数的时候不指定参数类型,取而代之只指定类型所具有的Trait。go语言中一般就只针对某种类型来编写函数。 咱举个例子,对比一下rust和go标准库中是如何比较bytes的。 Go func Compare(a, b []byte) int { l := len(a) if len(b) < l { l = len(b) } if l == 0 || &a[0] == &b[0] { goto samebytes } for i := 0; i < l; i++ { c1, c2 := a[i], b[i] if c1 < c2 { return -1 } if c1 > c2 { return +1 } } s...阅读全文

博文 2020-03-04 18:33:42 Tericoder

Golang 源码剖析:log 标准库

Golang 源码剖析:log 标准库 日志 输出 2018/09/28 20:03:08 EDDYCJY Blog... 构成 [日期]<空格>[时分秒]<空格>[内容]<\n> 源码剖析 Logger type Logger struct { mu sync.Mutex prefix string flag int out io.Writer buf []byte } mu:互斥锁,用于确保原子的写入 prefix:每行需写入的日志前缀内容 flag:设置日志辅助信息(时间、文件名、行号)的写入。可选如下标识位: const ( Ldate = 1 << iota // value: 1 Ltime // value: 2 Lmicroseconds // value: 4 Llongf...阅读全文

博文 2019-03-26 09:30:33 EDDYCJY

13.Go语言标准库之time包

1.time包 time包提供了时间的系那是和测量用的函数。日历的计算采用的是公历。 1.1时间类型 time.Time类型表示时间。我们可以通过time.Now()函数获取当前的事件对象,然后获取时间对象的年月日时分秒等信息。 package main import ( "fmt" "time" ) func main() { now := time.Now() //获取当前时间 fmt.Printf("current time:%v\n", now) year := now.Year() //年 month := now.Month() //月 day := now.Day() //日 hour := now.Hour() //小时 minute := now.Minute() //分钟...阅读全文

博文 2020-02-06 20:33:17 DevOperater

Go 每日一库之 jsonrpc

简介 在上一篇文章中我们介绍了 Go 标准库net/rpc的用法。在默认情况下,rpc库内部使用gob格式传输数据。我们仿造gob的编解码器实现了一个json格式的。实际上标准库net/rpc/jsonrcp中已有实现。本文是对上一篇文章的补充。 快速使用 标准库无需安装。 首先是服务端,使用net/rpc/jsonrpc之后,我们就不用自己去编写json的编解码器了: package main import ( "log" "net" "net/rpc" "net/rpc/jsonrpc" ) type Args struct { A, B int } type Arith int func (t *Arith) Multiply(args *Args, reply *int) error...阅读全文

博文 2020-05-11 22:32:47 darjun

for-loop 与 json.Unmarshal 性能分析概要

for-loop 与 json.Unmarshal 性能分析概要 在项目中,常常会遇到循环交换赋值的数据处理场景,尤其是 RPC,数据交互格式要转为 Protobuf,赋值是无法避免的。一般会有如下几种做法: for for range json.Marshal/Unmarshal 这时候又面临 “选择困难症”,用哪个好?又想代码量少,又担心性能有没有影响啊... 为了弄清楚这个疑惑,接下来将分别编写三种使用场景。来简单看看它们的性能情况,看看谁更 “好” 功能代码 ... type Person struct { Name string `json:"name"` Age int `json:"age"` Avatar string `json:"avatar"` Type string ...阅读全文

博文 2019-06-15 10:52:36 EDDYCJY

golang标准库之sort

简介 标准库sort实现了4种排序方法,插入排序、堆排序、快排和归并排序,但是并没有暴露给用户接口。sort包会根据数据选择最优的排序方法(其实只使用了3种,归并排序除外)。 接口 用户需要实现以下接口才能使用sort包的排序功能。 type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements ...阅读全文

博文 2020-05-30 03:32:44 风铃草613

关于 Python_你一定没读过的8个技巧

介绍 Python 功能和小技巧的文章网上有无数篇,比如变量解压缩,partial 偏函数,枚举可迭代对象... 但关于 Python 我们能说的还有很多。所以今天我将向大家展示一些我知道和有使用过的特性,这些特性在其它文章或博客中很少被提及:### 消毒字符串输入对用户输入内容进行消毒几乎适用于你写的每一个程序。通常来说转换字符大小写的操作就足够了,有时候用 Regex 正则表达式就能完成,但对于比较复杂的情况,我们有更好的办法:```user_input = "This\nstring has\tsome whitespaces...\r\n"character_map = {ord('\n') : ' ',ord('\t') : ' ',ord('\r') : None}user_in...阅读全文

博文 2019-12-14 19:32:40 是程序员吖

golang 标准库间依赖的可视化展示

简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内容,网上也要讨论,但是没有发现直接能拿过来用的.标准库之间,是必然存在依赖关系的,不同库被依赖的程度必然是不一样的.但究竟有多大差别呢? 以下内容,数据源自真实环境的 golang 1.9 版本的标准库.所以,本文不仅是一篇可视化相关的讨论文章,更是提供了一个可以直接探究 golang 标准库间依赖关系的快速梳理工具. 数据准备 标准库各个包之间的相互关系,可以直接通过命令获取,然后简单变换为一个标准的 JSON 对象: go list -json std 示例输出: { "Dir": "/usr/local/go/s...阅读全文

博文 2017-10-08 20:34:47 iOS122

lesson-1:go 第一个程序

什么是 GO 程序 go 程序是一段简单的 UTF-8 编码的以 .go 结尾的文件。 GO 程序结构 package main // 创建一个 main 包,使用关键字 package import "fmt" // 从 Go 标准库中引入 fmt 包,使用关键字 import func main() { // 入口函数 fmt.Println("hello go") // fmt包中 Println 函数 } Go 程序都必须以一个包开头,必须包含一个 main 函数。main 函数是程序的入口函数。 $ go run ./hello.go // 执行 hello.go 文...阅读全文

博文 2020-01-14 11:32:44 Gabriel

14.Go语言标准库flag基本使用

Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 1.os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。 os.Args十一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。 package main import ( "fmt" "os" ) func main() { //os.Args是一个[]string if len(os.Args)>0{ for index,arg := range os.Args{ fmt.Printf("args[%d]=%v\n",index,arg) } } } 结果: ➜ test go build -o "args_demo" ➜ test...阅读全文

博文 2020-02-07 01:33:11 DevOperater

MySQL学习中,数据库事务有哪些特性?

MySQL数据库学习中,总有人会遇到问题,在面对问题的时候,我们一般都是自己先思索、解决,自己无法解答的时候,求助于他人。这是一个很好的习惯,有自学的能力,也有请教的态度。那么有朋友就问了,啥是数据库事务啊,事务又有哪些特性? 什么是数据库事务? ACID是逻辑上的一组操作,组成这个操作的各个单元,要不全部都成功,要不全部都失败,这个特性就是事务。 那事务有什么特性呢? 原子性(atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成 一致性(consistency):事物必须始终保持系统处于一致的状态,不管在任何给定的时间并发事物有多少。 隔离性(isolation):当多个事务并发访问同一个数据源时,数据库能够保持每个访问的事务之间是隔离的,互不影响。 持久化(durab...阅读全文

博文 2019-11-15 16:39:20 zhouzhou2018