4.2.2. 遍历切片 一种常见的需求是遍历切片中的所有元素。如果我们想要得到切片中的元素但却不希望修改该元素,我们可以使用for … range循环;如果我们需要修改切片中的元素,我们可以使用带有循环计数器的for循环。对于前者,下面是一个例子。 [crayon-672fb322501e32516…
Go语言开发-集合类型-索引和切分切片
4.2.1.索引和切分切片 一个切片是一个隐藏数组的引用,且切片的切片也是对同一个隐藏数组的引用。下面的例子可以解释这一点。
1 2 3 4 5 6 7 8 9 | s := []string{"A", "B", "C", "D", "E", "F", "G"} t := s[2:6] fmt.Println(t, s, "=", s[:4], "+", s[4:]) s[3] = "x" t[len(t)-1] = "y" fmt.Println(t, s, "=", s[:4], "+", s[4:]) [C D E F] [A B C D E F G] = [A B C D] + [E F G] [C x E y] [A B C x E y G] = [A B C x] + [E y G] |
当我们修改数据时,不管是通过原始切片s还是通过切片s的切片t,它们的底层数据都会被修改,所以这两个切片都会受…
Go语言开发-集合类型-数组和切片
4.2.数组和切片 Go语言的数组是一个定长的具有相同类型元素的序列,可以通过使用本身就是数组的元素来创建多维数组。 数组的元素使用[]索引操作符来索引,索引从0开始,所以数组的第一个元素是array[0],最后一个元素是array[len(array)-1]。数组是可变的,所以我们可以使用arra…
Go语言开发-集合类型-值、指针和引用类型
4.1.值、指针和引用类型 本节我们将讨论变量保存的是什么(值、指针和引用,包括指向数组、切片和映射的引用),并在接下来的小结中介绍如何使用数组、切片和映射。 通常情况下,Go语言的变量保存的是相应的值,也就是说,我们可以认为变量可以作为其所保存的值,但不包括通道、函数、方法、映射和切片引用,因为它…
Go语言开发-集合类型
4 集合类型 本章第一节介绍了Go语言中的值、指针和及引用类型,因为对于本章其余部分和后续章节,理解这些概念是必要的。Go语言的指针在语法构成和语意上与C和C++中的指针类似,只是Go不支持指针运算,这样就消除了能够影响C和C++程序的一些潜在bug。Go语言也无需使用free()函数或delete…
Go语言开发-字符串-例子: M3u2pls
3.7. 例子: M3u2pls 在本节中,我们将简单介绍一个短小但完整的程序,该程序从命令行中读取给定的后缀名为 .m3u的音乐播放列表文件并输出一个等效的.pls播放列表文件。程序中使用了很多strings包中的函数,同时也讲解了一些新的知识。 下面是从.m3u文件中摘抄出的一些内容,中间使用省…
Go语言开发-字符串-regexp包
3.6.5. regexp包 本小节给出了一些表,这些表列出了regexp包里的函数和支持的正则表达式语法,同时也给出了几个例子。在本小节或本书的其他地方也会使用到正则表达式,我们假设读者已经具有了一些正则表达式基础。 regexp包是Russ Cox的RE2正则表达式引擎的Go语言实现,该引擎速度…
Go语言开发-字符串-unicode包
3.6.4. unicode包 unicode包提供了一些用来查询unicode码点以确定其是否符合某些标准的函数,例如,一个字符是否可以表示成一个数字或一个小写字母。表3.11列出了一些最常用的函数。除了那些我们期望的函数外,如unicode.ToLower() 和unicode.IsUpper(…
震惊小伙伴的单行函数式代码
几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红。很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,比如Haskell, Ruby, Groovy, Clojure, Python,C#, F#, CoffeeScript。 每篇文章都令人…
Go语言开发-字符串-utf8包
3.6.3. utf8包 unicode/utf8包提供了一些用来查询和操作UTF-8编码的字符串和[]byte切片的函数,参见表3.10。之前我们介绍了如何使用utf8.DecodeRuneInString() 和utf.DecodeLastRuneInString()函数来获取字符串的第一个和最…
这里有一些珍贵的《魂斗罗》设计企划书
关于《魂斗罗》,很多人至今认为系列第一作是红白机上的版本(FC 版),而实际上《魂斗罗》系列真正的起点是 1987 年的街机版。限于条件,当时能玩到街机版的人并不多。在《魂斗罗》推出后的第二年,Konami 还发售了另一款名为《饿流祸》的射击游戏,是 3D 的,令笔者印象颇深。两个游戏的主角形象都来自电影《第一滴血》,但二者之间并没有多大关联。不过本文主要谈《魂斗罗》,其余游戏就不额外展开了。
Go语言开发-字符串-strconv包
3.6.2. strconv包
strconv包提供了许多用于将字符串和其他类型相互转换的函数。表3.8和表3.9(也可以参考fmt包的打印和扫描函数)列出了这些函数。接下来让我们看几个例子。一个常见的需求是将字符串表示的值转换为布尔值。我们可以使用 strconv.ParseBool() 函数来实现。
Go语言开发-字符串-strings包
3.6.1. strings包
在字符串处理中一个常见的需求是能够将字符串切分为字符串切片,然后再做进一步的处理,例如,将字符串转换为数字或去除字符串前后的空格。为了学习如何使用strings包中的函数,我们将通过一些简单的例子来使用这些函数。表3.6和表3.7列出了strings包中所有的函数。首先让我们以切分字符串开始。
Go语言开发-字符串-其他字符串相关的包
3.6.其他字符串相关的包
Go语言对字符串的强大支持并不局限于索引和切片,也不局限于fmt包中丰富的函数。strings包提供了非常丰富的功能,strconv、unicode/utf8和unicode包也提供了大量的非常有用的函数。稍后我们将介绍regexp包中的正则表达式
Go语言开发-字符串-为调试格式化
3.5.6.为调试格式化
%T(类型)用于打印内置的或自定义值的类型,%v用于打印内置值的值。事实上,%v还可以打印自定义类型的值,对于没有定义String()方法的类型使用默认的格式,对于定义了String()方法的类型使用该类型的String()方法打印。
上面这个例子演示了如何使用%t和%v来输出任意值的类型和值。