首页 文章 精选 留言 我的

精选列表

搜索[Go语言],共10006篇文章
优秀的个人博客,低调大师

[日常] Go语言圣经-可变参数习题

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

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册