Go 系列教程 —— 5. 常量

这是我们 Golang 系列教程的第 5 篇。 ### 定义 在 Go 语言中,术语"常量"用于表示固定的值。比如 `5` 、`-89`、 `I love Go`、`67.89` 等等。 看看下面的代码: ```go var a int = 50 var b string = "I love Go" ``` **在上面的代码中,变量 `a` 和 `b` 分别被赋值为常量 `50` 和 `I love GO`**。关键字 `const` 被用于表示常量,比如...阅读全文

2017-12-07 15:06:56 polaris
阅读:14956 评论:12

golang channel 使用总结

[原文地址](http://litang.me/post/golang-channel/) 不同于传统的多线程并发模型使用共享内存来实现线程间通信的方式,golang 的哲学是通过 channel 进行协程(goroutine)之间的通信来实现数据共享: > Do not communicate by sharing memory; instead, share memory by communicating. 这种方式的优点是通过提供原子的通信原语,避免了竞态情形(race cond...阅读全文

2018-11-09 15:34:34 darlingtangli
阅读:376 评论:2

golang 进度条功能实现

最近在做一个需求,功能很简单,就是开发一个轻量级客户端,将一个指定文件中的内容通过TCP发送到服务器。由于该文件特别大,有可能到达100G的数量级,因此处理起来会比较慢,为了给用户提供比较友好的展示界面,因此,在其中加入了进度条显示功能。 在这里,说一下我在实现该进度条功能时的一些思路。 成果演示 先看一下最终的成品效果展示: 该进度条一共分三部分组成,第一部分是主体进度条,第二部分是百分比,第三部分是当前完成的数据和总数据的一个动态展示。 源码分析 由于是要在终端上打印出进度条的效果,因此,主...阅读全文

2020-07-31 14:32:35 禹鼎侯
阅读:525 评论:0

Go 每日一库之 mapstructure

简介mapstructure用于将通用的map[string]interface{}解码到对应的 Go 结构体中,或者执行相反的操作。很多时候,解析来自多种源头的数据流时,我们一般事先并不知道他们对应的具体类型。只有读取到一些字段之后才能做出判断。这时,我们可以先使用标准的encoding/json库将数据解码为map[string]interface{}类型,然后根据标识字段利用mapstructure库转为相应的 Go 结构体以便使用。快速使用本文代码采用 Go Modules。首先创建目录...阅读全文

2020-08-03 20:32:33 darjun
阅读:197 评论:0

Go 中可取消的读取操作

在使用 Go 进行工作时,使用 `io.Reader` 和 `io.Writer` 接口是最常见的情场景之一。这很合理,它们是数据传输的主力接口。 关于 `io.Reader` 接口,有一点令我困惑:它的 `Read()` 方法是阻塞的,一旦读取操作开始,你没有办法去抢占它。同样,也无法在读取操作上执行 `select` 操作,异步协调多个 `io.Reader` 时的读取操作会有点棘手。 `io.ReadCloser` 是 Go 提供的一个常用的退出通道,在许多情况下,它确实允许你...阅读全文

2020-08-18 14:49:05 DoubleLuck
阅读:164 评论:0

为什么 Golang 函数赋值会产生内存分配?

缘起这几天在重构某段代码后,做了一次性能测试,火焰图中发现了一个十分奇怪的runtime.newobject的调用,大致占用2%,而找遍了整段代码都没有发现有新建对象相关的逻辑。于是迫不得已,祭出了汇编大法,终于定位到了问题所在。这篇文章会使用一段最小可复现的代码来分享这个问题以及背后的原因。Show me the code12345678910111213141516171819202122232425262728293031323334353637383940414243444546pack...阅读全文

阅读:116 评论:0

Dockerfile文件万字全面解析

Dockerfile是一个文本文件,包含一些Docker指令。执行docker build,Docker就会执行Dockerfile里面的指令,来自动创建镜像。 用法 image-20200822110105335_副本.png Dockerfile里面的指令可以访问context这些文件。 context是递归的,PATH包含所有子目录,URL包含所有子模块。 例子,把当前目录当做context, $ docker build . Sending build context to Docker...阅读全文

2020-08-25 22:32:42 东方888888
阅读:178 评论:0

golang实现jwt

go实现jwt-demo 1.JSON web token(jwt) 是自己携带一些信息,jwt现在越来越流行原因如下: ·1.jwt是无状态,因此不需要任何数据库来存储 2.jwt签名是安全 3.jwt可以设置有效时间,可以减少黑客攻击 jwt官网介绍 2.用户登录之后生成token func Login(c *gin.Context) { var user models.User if err := c.ShouldBindJSON(&user); err != nil { c.JSON(h...阅读全文

2020-09-01 20:32:40 左洁
阅读:128 评论:0