随笔分类 - 极客谈
摘要:在上两篇文章中,我主要为你讲解了与go语句、goroutine和Go语言调度器有关的知识和技法。 内容很多,你不用急于完全消化,可以在编程实践过程中逐步理解和感悟,争取夯实它们。 现在,让我们暂时走下神坛,回归民间。我今天要讲的if语句、for语句和switch语句都属于Go语言的基本流程控制语句。
阅读全文
摘要:你好,我是郝林,今天我们继续分享go语句执行规则的内容。 在上一篇文章中,我们讲到了goroutine在操作系统的并发编程体系,以及在Go语言并发编程模型中的地位和作用等一系列内容,今天我们继续来聊一聊这个话题。 知识扩展 问题1:怎样才能让主goroutine等待其他goroutine? 我刚才说
阅读全文
摘要:你很棒,已经学完了关于Go语言数据类型的全部内容。我相信你不但已经知晓了怎样高效地使用Go语言内建的那些数据类型,还明白了怎样正确地创造自己的数据类型。 对于Go语言的编程知识,你确实已经知道了不少了。不过,如果你真想玩转Go语言还需要知道它的一些特色流程和语法。 尤其是我们将会在本篇文章中讨论的g
阅读全文
摘要:在前面的文章中,我们已经提到过很多次“指针”了,你应该已经比较熟悉了。不过,我们那时大多指的是指针类型及其对应的指针值,今天我们讲的则是更为深入的内容。 让我们先来复习一下。 type Dog struct { name string } func (dog *Dog) SetName(name s
阅读全文
摘要:我们都知道,结构体类型表示的是实实在在的数据结构。一个结构体类型可以包含若干个字段,每个字段通常都需要有确切的名字和类型。 前导内容:结构体类型基础知识 当然了,结构体类型也可以不包含任何字段,这样并不是没有意义的,因为我们还可以为类型关联上一些方法,这里你可以把方法看做是函数的特殊版本。 函数是独
阅读全文
摘要:你好,我是郝林,今天我们来聊聊接口的相关内容。 前导内容:正确使用接口的基础知识 在Go语言的语境中,当我们在谈论“接口”的时候,一定指的是接口类型。因为接口类型与其他数据类型不同,它是没法被实例化的。 更具体地说,我们既不能通过调用new函数或make函数创建出一个接口类型的值,也无法用字面量来表
阅读全文
摘要:在前几期文章中,我们分了几次,把Go语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型。 在几乎所有主流的编程语言中,集合类的数据类型都是最常用和最重要的。我希望通过这几次的讨论,能让你对它们的运用更上一层楼。 从今天开始,我会开始向你介绍使用Go语言
阅读全文
摘要:我们已经讨论过了通道的基本操作以及背后的规则。今天,我再来讲讲通道的高级玩法。 首先来说说单向通道。我们在说“通道”的时候指的都是双向通道,即:既可以发也可以收的通道。 所谓单向通道就是,只能发不能收,或者只能收不能发的通道。一个通道是双向的,还是单向的是由它的类型字面量体现的。 还记得我们在上篇文
阅读全文
摘要:至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器。 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值。 我们今天要讲的字典(map)却不同,它能存储的不是单一值的集合,而是键值对的集合。 什么是键值对?它是从英文key-value pair
阅读全文
摘要:作为Go语言最有特色的数据类型,通道(channel)完全可以与goroutine(也可称为go程)并驾齐驱,共同代表Go语言独有的并发编程模式和编程哲学。 Don’t communicate by sharing memory; share memory by communicating. (不要
阅读全文
摘要:我们在上次讨论了数组和切片,当我们提到数组的时候,往往会想起链表。那么Go语言的链表是什么样的呢? Go语言的链表实现在标准库的container/list代码包中。这个代码包中有两个公开的程序实体——List和Element,List实现了一个双向链表(以下简称链表),而Element则代表了链表
阅读全文
摘要:从本篇文章开始,我们正式进入了模块2的学习。在这之前,我们已经聊了很多的Go语言和编程方面的基础知识,相信你已经对Go语言的开发环境配置、常用源码文件写法,以及程序实体(尤其是变量)及其相关的各种概念和编程技巧(比如类型推断、变量重声明、可重名变量、类型断言、类型转换、别名类型和潜在类型等)都有了一
阅读全文
摘要:在前文中,我解释过代码块的含义。Go语言的代码块是一层套一层的,就像大圆套小圆。 一个代码块可以有若干个子代码块;但对于每个代码块,最多只会有一个直接包含它的代码块(后者可以简称为前者的外层代码块)。 这种代码块的划分,也间接地决定了程序实体的作用域。我们今天就来看看它们之间的关系。 我先说说作用域
阅读全文
摘要:在上一篇文章,我们一直都在围绕着可重名变量,也就是不同代码块中的重名变量,进行了讨论。 还记得吗?最后我强调,如果可重名变量的类型不同,那么就需要引起我们的特别关注了,它们之间可能会存在“屏蔽”的现象。 必要时,我们需要严格地检查它们的类型,但是怎样检查呢?咱们现在就说。 我今天的问题是:怎样判断一
阅读全文
摘要:你已经使用过Go语言编写了小命令(或者说微型程序)吗? 当你在编写“Hello, world”的时候,一个源码文件就足够了,虽然这种小玩意儿没什么用,最多能给你一点点莫名的成就感。如果你对这一点点并不满足,别着急,跟着学,我肯定你也可以写出很厉害的程序。 我们在上一篇的文章中学到了命令源码文件的相关
阅读全文
摘要:我已经为你打开了Go语言编程之门,并向你展示了“程序从初建到拆分,再到模块化”的基本演化路径。 一个编程老手让程序完成基本演化,可能也就需要几十分钟甚至十几分钟,因为他们一开始就会把车开到模块化编程的道路上。我相信,等你真正理解了这个过程之后,也会驾轻就熟的。 上述套路是通用的,不是只适用于Go语言
阅读全文
摘要:【Go语言代码较多,建议配合文章收听音频。】 你好,我是郝林。从今天开始,我将和你一起梳理Go语言的整个知识体系。 在过去的几年里,我与广大爱好者一起见证了Go语言的崛起。 从Go 1.5版本的自举(即用Go语言编写程序来实现Go语言自身),到Go 1.7版本的极速GC(也称垃圾回收器),再到201
阅读全文
摘要:我们已经知道,环境变量GOPATH指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件。 这里的源码文件又分为三种,即:命令源码文件、库源码文件和测试源码文件,它们都有着不同的用途和编写规则。( 我在“预习篇”的基础知识图介绍过这三种文件的基本情况。) (长按保存大图查看)
阅读全文
摘要:你好,我是郝林,今天我分享的主题是,学习专栏的正确姿势。 到了这里,专栏的全部内容已经都推送到你的面前了。如果你已经同步学习完了,那么我要给你点一个大大的赞! 还没有看完的同学也不要着急,因为推送的速度肯定要比你们的学习速度快上不少。如果是我的话,我肯定无法用很快的速度,去认真地学习和理解专栏内容的
阅读全文
摘要:你好,我是郝林,今天我分享的内容是:0基础的你,如何开始入门学习Go语言。 1. 你需要遵循怎样的学习路径来学习Go语言? 我们发现,订阅本专栏的同学们都在非常积极的学习和讨论,这让我们非常欣慰,并且和你一样干劲十足。不过,我在留言中发现,大家的基础好像都不太一样,大致可以分为这么几类。 零基础的同
阅读全文