Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了[日常] Go语言圣经-可变参数习题大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

1.参数数量可变的函数称为为可变参数函数,例子就是fmt.Printf和类似函数2.参数列表的最后一个参数类型之前加上省略符号“...”3.然在可变参数函数内部,...int 型参数的行为看起来很像切片类型,但实际上,可变参数函数和以切片作为参数的函数是不同的 类型不同:fmt.Printf("%T\n",f)4.函数名的后缀f是一种通用的命名规范,代表该可变参数函数可以接收Printf风格的格式化字符串5.interfac{}表示函数的最后一个参数可以接收任意类型

练习5.15: 编写类似sum的可变参数@L_456_1@max和min。虑不传参时,max和min该如何处理,再编写至少接收1个参数的版本。练习5.16:编写多参数版本的Strings.Join。

练习5.17:编写多参数版本的ElementsByTagName,函数接收一个HTML结点树以及任意数量标签名,返回与这些标签名匹配的所有元素。下面给出了2个例子:

func ElementsByTagName(doc *html.Node,name...String) []*html.Nodeimages := ElementsByTagName(doc,"img")headings := ElementsByTagName(doc,"h1","h2","h3","h4")

<div class="cnblogs_Highlighter">
<pre class="brush:go;gutter:true;">package main

import (
"fmt"
"golang.org/x/net/html"
"net/http"
)

func main() {
fmt.Println(max(1,2,3,4,2))
fmt.Println(max())
fmt.Println(join("-","Hello","tsh","hi"))

    resp,_ := http.Get("http://mail.sina.net")
    doc,_ := html.Parse(resp.body)
    resp.body.Close()
    tNodes := ElementsByTagName(doc,"p","a")
    for _,v := range tNodes {
            ForEachNode(v)
            fmt.Println("------------------------")
    }   

}

/
练习5.15: 编写类似sum的可变参数@L_456_1@max和min。虑不传参时,max和min该如何处理,再编写至少接收1个参数的版本。
/
func max(vals ...int) (int,error) {
var m int

    num := len(vals)
    if num == 0 { 
            return 0,fmt.Errorf("max: <a href="http://code.js-code.com/tag/s/" target="_blank" class="keywords">%s</a>","至少传递<a href="http://code.js-code.com/tag/yige/" target="_blank" class="keywords">一个</a>参数")
    }   
    for _,v := range vals {
            if m < v { 
                    m = v 
            }   
    }   
    return m,nil 

}

/
练习5.16:编写多参数版本的Strings.Join。
/
func join(sep String,strs ...String) (String,error) {
var res String
var num = len(strs)
if num == 0 {
return "",fmt.Errorf("join: %s","至少传递一个参数")
}

    for i,v := range strs {
            if i == (num - 1) {
                    res += v
            } else {
                    res += v + sep
            }
    }
    return res,nil

}

/
练习5.17:编写多参数版本的ElementsByTagName,函数接收一个HTML结点树以及任意数量标签名,返回与这些标签名匹配的所有元素。下面给出了2个例子:
/
var nodes []*html.Node

func ElementsByTagName(n html.Node,names ...String) []html.Node {
newNode := n
for _,name := range names {
if n.Type == html.ElementNode && n.Data == name {
nodes = append(nodes,newNodE)
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
//可变参数传参特点
ElementsByTagName(c,names...)
}
return nodes
}
func ForEachNode(n *html.NodE) {
fmt.Println(n.Data)
for c := n.FirstChild; c != nil; c = c.NextSibling {
ForEachNode(C)
}
}

大佬总结

以上是大佬教程为你收集整理的[日常] Go语言圣经-可变参数习题全部内容,希望文章能够帮你解决[日常] Go语言圣经-可变参数习题所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: