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

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中的Interface(接口)

Go语言中的interface没有强制要求实现方法,但是interface是go中非常强大的工具之一。任一类型都可以实现interface中的方法,interface中的值可以代表是各种类型的值,这就是Go中实现多态的基础 什么是接口 interface就是字面意思——接口,C++中可以用虚基类表示;Java中就是interface。 我们之前在结构体和方法的博文中提到了很多有关于对象和属性的知识点。而interface则使Golang更接近面向对象编程范式的另一个难点 interface是方法签名的一个集合,这些方法可以被任一类型通过方法实现。因此接口就是对象行为的申明(不是定义,仅仅表示方法签名,也可以称作函数原型)。 ????注意:我多次强调 任一类型 ,Golang中所有类型都可以实...阅读全文

博文 2020-03-27 01:32:55 EriolSoong

我们说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

GO语言Comma-ok断言

Comma-ok断言的语法是:value, ok := element.(T)。element必须是接口类型的变量,T是普通类型。如果断言失败,ok为false,否则ok为true并且value为变量的值。来看个例子: package main import ( "fmt" ) type Html []interface{} func main() { html := make(Html, 5) html[0] = "div" html[1] = "span" html[2] = []byte("script") html[3] = "style" html[4] = "head" for index, element := range html { if value, ok := elem...阅读全文

博文 2016-08-16 10:00:22 alvine008

关于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

golang中的接口与继承

接口 interface是关键字; 接口的力量:interface是只要你实现了接口定义的类型(方法),就可以作为接口的实例拿来用,在语言层面上不再需要其它的约束。 继承 在结构体中嵌入匿名类型成员,就可以继承匿名类型的方法。 不仅可以嵌入匿名类型成员,还可以嵌入匿名的接口,或者匿名的指针对象,是一种纯虚继承,继承的只是接口的规范,而实现还得靠自己...阅读全文

博文 2019-02-10 21:34:44 areece

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

io.EOF设计的缺陷和改进

## 1. 认识io.EOFio.EOF是io包中的变量, 表示文件结束的错误:```gopackage iovar EOF = errors.New("EOF")```也通过以下命令查看详细文档:```$ go doc io.EOFvar EOF = errors.New("EOF")EOF is the error returned by Read when no more input is available. Functionsshould return EOF only to signal a graceful end of input. If the EOF occursunexpectedly in a structured data stream, the appropria...阅读全文

博文 2019-05-14 17:08:24 光谷码农

《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语言社区

Golang 接口

结构体通过实现接口中定义的方法来实现接口。 简单入门 package main import "fmt" type Phone interface { call(name string) } type Person struct { Name string } //方法 func (p *Person) Test2(newName string) string { p.Name = newName return p.Name } //接口 func (p Person) call(name string) string { return p.Name + "打电话给" + name } func main() { p1 := Person{"abc"} str := p1.call("xyz...阅读全文

博文 2018-06-07 15:30:02 -beyond

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语言的接口类型

摘要: 1、什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的。怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭、睡觉等: interface Person { // 人会吃饭 void eat(); // 人会睡觉 void sleep(); } 我是站在接口角度上考虑接口如何定义,此时不会过多考虑实现类的行为。 1、什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的。怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭、睡觉等: interface Person { // 人会吃饭 void eat(); // 人会睡觉 void sleep...阅读全文

博文 2019-05-22 22:20:49 8588ll

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

golang中 方法集的概念,你了解么?

go规范中提到过方法集的概念,你了解么?下面的代码输出结果是啥? package main import "fmt" type t1 int type t2 int func( t *t1) String() string { return "ptr" } func( t t2) String() string { return "val" } func main() { var a t1 var b t2 a = 5 fmt.Println( a, b) } 结果分析: 指针的方法集包括两部分:(t *T)这样的方法和(t T)这样的方...阅读全文

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中使用kafka

golang中比较好用的kafka client有 sarama confluent-kafka-go go_kafka_client optiopay-kafka siesta 其中 sarama的使用者应该是最多的, 然后还有一个sarama的cluster版本sarama-cluster 本文简单描述下sarama的一些简单使用 生产者接口 func producer_test() { fmt.Printf("producer_test\n") config := sarama.NewConfig() config.Producer.RequiredAcks = sarama.WaitForAll config.Producer.Partitioner = sarama.NewRand...阅读全文

博文 2018-09-29 18:34:37 yandaren

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的...阅读全文

Go语言的接口和实现类初探(二)

扩展 上一篇讲了实现一个接口里的全部方法。 如果实现多个接口,也是很简单的,同理把他的方法实现了就行。 背景: 有一个动物的接口,他有吃和跑的动作,突然来一只鸟的动物,呀,它还会飞。 如果我们修改接口动物加上飞的动作,这样会让狗也要飞了。所以,我们把接口的方法都单独另出来。 package main import ( "fmt" ) //飞的接口 type IFly interface { Fly() } //吃的接口 type IEat interface { Eat() } //跑的接口 type IRun interface { Run() } //狗的实现类 type Dog struct { name string } func (dog *Dog) Eat() { fmt.Pri...阅读全文

博文 2015-06-17 23:07:41 Libra412

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

Go程序设计语言

he Go Programming Language “Go是一种开源的程序设计语言,它意在使得人们能够方便地构建简单、可靠、高效的软件。”(来自Go官网golang.org) Go在2007年9月形成构想,并于2009年11月发布,其发明人是Robert Griesemer、Rob Pike和Ken Thompson,这几位都任职于Google。该语言及其配套工具集使得编译和执行既富有表达力又高效,而且使得程序员能够轻松写出可靠、健壮的程序。 Go和C从表面上看起来相似,而且和C一样,它也是专业程序员使用的一种工具,兼有事半功倍之效。但是Go远不止是C的一种升级版本。基于多种其他语言,它取其精华,去其糟粕。它实现并发功能的设施是全新的、高效的,实现数据抽象和面向对象的途径是极其灵活的。它还...阅读全文

博文 2019-05-31 01:45:02 jew25540

Go语言的接口和实现类初探(一)

1.引入 接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。(来源于百度百科) 2.其他语言的接口 java的接口 public interface Animal {//定义接口 void eat(); } public class Dog {//与接口里的方法名相同,但并未实现Animal接口 void eat() { } } public class Cat implements Animal {//实现了Animal接口,并且eat方法必须存在 @Override void eat() { } }3.Go语言的接口 package main import ( "fmt" ) //定义一个接...阅读全文

博文 2015-06-17 23:00:49 Libra412