第5章 函数
函数可以让我们将一个语句序列打包成一个单元,然后可以从程序中其他地方多次调用,函数的机制可以让我们把一个大的工作分解成小任务。前面我们已经接触过函数,本章我们将讨论函数的更多特性
5.3 多返回值
我们都已经知道,一个函数可以有多个返回值,接下来我们再来继续研究函数的返回值
许多标注库中的函数返回值一般都有两个,一个是期望得到的返回值,另一个是函数出错时的错误信息
我们来看看新改写的findlinks函数,新改后的findlinks可以自己发起HTTP请求。因为HTTP请求和解析操作都有可能失败,因此findlinks函数有两个返回值,每一个显示链接列表,另一个返回错误信息
一般而言,HTML的解析器可以处理HTML页面的错误结点,构造出HTML页面结构,所以解析HTML很少失败,并且意味着如果findlinks失败了,极有可能是I/O的错误导致的
func main() {
for _, url := range os.Args[1:] {
links,err := findlinks(url)
if err != nil {
fmt.Fprintf(os.Stderr,"findlinks2",err)
continue
}
for _,link := range links {
fmt.Println(link)
}
}
}
func findlinks(url string) ([]string,error) {
resp,err := http.Get(url)
if err != nil {
return nil,err
}
if resp.StatusCode != http.StatusOK {