随笔分类 -  Golang

摘要:笔者在《Golang 入门 : 竞争条件》一文中介绍了 Golang 并发编程中需要面对的竞争条件。本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件。 Channel 是 Golang 在语言级别提供的 goroutine 之间的通信方式,可以使用 channel 阅读全文
posted @ 2019-06-10 08:46 sparkdev 阅读(21912) 评论(4) 推荐(5) 编辑
摘要:笔者在前文《Golang 入门 : 理解并发与并行》和《Golang 入门 : goroutine(协程)》中介绍了 Golang 对并发的原生支持以及 goroutine 的用法。本文我们来聊聊并发与并行带来的一些副作用。 并行编程之所以难道较高,根本的原因是需要处理共享资源的同步访问。比如在 G 阅读全文
posted @ 2019-06-04 12:55 sparkdev 阅读(3137) 评论(0) 推荐(0) 编辑
摘要:在操作系统中,执行体是个抽象的概念。与之对应的实体有进程、线程以及协程(coroutine)。协程也叫轻量级的线程,与传统的进程和线程相比,协程的最大特点是 "轻"!可以轻松创建上百万个协程而不会导致系统资源衰竭。多数编程语言在语法层面并不直接支持协程,而是通过库的方式支持。但是用库的方式支持的功能 阅读全文
posted @ 2019-05-29 13:01 sparkdev 阅读(15552) 评论(0) 推荐(2) 编辑
摘要:Golang 的语法和运行时直接内置了对并发的支持。Golang 里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为 goroutine 时,Golang 会将其视为一个独立的工作单元。这个单元会被调度到可用的逻辑处理器上执行。Golang 运行时的调度器是一个复杂的软件,能管理被 阅读全文
posted @ 2019-05-27 13:09 sparkdev 阅读(19566) 评论(0) 推荐(0) 编辑
摘要:Goroutine 是 Golang 中非常有用的功能,但是在使用中我们经常碰到下面的场景:如果希望等待当前的 goroutine 执行完成,然后再接着往下执行,该怎么办?本文尝试介绍这类问题的解决方法。 没有等待的情况 让我们运行下面的代码,并关注输出的结果: 输出的结果为:over!因为 gor 阅读全文
posted @ 2019-05-24 13:07 sparkdev 阅读(14652) 评论(6) 推荐(3) 编辑
摘要:笔者在《Golang : cobra 包简介》一文中简要的介绍了 cobra 包及其基本的用法,本文我们从代码的角度来了解下 cobra 的核心逻辑。 Command 结构体 Command 结构体是 cobra 抽象出来的核心概念,它的实例表示一个命令或者是一个命令的子命令。下面的代码仅展示 Co 阅读全文
posted @ 2019-05-16 08:11 sparkdev 阅读(13809) 评论(0) 推荐(1) 编辑
摘要:Cobra 是一个 Golang 包,它提供了简单的接口来创建命令行程序。同时,Cobra 也是一个应用程序,用来生成应用框架,从而开发以 Cobra 为基础的应用。本文的演示环境为 ubuntu 18.04(下图来自互联网)。 主要功能 cobra 的主要功能如下,可以说每一项都很实用: 简易的子 阅读全文
posted @ 2019-05-14 08:52 sparkdev 阅读(49112) 评论(3) 推荐(8) 编辑
摘要:笔者在前文中介绍了 Golang 标准库中 flag 包的用法,事实上有一个第三方的命令行参数解析包 pflag 比 flag 包使用的更为广泛。pflag 包的设计目的就是替代标准库中的 flag 包,因此它具有更强大的功能并且与标准的兼容性更好。本文将介绍 pflag 包与 flag 包相比的主 阅读全文
posted @ 2019-05-09 08:47 sparkdev 阅读(21687) 评论(0) 推荐(1) 编辑
摘要:在 Golang 程序中有很多种方法来处理命令行参数。简单的情况下可以不使用任何库,直接处理 os.Args;其实 Golang 的标准库提供了 flag 包来处理命令行参数;还有第三方提供的处理命令行参数的库,比如 Pflag 等。本文将介绍 Golang 标准库中 flag 包的用法。本文的演示 阅读全文
posted @ 2019-05-06 08:44 sparkdev 阅读(80472) 评论(0) 推荐(11) 编辑
摘要:Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型。试图表示一个现实世界中的实体。 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和一个类型。结构体的目的就是把数据聚集在一起,以便能够更加便捷地操作这些数据。结构体的概念在 C 语言 阅读全文
posted @ 2019-04-25 08:47 sparkdev 阅读(44588) 评论(3) 推荐(3) 编辑
摘要:映射是一种数据结构,用于存储一系列无序的键值对,它基于键来存储值。映射的特点是能够基于键快速检索数据。键就像是数组的索引一样,指向与键关联的值。与 C++、Java 等编程语言不同,在 Golang 中使用映射不需要引入任何库。因此 Golang 的映射使用起来更加方便。我们可以通过下图简要的理解一 阅读全文
posted @ 2019-04-23 08:41 sparkdev 阅读(9662) 评论(0) 推荐(4) 编辑
摘要:切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数 append() 来实现的,这个函数可以快速且高效地增长切片,也可以通过对切片再次切割,缩小一个切片的大小。因为切 阅读全文
posted @ 2019-04-17 07:52 sparkdev 阅读(75577) 评论(8) 推荐(16) 编辑
摘要:数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 阅读全文
posted @ 2019-04-15 09:17 sparkdev 阅读(27206) 评论(2) 推荐(3) 编辑
摘要:在 Golang 中,字符串是一种基本类型,这一点和 C 语言不同。C 语言没有原生的字符串类型,而是使用字符数组来表示字符串,并以字符指针来传递字符串。Golang 中的字符串是一个不可改变的 UTF-8 字符序列,一个 ASCII 码占用 1个字节,其它字符根据需要占用 2-4 个字节,这一点与 阅读全文
posted @ 2019-04-09 08:49 sparkdev 阅读(17319) 评论(0) 推荐(2) 编辑
摘要:由于一些客观原因的存在,我们开发 Golang 项目的过程总会碰到无法下载某些依赖包的问题。这不是一个小问题,因为你的工作会被打断,即便你使用各种神通解决了问题,很可能这时你的线程已经切换到其他的事情上了(痛恨思路被打断!)。所以最好是一开始我们就重视这个问题,并一劳永逸的解决它。 问题描述 当我们 阅读全文
posted @ 2019-04-04 09:12 sparkdev 阅读(22046) 评论(0) 推荐(1) 编辑
摘要:工欲善其事,必先利其器!在学习和使用 Golang 时如果有一款得心应手的 IDE,相信一定可以事半功倍。虽然很多 IDE 都提供了对 Golang 的支持,但真正好用的没几个。VSCode 算是不错的一个,但比起收费的 GoLand 还有些差距。本文结合 Golang 和 GoLand 的安装介绍 阅读全文
posted @ 2019-04-01 09:02 sparkdev 阅读(8678) 评论(3) 推荐(4) 编辑

点击右上角即可分享
微信分享提示