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

最近在写一本书——《Golang标准库》

之前写过一序列Golang标准库学习的博文,感觉掌握标准库的用法还是挺重要的,于是,最近开始着手写一本书《Golang标准库》,可以直接在线看:https://github.com/polaris1119/The-Golang-Standard-Library-by-Example。目前已经完成了第一章的两个小节。 之前没有写过书,写的不好的地方望gopher们多多提意见...阅读全文

Go 语言坑爹的 WithCancel

Go 语言坑爹的 WithCancel 2018-05-05 Go 语言的 context 包里面有个 Context 接口。 type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{} } 同时还提供了一个 WithCancel 方法: func WithCancel(parent Context) (ctx Context, cancel CancelFunc) WithCancel 接受一个 Context 并返回一个 Context,返回的 ctx 里面的 Done() 函数...阅读全文

博文 2018-11-18 17:56:33 zenlife

我为什么选择使用Go语言?

谢孟军:EGO会员、GopherChina组织者、《Go Web编程》一书的作者,专注Golang技术架构。本文来自EGO会员群分享,入群方式见文末 在这里我主要想和大家分享一些Go和我个人的成长史。首先聊聊Go,在2009年全部开源出来后,它获得了当年的年度语言,但是直到2011年它才发布正式的稳定版本。Go稳定版发布时,Go Team承诺后续的版本都会兼容之前的版本。这对于我们开发者来说简直太重要了,Go后续的版本也一直在提升内功,从而可以让我们无缝的升级Go版本。 Go的核心贡献者 Go主要有静态语言、天生并发、内置GC、安全性高、语法简单、交叉编译和编译快速这几个方面的特性。这些特性决定了Go的三个高富帅特性:运行快、开发快和部署快,而这些特性都是针对Google遇到的一些痛点来设计...阅读全文

博文 2016-11-23 14:00:00 csdn265

浅析GO语言中如何优雅地中断定时任务

问题描述 现在我们创建了一个定时器,能定时的去做某件事,并且在执行时间超时的时候,能把这个定时器关掉。例如需要收集一周的日志,创建一个定时任务去收集日志,每5秒钟执行一次,一周的时间过后需要停掉这个定时任务。 标准库Ticker 标准库提供里的Ticker类,主要功能是定时重复的去做某件事情,如果没有设定超时,它会一直执行下去。常见的写法如下: t := time.NewTicker(3 * time.Second) timeout := time.After(10 * time.Second) go func() { for { <-t.C ... } }() <-timeout ... 注意到这个Ticker对象是无法关闭的,好的,你可能会发现Ticker类提供了Stop方法。但是我们看...阅读全文

DLang vs GoLang

这次我打算好好写, 因为最近有点闲. 首先介绍两种语言: DLang 如果你不介意阅读英文, 那么DLang的官网有一份非常好的介绍, 简单概括下就是 C太古老了, 缺乏很多新的特性.C/C++太复杂了, 但是语言标准就有数百页之多.C++中有很多常用的, 好的特性是通过标准库实现的, 而非编译器, 这样无法做到最好的优化.D希望简化开发, 降低复杂度, 但同时保留大多数好的特性.作者希望这能成为C/C++的代替品. 对我来说, DLang意味着: 垃圾回收. DLang采用了多线程GC(有时间我会写写这个), 回收精度很高, 性能损耗却非常小.C Style Syntax. C和D之间类似的代码具有类似的功能.DMD + LDC. DMD是官方的后端, 而LDC则是基于LLVM的后端, 前...阅读全文

golang Hook

简介 这篇文章主要是通过官方提供的 HTTP 追踪来学习使用 Hook 的编程思想。 在了解使用 Go 语言编写 Hook 之前,最好先掌握 Context 的用法, go 1.7 中 context 已经进入标准库 context,直接 import "context" 就可以使用。 在标准库 context.go 中, Context 定义为一个 interface{} 接口类型。 // A Context carries a deadline, a cancelation signal, and other values across // API boundaries. // // Context's methods may be called by multiple gorouti...阅读全文

博文 2017-09-22 13:05:12 juniway

读 《我为什么放弃Go语言》 有感

