[日常] Go语言圣经-可变参数习题】的更多相关文章

1.参数数量可变的函数称为为可变参数函数,例子就是fmt.Printf和类似函数2.参数列表的最后一个参数类型之前加上省略符号“...”3.虽然在可变参数函数内部,...int 型参数的行为看起来很像切片类型,但实际上,可变参数函数和以切片作为参数的函数是不同的 类型不同:fmt.Printf("%T\n", f)4.函数名的后缀f是一种通用的命名规范,代表该可变参数函数可以接收Printf风格的格式化字符串5.interfac{}表示函数的最后一个参数可以接收任意类型 练习5.15:…
Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型.接口类型是一种抽象的类型4.一个类型可以自由的使用另一个满足相同接口的类型来进行替换被称作可替换性(LSP里氏替换) 练习 7.1: 使用来自ByteCounter的思路,实现一个针对对单词和行数的计数器.你会发现bufio.ScanWords非常的有用. package main import ( "bufio" "f…
Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访问完整的词法环境(lexical environment),这意味着在函数中定义的内部函数可以引用该函数的变量3.函数值不仅仅是一串代码,还记录了状态,意味着匿名函数和父函数中,存在变量引用,函数值属于引用类型和函数值不可比较的原因.Go使用闭包(closures)技术实现函数值,Go程序员也把函数…
Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重要组成部分,程序运行失败仅被认为是几个预期的结果之一 4.那些将运行失败看作是预期结果的函数,它们会返回一个额外的返回值,通常是最后一个,来传递错误信息 5.用户需要了解更多的错误信息.因此,额外的返回值不再是简单的布尔类型,而是error类型 6.内置的error是接口类型,error类型可能是n…
1.Slice(切片)代表变长的序列,序列中每个元素都有相同的类型,一个slice类型一般写作[]T,其中T代表slice中元素的类型:slice的语法和数组很像,只是没有固定长度而已,slice的底层确实引用一个数组对象 2.内置的len和cap函数分别返回slice的长度和容量 3.s[i:j] , 从第i个元素开始到第j-1个元素的子序列,s[:]切片操作则是引用整个数组 4.slice值包含指向第一个slice元素的指针,因此向函数传递slice将允许在函数内部修改底层数组的元素 5.将…
package main import( "fmt" "sync" ) var balance int func Deposit(amount int) { balance = balance + amount } func Balance() int { return balance } /* 问题: 1.在Alice运行期间 balance = balance + amount 这一步运算可能会被Bob中间挤占 2.当运行到balance + amount的时候…
练习 7.3: 为在gopl.io/ch4/treesort (§4.4)的*tree类型实现一个String方法去展示tree类型的值序列. package main import( "fmt" "bytes" ) func main(){ //定义数组 arr:=[...]int{6,2,1,3,4,5} var t *tree for i:=0;i<len(arr);i++{ t=add(t,arr[i]) } //t1:=Sort(arr[:],t)…
练习5.13: 修改crawl,使其能保存发现的页面,必要时,可以创建目录来保存这些页面.只保存来自原始域名下的页面.假设初始页面在golang.org下,就不 要保存vimeo.com下的页面. package main import ( "fmt" "io" "io/ioutil" "links" "log" "net/http" "net/url" "…
练习 5.1: 修改findlinks代码中遍历n.FirstChild链表的部分,将循环调用visit,改成递归调用. 练习 5.2: 编写函数,记录在HTML树中出现的同名元素的次数. 练习 5.3: 编写函数输出所有text结点的内容.注意不要访问<script>和<style>元素,因为这些元素对浏览者是不可见的. 练习 5.4: 扩展visit函数,使其能够处理其他类型的结点,如images.scripts和style sheets. // Findlinks1 prin…
基本上C语言的可变参数原理在不同平台和不同编译器下基本类似(通过函数入栈,从右向左,从高位到低位地址),不过部分实现会有所不同:在使用中需要注意的是: va_list 为char 类型指针,部分调用如vnsprintf.vsprintf(内部通过遍历获取va_arg各个参数值)等会修改其指针位置:在windows下通过一个副本va_list实现va_arg操作,而在linux下不会产生副本va_list,而是直接修改原va_list的指针对象: 在编写程序的时候,当调用了类似vnsprintf的…