版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/51067231 在Go语言中,函数可以有多个返回值,这个特性我们已经在之前的例子见过很多,很多标准库函数都会返回两个值,一个是期望得到的函数执行结果,另外一个是函数出错时的错误值。 下面的程序是findlinks的改进版本,它可以自己发起HTTP请求,这样就不必再运行fetch。因为HTTP请求和解析操作都可能会失败,因此find...
-
Go语言核心之美 4.3-多返回值
-
Go语言核心之美 4.2-递归函数
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/51066894 函数是可以递归调用的,这意味着函数可以直接或者间接调用自身。对于一些问题而言,递归是一种非常有用的技术,例如处理递归的数据结构(树形结构),在3.4节中,我们就通过遍历二叉树来实现简单的插入排序,在本节中,将再次使用这种技术来处理HTML文件。 本节后续的示例代码中使用了非标准包golang.org/x/net/h...
-
Go语言核心之美 4.1-函数声明
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/51066470 函数有以下几个优点:可以把一系列语句打包成一个程序单元;可以把大的工作分解为小的任务,这些任务可以让不同程序员在不同时间、不同地点独立完成;一个函数可以对用户隐藏实现细节。这些优点,让函数变成了程序不可或缺的最重要的部分之一。 在此章之前,我们已经见过很多函数了,现在是时候彻底讨论函数的特性了。本章用的例子是一个网...
-
Go语言核心之美 3.6-template模版
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/51063999 上一节的例子中使用了Printf做了输出格式化,当然,对于简单的例子来说足够了,但是我们有时候还是需要复杂的输出格式,甚至需要将格式化代码分离开来。这时,可以使用text/template和html/template。 一个模版就是一个字符串或者一个文件,里面包含了一个或多个{{..}}形式的对象,这种对象被称为模...
-
Go语言核心之美 3.5-JSON
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/51062455 JSON(JavaScript Object Notation)是一种发送和接收结构化信息的标准化表示法。类似的标准化协议还有XML、ASN.1、Protobuf、Thrift等等,这些协议都有自己的鲜明特色,但是由于JSON的简洁、可读、流行性,因此它是应用最广泛的协议之一。 Go语言对上述协议的编码和解码都有很...
-
Go语言核心之美 3.4-Struct结构体
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50970761 struct(结构体)也是一种聚合的数据类型,struct可以包含多个任意类型的值,这些值被称为struct的字段。用来演示struct的一个经典案例就是雇员信息,每条雇员信息包含:员工编号,姓名,住址,出生日期,工作岗位,薪资,直属领导等。每个雇员的所有信息都可以存在一个struct中,该struct可以作为变量...
-
Go语言核心之美 3.3-Map
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50963152 哈希表是一种非常好用、适用面很广的数据结构,是key-value对的无序集合。它的key是唯一的,通过key可以在常数复杂度时间内进行查询、更新或删除,无论哈希表有多大。 Go语言的map类型就是对哈希表的引用,表示为map[key]value。map中所有的key都是相同的类型,所有的value也是相同的类型,不...
-
Go语言核心之美 3.2-slice切片
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50957218 Slice(切片)是长度可变的元素序列(与之对应,上一节中的数组是不可变的),每个元素都有相同的类型。slice类型写作[]T,T是元素类型。slice和数组写法很像,区别在于slice没有指定长度。 数组和slice之间的联系是非常紧密的。slice是很轻量的数据结构,是引用类型,它指向一个底层数组,该数组被称之...
-
Go语言核心之美 3.1-数组
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50955096 上一章我们深入学习了基本数据类型,它们是构建复杂数据类型的基础,是组成Go语言世界的原子。本章,我们将学习复合数据类型:通过不同的方式将基本类型组合起来。主要有四种复合类型--数组,切片(slice),map,结构体(struct),在本章末尾,我们将展示如何通过struct来进行JSON编解码,同时配合templ...
-
Go语言核心之美 2.5-字符串
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50907392 字符串是不可变的字节序列,虽然可以包含任意数据,包括0这个字节,不过字符串通常是用来包含可读性较强的文本。文本字符串通常采用UTF-8编码,由Unicode码点(rune)组成。 内置的len函数会返回字符串的所有字节(byte)数(注意不是rune的数目!!一个rune可能包含多个字节),下标操作s[i]可以获取...
-
Go语言核心之美 2.4-布尔值
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50907257 布尔值有两种:true和false。if和for语句中的条件都是布尔值,比较运算符== 、<等也会产生一个布尔值。一元运算符! 是逻辑取反操作,所以!true就是false。Go语言提倡简洁的风格,因此我们会将x == true这种表达式直接写成x:if x {..} 。 布尔值可以结合&&(AND) 、|| (O...
-
Go语言核心之美 2.3-复数
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50906571 Go提供了两种大小的复数类型:complex64和complex128,分别由float32和float64组成。内置函数complex从指定的实部和虚部构建复数,内置函数real和imag用来获取复数的实部和虚部:var x complex128 = complex(1, 2) // 1+2i var y com...
-
Go语言核心之美 2.2-浮点数
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50904902 Go提供了两种size的浮点数,float32和float64。它们的算术规范是由IEEE754国际标准定义,现代CPU都实现了这个规范。 浮点数能够表示的范围可以从很小到很巨大,这个极限值范围可以在math包中获取,math.MaxFloat32表示float32的最大值,大约是3.4e38,math.MaxFl...
-
Go语言核心之美 2.1-整数
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50902368 第二章 序 在计算机底层,一切都是比特位。然而计算机一般操作的都是固定大小的值,称之为字(word)。字会被解释为整数、浮点数、比特位数组、内存地址等,这些字又可以进一步聚合成数据包(packet)、像素点、作品集、诗歌或者其它任何对象。Go语言提供了多样化的数据组织方式,这些数据类型既有硬件层面的兼容性,又能让程...
-
Go语言核心之美 1.5-作用域
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50898812 变量的作用域是指程序代码中可以有效使用这个变量的范围。不要将作用域和生命期混在一起。作用域是代码中的一块区域,是一个编译期的属性;生命期是程序运行期间变量存活的时间段,在此时间段内,变量可以被程序的其它部分所引用,是运行期的概念。 语法块是包含在花括号内的一系列语句,例如函数体或者循环体。语法块内部声明的变量是无法...
-
Go语言核心之美 1.4-包和文件
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50895941 一、Package Go语言中的包(Package)就像其它语言的库(Library)或模块(Module)一样,支持模块化,封装性,可重用性,单独编译等特点。包的源码是由数个.go文件组成,这些文件所在的目录名是import路径的最后一个词,例如github.com/sunface/corego包的所有文件都存储...
-
Go语言核心之美 1.3-赋值及类型声明篇
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50894001 赋值(Assignment) 变量的值可以通过赋值操作符 = 来更新, v = 10。x = 1 // 具名变量x *p = true // 指针变量 person.name = "bob" // 结构体struct的字段 count[x] = count[x] * scale // 数组、切片或者map的某个元素...
-
Go语言核心之美 1.2-变量及声明篇
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50886042 变量 1.声明变量 使用var关键字可以创建一个指定类型的变量: var i int = 0 var i = 0 var i int 以上三个表达式均是合法的,第三个表达式会将i初始化为int类型的零值,0;如果i是bool类型,则为false;i是float64类型,则为0.0;i为string类型,则为"";i...
-
Go语言核心之美 1.1-命名篇
版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/50885334 命名篇 1.Go的函数、变量、常量、自定义类型、包(Package)的命名方式遵循以下规则: 1)首字符可以是任意的Unicode字符或者下划线 2)剩余字符可以是Unicode字符、下划线、数字 3)字符长度不限 2.Go只有25个关键字 break default func interface select c...