最近又熟悉了下go语言,发现go语言还有许多设计不好的地方,然后又读到了《我为什么放弃Go语言》这篇文章, 对于某些方面,我还是比较认同的。 这篇文章总结了十六点,如下: 1.1 不允许左花括号另起一行 1.2 编译器莫名其妙地给行尾加上分号 1.3 极度强调编译速度,不惜放弃本应提供的功能 1.4 错误处理机制太原始 1.5 垃圾回收器(GC)不完善、有重大缺陷 1.6 禁止未使用变量和多余import 1.7 创建对象的方式太多令人纠结 1.8 对象没有构造函数和析构函数 1.9 defer语句的语义设定不甚合理 1.10 许多语言内置设施不支持用户定义的类型 1.11 没有泛型支持,常见数据类型接口丑陋 1.12 实现接口不需要明确声明 1.13 省掉小括号却省不掉花括号 1.14 编...阅读全文

博文 2016-04-05 10:00:10 simplelovecs

深入Go UDP编程

目录 [−] 一个简单的例子更复杂的例子等价的客户端和服务器Read和Write方法集的比较通用多播编程标准库多播编程广播任播参考文档 用户数据报协议(User Datagram Protocol,缩写为UDP),又称用户数据报文协议,是一个简单的面向数据报(package-oriented)的传输层协议,正式规范为RFC 768。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验。 由于缺乏可靠性且属于非连接导向协议,UDP应用一般必须允许一定量的丢包、出错和复制粘贴。但有些应用,比如TFTP,如果需要则必须在应用层增加根本的可靠机制。但是绝大多数UDP应...阅读全文

博文 2017-02-08 12:53:43 smallnest

Go语言实战 - 使用SendCloud群发邮件

自:http://www.kuqin.com/shuoit/20140303/338368.html 山坡网需要能够每周给注册用户发送一封名为“本周最热书籍”的邮件,而之前一直使用的腾讯企业邮箱罢工了,提示说发送请求太多太密集。 一番寻找之后发现了大家口碑不错的搜狐SendCloud服务,看了看文档,价格实惠用起来也方便,于是准备使用它做邮件发送服务器。按照文档的配置一步步走下来发现在发送邮件的时候竟然出错了,错误提示是“unencrypted connection”,奇怪了。 由于用的是smtp包的PLAIN认证方式,所以打开源代码看了看(SublimeText3+GoSublime里ctrl+. ctrl+a输入包名和结构名直接查看源代码,谁用谁喜欢),发现这里要求使用加密连接,否则就会...阅读全文

博文 2015-01-16 18:00:01 zhenxing1114

go语言序列化对象为二进制

