
Go程序设计语言
文章平均质量分 91
吃着火锅x唱着歌
这个作者很懒,什么都没留下…
展开
-
Go程序设计语言 学习笔记 第十三章 低级编程
这种类型的垃圾收集器被称为移动GC。例如,如果x和y都是数组,那么x和x[0]具有相同的地址,y和y[0]也是如此,因此区分我们是否已经比较了x和y,还是x[0]和y[0]是很重要的。这些包的API在细节上略有不同,但它们都提供了一个io.Writer的包装器,用于压缩写入到其中的数据,并提供了一个io.Reader的包装器,用于解压从中读取的数据。例如,int16等两字节类型的值的地址应为偶数,rune等四字节值的地址应为4的倍数,而float64、uint64或64位指针等八字节值的地址应为8的倍数。原创 2024-04-20 22:45:43 · 944 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第十二章 反射
Go提供了一种机制,在编译时不知道类型的情况下,可以在运行时更新变量并查看它们的值,调用它们的方法,并应用其表示形式固有的操作。这种机制称为反射。反射还允许我们将类型本身视为头等值(指在编程语言中,某个数据类型(通常是函数或对象)可以像其他数据类型一样被操作和传递)。在这一章中,我们将探索Go的反射功能,看看它们如何增强语言的表现力,特别是它们如何对fmt提供的字符串格式化和encoding/json、encoding/xml等包提供的协议编码的实现至关重要。反射也是我们在第4.6节中看到的text/te原创 2024-04-19 11:35:35 · 621 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第十一章 测试
1949年,EDSAC(第一台存储程序计算机)的开发者莫里斯·威尔克斯在他的实验室楼梯上攀登时突然领悟到一件令人震惊的事情。在《一位计算机先驱的回忆录》中,他回忆道:“我突然完全意识到,我余生中的很大一部分时间将花在查找我自己程序中的错误上。” 毫无疑问,自那以后,每个存储程序计算机的程序员都能理解威尔克斯的感受。当然,如今的程序比威尔克斯时代要庞大和复杂得多,大量的工作已经花在了使这种复杂性可控的技术上。有两种技术尤其突出有效。首先是在部署之前对程序进行常规的同行评审。第二,也是本章讨论的主题,是测试。原创 2024-04-13 17:29:11 · 785 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第十章 包和go工具
在Go 1.5之前,这需要更改这些包的导入路径,因此我们的golang.org/x/net/html的副本将变成gopl.io/vendor/golang.org/x/net/html。这是它的工作原理:标准库提供了GIF、PNG和JPEG的解码器,用户也可以提供其他格式的解码器,但为了保持可执行文件的大小,除非显式请求,否则解码器不会包含在应用程序中。最后,编译后的Go包的目标文件记录了导出信息,不仅仅是对于包本身,还包括了它的依赖关系。这样的目录可能定义了两个包:通常的包,和一个称为外部测试包的包。原创 2024-04-11 23:26:12 · 1372 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第九章 使用共享变量实现并发
在前一章中,我们介绍了几个使用goroutines和channels以一种直接和自然的方式实现并发的程序。然而,在这样做的过程中,我们避开了许多重要而微妙的问题。在本章中,我们将更详细地了解并发的机制。特别地,我们将指出在多个goroutine之间共享变量时出现的一些问题,识别这些问题的分析技术,以及解决这些问题的模式。最后,我们将解释goroutines和操作系统线程之间的一些技术差异。9.1 竞态在串行程序中(即一个程序只有一个goroutine),程序中各个步骤的执行顺序由程序逻辑来决定。比如,原创 2024-04-10 20:23:51 · 857 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第八章 goroutine和通道
并发编程表现为程序由若干个自主的活动单元组成,它从来没有像今天这样重要。Web服务器可以同时处理数千个请求。平板电脑和手机应用在渲染用户界面的同时,后端还同步进行着计算和处理网络请求。甚至传统的批处理任务——读取数据、计算、将结果输出——也使用并发来隐藏IO操作的延迟,并充分利用现代的多核计算机,内核每年的增长点在于数量而非速度。Go有两种并发编程的风格。这一章展示goroutine和通道(channel),它们支持通信顺序进程(Communicating Sequential Process,CSP),原创 2024-04-08 21:48:59 · 797 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第七章 接口
接口类型是对其他类型行为的概括与抽象。通过使用接口,我们可以写出更灵活的函数,这些函数不用绑定在一个特定的类型实现上。很多面向对象语言都有接口的概念,Go语言接口的独特之处是它是隐式实现。即,对于一个具体类型,无须声明类型实现了哪些接口,只要在类型里提供接口中的方法即可。这种设计让你无须改变已有类型的实现,就可以为这些类创建新接口,对于那些定义在你不能控制的包中的类型,这一点特别有用。7.1 接口即约定之前介绍的类型都是具体类型。具体类型指定了它所含数据的精确布局,还暴露了基于这个精确布局的内部操作。原创 2024-04-02 00:12:10 · 1022 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第六章 方法
6.1 方法声明在函数声明前,在其名字前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。下面来写我们第一个方法的例子,这个例子放在我们的package geometry下:// gopl.io/ch5/geometrypackage geometryimport "math"type Point strut { X, Y float64 }// traditionl functionfunc Distance(p, q Po原创 2024-03-28 22:02:22 · 946 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第五章 函数
注:slice传给一个函数时(假如函数不会返回修改后的slice),类似于传指针,你可以修改它的当前值,但如果你在函数中对其调用append,那么如果底层数组的空间还能容纳新元素,那么会把新元素直接放到当前slice的底层数组里,如果底层数组空间不能容纳新元素,那么会重新分配一个新slice,这个新slice大小一般为原大小的2倍(取决于实现),然后把原slice里的内容移动到新slice里,再把新元素放到新slice里。当函数返回一个未命名的返回值,或者没有返回值的时候,返回列表的圆括号可以省略。原创 2024-03-25 22:40:49 · 1214 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第四章 复合数据类型
复合数据类型是由基本数据类型以各种方式组合而构成的。我们将介绍四种复合数据类型:数组、slice、map、结构体。数组和结构体都是聚合类型,它们的值由内存中的一组变量构成。数组的元素具有相同类型,而结构体中的元素类型可以不同。数组和结构体的长度都是固定的。反之,slice和map都是动态数据结构,它们的长度在元素添加到结构中时可以动态增长。4.1 数组数组是具有固定长度且拥有零个或多个相同数据类型元素的序列。由于数组的长度固定,所以Go里很少直接使用。slice的长度可以增长和缩短,很多场合下使用的很原创 2024-03-23 15:47:01 · 1074 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第三章 基本数据
Go的数据类型分四大类:基础类型(basic type)、聚合类型(aggregate type)、引用类型(reference type)、接口类型(interface type)。本章的主题是基础类型,包括数字(number)、字符串(string)、布尔型(boolean)。聚合类型——数组(array,4.1)和结构体(struct,4.4)——是通过各种简单类型得到的更复杂的数据类型。引用是一大分类,其中包括指针(pointer、2.3.2)、slice(4.2)、map(4.3)、函数(func原创 2024-03-20 00:51:53 · 1130 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第二章 程序结构
一个包的源代码保存在一个或多个以.go结尾的文件中,它所在目录名的尾部就是包的导入路径,例如,gopl.io/ch1/helloworld包的文件存储在目录$GOPATH/src/gopl.io/ch1/helloworld中。每一个包给它的声明提供独立的命名空间,例如,在image包中,Decode标识符和unicode/utf16包中的标识符一样,但是关联了不同的函数。基本思路是每一个包级别的变量,以及每一个当前执行函数的局部变量,可以作为追溯该变量的路径的源头,通过指针和其他方式引用可以找到变量。原创 2024-03-17 16:41:54 · 1156 阅读 · 0 评论 -
Go程序设计语言 学习笔记 第一章 入门
本章是对于Go语言基本组件的一些说明。本书所有例子都是针对现实世界的任务的。本章将带您尝试体验用Go语言来编写各种程序:从简单的文件、图片处理到并发的客户端和服务器的互联网应用开发。虽然在一章里不能把所有东西讲清楚,但是以这类应用作为学习一门语言的开始是一种高效地方式。学习新语言比较自然的方式,是使用新语言写一些你已经可以用其他语言实现的程序。1.1 hello, world我们依然以永恒的“hello, world”例子开始,它出现在1978年出版的《The C Programming Langua原创 2024-03-15 22:39:33 · 1077 阅读 · 0 评论