package main import ( "bytes" "encoding/binary" "fmt" ) type Register struct { ACTION int32 SID int32 } func ExampleWrite() []byte { buf := new(bytes.Buffer) var info Register info.ACTION = 20004 info.SID = 6 err := binary.Write(buf, binary.LittleEndian, info) if err != nil { fmt.Println("binary.Write failed:", err) } fmt.Printf("% x\n", buf.Bytes(...阅读全文

博文 2015-06-17 23:07:25 body100123

golang 使用时间通过md5生成token

package main import ( "crypto/md5" "fmt" "io" "strconv" "time" ) func main() { crutime := time.Now().Unix() fmt.Println("crutime-->", crutime) h := md5.New() fmt.Println("h-->", h) fmt.Println("strconv.FormatInt(crutime, 10)-->", strconv.FormatInt(crutime, 10)) io.WriteString(h, strconv.FormatInt(crutime, 10)) fmt.Println("h-->", h) token := fmt.Sp...阅读全文

博文 2015-06-17 20:03:54 u012210379

我读的go语言书籍

书名 地址 封面 《Go语言实战》 http://item.jd.com/12136974.html Go语言实战 《Go语言圣经》 https://yar999.gitbooks.io/gopl-zh/ Go语言圣经 《Go语言标准库》 https://github.com/polaris1119/The-Golang-Standard-Library-by-Example Go语言标准库 《Go语言并发之道》 https://item.jd.com/12504386.html Go语言并发之...阅读全文

博文 2019-02-14 22:32:40 weixin_33881050

Fortify安全编码规则包更新--2020.1.0

Fortify软件安全研究团队将前沿研究转化为增强Fortify产品组合(包括Fortify静态代码分析器(SCA),Fortify WebInspect和Fortify Application Defender)的安全情报。如今,MicroFocus Fortify软件安全性内容支持26种编程语言中的1,019个漏洞类别,涵盖了超过一百万个单独的API。Fortify软件安全研究(SSR)欣然宣布Fortify安全编码规则包(英语,版本2020.1.0),Fortify WebInspect SecureBase(可通过SmartUpdate获得)和Fortify Premium Content的更新立即可用。Micro Focus Fortify安全编码规则包[SCA]在此版本中,For...阅读全文

博文 2020-04-21 17:32:32 sinocax

Golang Gin实践 连载十四 实现导出、导入 Excel

Golang Gin实践 连载十四 实现导出、导入 Excel 原文地址:Gin实践 连载十四 实现导出、导入 Excel项目地址:https://github.com/EDDYCJY/go... 如果对你有所帮助,欢迎点个 Star ???? 前言 在本节,我们将实现对标签信息的导出、导入功能,这是很标配功能了,希望你掌握基础的使用方式 另外在本文我们使用了 2 个 Excel 的包,excelize 最初的 XML 格式文件的一些结构,是通过 tealeg/xlsx 格式文件结构演化而来的,因此特意在此都展示了,你可以根据自己的场景和喜爱去使用 配置 首先要指定导出的 Excel 文件的存储路径,在 app.ini 中增加配置: [app] ... ExportSavePath = ex...阅读全文

博文 2018-06-14 21:34:37 煎鱼

Golang-AES加密(CBC模式,PKCS7填充)

对称加密算法,即加密和解密使用一样的密钥的加解密算法。 分组密码(block cipher),是每次只能处理特定长度的一块(block)数据的一类加解密算法。 目前常见的对称加密算法DES、3DES、AES都是属于分组密码。 背景 Golang没有像PHP那样提供一个现成的aes加密函数,不过标准库里有crypto,利用里面的aes等可以自己封装个加密函数,不过需要理解下整个加解密的过程和原理 AES加密详解 1. 参考文章golang 中AES加密详解 2. 这里使用的是AES加密中的CBC模式,块加密需要划分成整数长度相等个消息块不断加密(串行),分组长度是固定128位,但密钥的长度可以使用128位,192位或者256位(这里指的是bit),即密钥16,24,32长度对应AES-128,...阅读全文

博文 2018-08-16 01:34:43 Night_Witcher

微信支付(退款结果通知)golang AES-256-ECB解密

处理微信支付退款结果通知时,需要对返回数据进行AES-256-ECB解密,golang标准库未支持AES ECB加解密,特此记录。 一、解密方式 解密步骤如下 对加密串A做base64解码,得到加密串B 对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置 ) 用key*对加密串B做AES-256-ECB解密 二、Golang 示例代码 package main import ( "encoding/base64" "fmt" "strings" "github.com/nanjishidu/gomini/gocrypto" ) func main() { var ( paykey = "z...阅读全文

博文 2017-12-02 10:59:56 nanjishidu

Go语言中的io.Reader和io.Writer以及它们的实现

在使用Go语言的过程中,无论你是实现web应用程序,还是控制台输入输出,又或者是网络操作,不可避免的会遇到IO操作,使用到io.Reader和io.Writer接口。也也许对这两个接口和相关的一些接口很熟悉了,但是你脑海里确很难形成一个对io接口的继承关系整天的概貌,原因在于godoc缺省并没有像javadoc一样显示官方库继承关系,这导致了我们对io接口的继承关系记忆不深,在使用的时候还经常需要翻文档加深记忆。本文试图梳理清楚Go io接口的继承关系,提供一个io接口的全貌。 io接口回顾 首先我们回顾一下几个常用的io接口。标准库的实现是将功能细分,每个最小粒度的功能定义成一个接口,然后接口可以组成成更多功能的接口。 最小粒度的接口 typeReaderinterface{ Read(p...阅读全文

博文 2016-08-30 02:00:10 caiyang101

1 行 Go 代码实现反向代理

暂且放下你的编程语言来瞻仰下我所见过的最棒的标准库。 ![This is all the code you actually require…](https://raw.githubusercontent.com/studygolang/gctt-images/master/reverse-proxy/1_y3GxXdKfZlqa95bl19Rytg.png) 为项目选择编程语言和挑选你最爱的球队不一样。应该从实用主义出发,根据特定的工作选择合适的工具。 在这篇文章中我会告诉你从何时开始并且为什么我认为 Go 语言如此闪耀,具体来说是它的标准库对于基本的网络编程来说显得非常稳固。更具体一点,我们将要编写一个反向代理程序。 > **Go 为此提供了很多,但真正支撑起它的在于这些低级的网络管道任...阅读全文

博文 2018-08-15 20:53:45 snowInPluto

一个简单GOLANG路由

package controllers import ( . "logger" "web" ) //对象继承直接拥用REST标准接口 type login struct { web.ControllerBase } func (this *login) Get() { this.Template["key"] = "value" this.WriteString("GET:", this.Template) } func (this *login) Post() { this.WriteString("POST:", this.Template) } //对象不继承注册一个方法到路由 type signOut struct { } func (this *signOut) signOutGe...阅读全文

博文 2015-06-17 20:18:49 x_focus

我们说Golang牛逼都在说些什么?

先说好,我并不认为go是世界上最好的语言!但是我觉得至今用着最爽觉得最牛逼的编译型语言(逃。。。) 那么说它牛逼,我们都在说些什么呢? 首先,说它牛逼并不是说已经达到了至今各方面最好甚至达到无可超越的境界,说实话我不认为任何一门语言真的达到这种程度。你要真的非要分出个高低,谷歌曾发布了一个 研究报告 ( http://link.zhihu.com/?target=https%3A//days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf ) ,仔细比较了C++、Java、Scala和Go语言的性能。毫无疑问C++是四种语言中运行速度最快的,但是该报告同时也指出,优化代码相对困难,这需要相当的努力、熟练的水准,不是平均水平的程序...阅读全文

博文 2017-06-23 06:02:58 好奇还思猫

Go Search Extension 版本发布!一款超实用小工具

大家好,有一个超实用小工具跟大家分享啦,欢迎大家体验和吐槽~这是一款旨在帮助Go开发者提高开发效率的超实用工具,它是一个可在浏览器地址栏快速、方便、高效地搜索Go文档的浏览器插件,目前支持Chrome、Firefox和Edge下载。类似于 Rust 社区的RustSearchExtension插件。 下载地址 Chrome版本Firefox版本Eadge版本 提供的功能 1. 支持搜索 Go 标准库文档 可通过关键词搜索package、func、interface,快速查看其定义和描述,也可选中并跳转到文档页面查看具体说明。 2. 支持搜索热门项目文档 可通过搜索package名称获得GitHub上star数前8k的go项目文档相关的信息,包括最新版本号和package的说明。 3. 支持快...阅读全文

博文 2020-04-24 12:32:46 Kathygo

golang 框架 之 CHI

1,特性 golang 的 http框架已经有很多,究其原因:go 的net/http 已经做了大部分工作,封装一个框架的工作量,没有那么的大。 不过呢,林子大了鸟也就多了,部分框架的代码质量实在不敢恭维,另有一些框架则绑定了一堆东西,完全跟 清爽简洁的风格 背道而驰,用起来总有一种 笨重 的感觉! chi 也是一个 http 框架,不过这货是不同的。 **用这个框架,别人看你代码可能会怀疑你没用框架! ** 其特点: 只做核心的事情 rest api 快(路由快,累赘少) 分组路由 **完全只用 net/http + 标准库实现!** 清爽(代码清爽,体积清爽) 常见功能用中间件搞,可拔插 2,为啥快 路由算法用的是 前缀树,最快的索引算法 比哈希表都快! 真.轻量级,代码真的很少,没那么...阅读全文

博文 2018-11-09 23:34:40 名之白

Gccgo in GCC 4.7.1[翻译]

英文原文: http://blog.golang.org/2012/07/gccgo-in-gcc-471.html Go语言开始就由一个语言规范定义,并不是倚赖某个具体实现。Go开发小组针对语言规范,实现了两个不同版本的编译器:gc和gccgo。 有两个不同的实现有助于保持语言规范的完整和完整:当两个实现相互冲突时,我们修改语言规范,或者是修改实现以保持和规范一致。 Gc是默认的编译器,专门针对go编写。Gccgo是另一个不同实现(有不同的侧重目标),下面我们将详细介绍。 Gccgo是作为gcc的一个部分发布,属于gcc编译器集合。GCC前端可以支持多种不同的编程语言:gccgo是针对go语言的前端实现。Go前端同时保持和GCC相对独立,它的设计目标之一是可以连接的到不同的编译器后端,当然...阅读全文

博文 2014-10-04 19:26:33 chai2010

Go 语言的异步任务队列和作业队列 AsynQ

## asynq 是一个 Go 语言的异步任务队列和作业队列,基于分布式消息传递。 ### asynq 中的任务(或者作业)可通过多个 worker 在很多服务器上并发的执行,或者可在单个服务器上利用 Go 的协程运行多个 worker 进程。来自谷歌员工2020年创建的标准库。 https://github.com/hibiken/asyn...阅读全文

博文 2020-01-18 00:48:00 paigel

我为什么放弃Go语言

自:http://blog.csdn.net/liigo 有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。 开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论。但是我有足够详实的客观的论据,支撑这个看似主观的结论。 第0节:我的Go语言经历 先说说我的经历吧,以避免被无缘无故地当作Go语言的低级黑。 2009年底,Go语言(golang)第一个公开版本发布,笼罩着“Google公司制造”的光环,吸引了许多慕名而来的尝鲜者,我(Liigo)也身居其中,笼统的看了一些Go语言的资料,学习了基础的教程,...阅读全文

博文 2014-10-26 05:00:00 u012860063

关于xml包在Unmarshal时将\r\n重写为\n的问题

今年4月份,中国移动、中国电信、中国联通三大运营商联合举行线上发布会,发布了《5G消息白皮书》。所谓5G消息,即传统短信消息(仅能进行文本展示)的升级版,是由GSMA组织制定的RCS(Rich Communication Suite)消息规范所定义。2019年RCS UP(unified profile)更新到2.4版本,并成为了5G终端标准的一部分,该版本也是第一个具备商用能力的版本,为5G消息商用奠定了基础。中国移动计划2020.6月末正式实现5G消息的商用,目前已经在浙江和广东建立了两个5G消息的支撑节点(分别由中兴和华为承建)。作为电信移动增值领域的厂商,我方也参与了与浙江节点进行行业5G消息平台(MaaP)联调与应用开发。 这引子有些长,本文重点不在5G消息,而在于与行业5G消息平...阅读全文

博文 2020-06-06 15:10:17 bigwhite

Golang WebAssembly 前端开发 - 2. Golang/JS 交互.md

Golang 标准库中的 syscall/js 包提供了一系列接口。其中 js.Global() 返回一个 js.Value 类型的结构体,它指代 JS 中的全局对象,在浏览器环境中即为 window 对象。可以通过其 Get() 方法获取 window 对象中的字段,也是 js.Value 类型,包括其中的函数对象,并使用其 Invoke() 方法调用 JS 函数。 另一方面,可以使用 js.Value 类型的 Set() 方法向 JS 中注入字段,包括用 js.NewCallback() 封装的 Golang 函数,这样就能在 JS 中调用 Golang 的函数。Golang 函数必须是 func(args []js.Value) 形式的,使用 args 参数接收 JS 调用的参数,且没...阅读全文

博文 2019-01-02 23:34:44 Platanuses

go 包导入的一些问题

import Go 使用包(package)作为基本单元来组织源代码,所有语法可见性均定义在 package 这个级别。同一 package 下面,可以有非常多的不同文件,只要每个文件属于相同的 package name。 每个源码文件的第一行必定要通过如下语法定义属于哪个 package, package xxx 然后就是导入本源码文件所使用的标准包或第三方包,即 import ( "a/b/c" "fmt" ) 标准库会从 GO 的安装目录下查找,第三方库会从开发者定义的 $GOPATH 下查找。当都找不到时,编译器就会报错。在使用第三方包的时候,当源码和 .a 均已安装的情况下,编译器链接的是源码。 注意: 上面语句中 a/b/c 最后的 c 为目录名,不是 package name。...阅读全文

博文 2017-12-18 18:04:42 happen

《Go语言核心编程》一书正式上市了

《Go语言核心编程》一书9月底上市了,本文是《Go语言核心编程》的前言部分,推荐给大家,希望这本书能帮助到大家更好的学习Go语言。 ## 书籍概况 Go语言的核心语言特性包括:类型系统、接口、并发。这三部分是Go语言精华、优美、也是重要的特征,本书紧密围绕这三个主题展开。以“类型系统”为例,Go语言中的类型有:简单类型、复合类型、命名类型、未命名类型、静态类型、动态类型、底层类型、接口类型、具体类型以及类型字面量等诸多概念,这些概念在其他Go类图书里面鲜有介绍,本书试图帮助读者梳理清楚这些类型的含义,建立概念,认清类型本质并学会正确使用;在接口章节,不单介绍了接口概念和用法,还深入分析了接口的机制,使读者对Go语言非侵入式的接口有更深入的理解;在并发编程章节,书中给出了5个并发编程范式,并用...阅读全文

彬哥笔记 --1 聊下与Go语言的缘分

至今从事Go开发已经马上4个年头了,12年之前一直在用c++开发ssl vpn,离开安全行业转入游戏也是用c++;15年机缘巧合与前gameloft的leader峰哥以技术入股的方式共同开发H5对战类游戏平台,正式这个游戏平台项目我接触了Go语言,原因是峰哥和成都尼比鲁的孙先生认识,孙先生建议我们用Go开发;就这样连续一周开发我们的后端框架完成,仅仅一周,原生自己撸代码敲出来的,所有的库都是标准库;当时标准库版本没有记错是1.4;就这样彬哥我一发不可收拾,深深的爱上了Go语言。 以上就是彬哥我和Go语言的相遇到相知,由于我有个写博客的习惯,12年开始就一直在写,各大平台都有;当时有个资源分享叫HK共享吧 ,这个论坛大家不知道80后是否有情节,暂时就不多说了;视频、文章都几乎每天下班回来都要录...阅读全文

博文 2018-11-15 01:34:39 Golang语言社区

Go语言IDE、第三方包、标准库下载等链接整理

大家好,我是彬哥,今天给大家整理下Go语言标准库等下载链接说明,如下: 标准库官方下载地址: https://golang.google.cn/dl/ 标准库下载 手动下载第三方包 地址: https://www.golangtc.com/download/package 第三方包手动下载 Go语言编辑器下载,推荐 liteide: https://github.com/visualfc/liteide/releases/tag/x34.3 liteide Go语言中文标准库在线文档 : https://studygolang.com/pkgdoc 中文标准库在线文档 社区课程GIT地址: https://github.com/Golangltd/codeclass Golang语言社区论坛...阅读全文

博文 2018-12-10 00:34:42 Golang语言社区

Java程序员快速入门 go 语言

这篇文章帮助Java程序员快速入门Go语言。 本文将以一个有代表性的例子为开始,以此让Java程序员对Go语言有个初步认识,随后将详细的描述Go语言的各个构成模块,最后以一个例子来讲解Go语言与Java语言的不同点。 yale8848翻译于 1 年 前 1人顶 顶 翻译的不错哦! 先来认识堆栈(例子) 为了满足大家的好奇心,我们将开始于一个麻雀虽小但五脏内全的例子,这个例子将是Stack.java的Go语言版本。 //实现堆栈的包集合 package collection //生成空堆栈 type Stack struct { data []interface{} } //压栈顶 func (s *Stack) Push(x interface{}) { s.data = append(s....阅读全文

博文 2014-10-04 19:25:56 赵亮-碧海情天, yale8848, LeoXu, supe

Go 标准库 encoding/json 真的慢吗?

![](https://github.com/studygolang/gctt-images2/blob/master/go-is-the-encoding-json-package-really-slow/A-Journey-With-Go.png) 插图来自于“A Journey With Go”,由 Go Gopher 组织成员 Renee French 创作。 本文基于 Go 1.12。 关于标准库 `encoding/json` 性能差的问题在很多地方被讨论过,也有很多第三方库在尝试解决这个问题,比如[easyjson](https://github.com/mailru/easyjson),[jsoniter](https://github.com/json-iterator/g...阅读全文

博文 2019-12-03 10:22:29 polaris

Go的Deprecated标签

这几天,在Gogland EAP4升级后,无意中发现对Deprecated(小写也可以)进行了支持,以后API的废弃方法的标注会更好。 类似于以下代码: ```Go func Test(){ test1() } //Deprecated func test1(){ //do nothing } ``` 在支持的开发工具,将会看到删除线: ![123.png](http://studygolang.qiniudn.com/170203/250e374d2b197f1b5f8dd7e00938d8c0.png) 实际运行环境不需要Go1.8,我的是1.7.4。 可以通过标准库的build.AllowBinary常量看到效果...阅读全文

Go语言标准库概览

Go语言标准库概览 九 08 bigwhite技术志 Assert, Blog, Blogger, C, Cpp, Go, Golang, Google, Interface, map, Opensource, Programmer, Reflect, Slice, 切片, 博客, 反射, 容器, 开源, 接口, 断言, 方法, 标准库, 程序员, 结构体, 编程,语言, 编译器 No Comments 本文翻译自Dr.Dobb's的"A Brief Tour of the Go Standard Library"一文。 在Go语言五周系列教程的最后一部分中,我们将带领大家一起来浏览一下Go语言丰富的标准库。 Go标准库包含了大量包,提供了丰富广泛的功能特性。这里提供了概览仅仅是有选择性的且...阅读全文

博文 2014-11-22 13:00:55 bigwhite

golang定义错误的方式

golang定义错误的方式: (1) 同一Error类, 多个错误实例,只是错误内容不同,golang官方做法 直接定义在io package 中, 全局变量。 var EOF = errors.New("EOF") var ErrClosedPipe = errors.New("io: read/write on closed pipe") var ErrNoProgress = errors.New("multiple Read calls return no data or error") var ErrShortBuffer = errors.New("short buffer") var ErrShortWrite = errors.New("short write") var E...阅读全文

博文 2016-03-15 08:00:01 htyu_0203_39

谢孟军:我为什么选择使用Go语言? | EGO会员首期线上分享活动

为了加深EGO会员之间的相互了解,同时也为大家提供更多线上相互学习交流的机会,EGO正式启动会员群线上分享活动。本文是根据谢孟军分享的主题“Go与我”的内容整理而成。“首期分享嘉宾:谢孟军:EGO会员、GopherChina组织者、《Go Web编程》一书的作者,专注golang技术架构。 在这里我主要想和大家分享一些Go和我个人的成长史。首先聊聊Go,在2009年全部开源出来后,它获得了当年的年度语言,但是直到2011年它才发布正式的稳定版本。Go稳定版发布时,Go Team承诺后续的版本都会兼容之前的版本。这对于我们开发者来说简直太重要了,Go后续的版本也一直在提升内功,从而可以让我们无缝的升级Go版本。 Go的核心贡献者Go主要有静态语言、天生并发、内置GC、安全性高、语法简单、交叉编...阅读全文

博文 2017-02-10 11:37:08 谢孟军

golang AES/ECB/PKCS5 加密解密 url-safe-base64

因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享: /* 描述 : golang AES/ECB/PKCS5 加密解密 date : 2016-04-08 author: herohenu */ package main import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" "strings" ) func main() { /* *src 要加密的字符串 *key 用来加密的密钥 密钥长度可以是128bit、192bit、256bit中的任意一个 *16位key对应128bit */ src := "...阅读全文

博文 2016-04-10 11:00:12 lavin

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之,不通过OS进行切换,自行切换,系统运行开支大大降低 通道channel 并发编程的关键在于执行体之间的通信,go通过通过channel进行通信 channel可以认为类似其他OS体系中的消息队列,只不过在go中原生支持,因而易用 消息队列有哪些值得关注的地方?常见问题包括创建、关闭或删除、阻塞、超时、优先级等,golang中也不例外。罗列如下: 可否探测队列是满或空?或者说是否可以不阻塞地尝试读写? 读阻塞和写阻塞时关闭会怎样? 关闭后未读取的消息会被抛弃? 往关闭的channel发送数据或读取数据会怎样? 怎样探测channel的...阅读全文

golang学习之cgo

package main /* #include #include */ import "C" import "unsafe" func main() { cstr := C.CString("HELLO, WORLD") C.puts(cstr) C.free(unsafe.Pointer(cstr)) } 说说我遇到的坑吧 虽然go在格式上要求严格,但是有些地方真的不是很人性化,不知道是我的操作有问题,还是怎么,哎 注意: 我使用的ide是liteide,写完代码尝试编译好几次,都报错,报错如下: # testGcc could not determine kind of name for C.free could not determine k...阅读全文

博文 2017-01-07 15:00:12 lmspace

【译】Golang中使用『弃用(Deprecate)』

Go语言很长时间都没有一套标记弃用API的定义规范。这几年,出现了个规范可以在文档当中添加弃用注释。 现在,标准库开始使用这个格式了。 举个例子,Go 1.8的包中sql/driver.Execer被弃用,这里增加了一套注释,它可以被godoc识别。 // Execer is an optional interface that may be implemented by a Conn. // // If a Conn does not implement Execer, the sql package's DB.Exec will // first prepare a query, execute the statement, and then close the // statement...阅读全文

博文 2017-02-10 15:55:43 Bryce

GopherChina讲师专访

今年有幸收到GopherChina大会的组织者、beego开源项目的owner、《Go Web编程》的作者谢孟军童鞋的邀请,以讲师身份参加今年的GopherChina大会。下面是GopherChina对我这个讲师的专访稿^0^。该专访稿将同时被发布在公众号“Go中国(微信号:golangchina)”上面,可点击这里阅读。 1、首先介绍一下自己。 大家好!我叫白明(Tony Bai),目前是东软云科技的一名架构师,专职于服务端开发,日常工作主要使用Go语言。我算是国内较早接触Go语言的程序员兼Advocater了,平时在我的博客、微博和微信公众号“iamtonybai”上经常发表一些关于Go语言的文章和Go生态圈内的信息。 在接触Go之前,我主要使用C语言开发电信领域的一些后端服务系统,拥有...阅读全文

博文 2017-05-01 14:40:38 bigwhite

GoFrame实战教程-登录篇【含视频】

此教程主要对GoFrame框架实现登录流程进行了讲解,教程仅有不到一个小时,但是可以让大家熟悉登录的整体开发流程;实践是检验真理的唯一标准。希望大家可以多跟练习,多去思考,多去体会,而不是简单的听;GoFrame实战教程-登录篇GoFrame实战教程内容通过GoFrame实现登录流程;主要讲解模板引擎,登录实现,流程图工具,cookie和session介绍,数据校验,登录安全讲解等GoFrame实战教程目录11.GoFrame登录实战之模板引擎.md12.GoFrame登录实战之登录流程.md13.GoFrame登录实战之cookie和session14.GoFrame登录实战之session实现15.GoFrame登录实战之数据校验16.GoFrame登录实战之登录安全GoFrame实战教...阅读全文

博文 2020-04-20 00:46:26 zcool321

Linux 下开发基于 webrtc 的实时音视频 SDK

在 Linux 平台下开发实时通话 SDK 其实是主要应用于未来的 IOT 行业,先基于 Ubuntu 作为开发平台,完成后再基于每个客户提供的其交叉编译工具链进行交叉编译以供用户使用。 1、基于 Ubuntu 下载 webrtc 1.1 自行下载编译 如果是自己下载编译的话,可以参考官方教程,或者参考本人之前的一篇博客: https://www.jianshu.com/p/09f065f3feb0 ,其实 Ubuntu 下编译 webrtc 是比较简单的,只要可以翻墙,其它都只是时间问题了。 1.2 国内网络问题无法自行下载 那么可以通过下载本人配置的一个 Docker 镜像进行进行编译: https://hub.docker.com/r/cgb0210/ubuntu_build ,由于 ...阅读全文

博文 2019-01-23 18:34:43 Gobert

Golang开启http服务的三种方式

前言 都说go标准库实用,Api设计简洁。这次就用go 标准库中的net/http包实现一个简洁的http web服务器,包括三种版本。 v1最简单版 直接使用http.HandleFunc(partern,function(http.ResponseWriter, *http.Request){}) HandleFunc接受两个参数,第一个为路由地址,第二个为处理方法。 //v1 func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("httpserver v1")) }) http.HandleFunc("/bye", sayBye) log.Pri...阅读全文

博文 2018-10-07 16:34:39 L千年老妖

Go SDK 1.13各项增强简介

本博已经在Go语言将在1.13版本中引入的变化一文中介绍了Go 1.13将对语法和标准库做出的增强。其实, 官方Go SDK 1.13也将带来很多新的变化。本篇文章下面将介绍一下这些变化。 Go SDK 1.13之前,很多可以安全地开辟在栈上的内存因为编译器中的逃逸分析器不够智能的原因而被开辟在了堆上。这在一定程度上影响了程序执行效率。从Go SDK 1.13开始,标准编译器将采用一个新的逃逸分析器,从而将避免很了多不必要的在堆上开辟内存的情况。 Go SDK 1.13之前,所有的defer延迟调用都是记录在堆上的,这严重影响了defer延迟调用的执行效率。从Go SDK 1.13开始,满足某些条件的某些defer延迟调用(标准库中93%的延迟调用满足此条件)将被记录在栈上而不是堆上,从而提...阅读全文

Golang 服务优雅重启

很多时候对于服务升级的做法简单粗暴, 就简单的杀进程启动新的进程. 还有的好一点就是多个相同的服务依次升级, 保证有服务可用. 但是公平的说这两种都会丢失请求中的连接. 鉴于这种情况, 在现实中我们可以使用优雅重启来搞定这个问题. Golang 实现优雅重启的原理也很简单: 监听 USR2 信号; 收到信号后将服务监听的文件描述符传递给新的子进程; 此时新老进程同时接收请求; 父进程停止接收新请求, 等待旧请求完成(或超时); 父进程退出. 对于上面的原理看似简单, 其实是分成了两个大的要点: 新老进程同时监听同一端口, 这个很简单, Go 很早旧支持; 如何等待旧的请求完成, 这个在 Go 1.8 (新增了Server.Shutdown) 之前是需要费一番功夫的. 我们搞定了上面的原理之后...阅读全文

博文 2018-02-01 12:00:49 lingchao