[日常] Go语言圣经--结构体,JSON习题
Go语言圣经-结构体
1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体
2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行
3.如果结构体成员名字是以大写字母开头的,那么该成员就是导出的;这是Go语言导出规则决定的。一个结构体可能同时包含导出和未导出的成员。
4.一个命名为S的结构体类型将不能再包含S类型的成员:因为一个聚合的值不能包含它自身,S类型的结构体可以包含*S指针类型的成员
我们使用一个二叉树来实现一个插入排序:
5.结构体类型的零值是每个成员都是零值。通常会将零值作为最合理的默认值
6.结构体字面值,第一种要求以结构体成员定义的顺序为每个结构体成员指定一个字面值
第二种写法,以成员名字和相应的值来初始化,可以包含部分或全部的成员,更常用
7.企图隐式使用未导出成员的行为是不允许的
8.如果考虑效率的话,较大的结构体通常会用指针的方式传入和返回,函数中
9.如果要在函数内部修改结构体成员的话,用指针传入是必须的;因为在Go语言中,所有的函数参数都是值拷贝传入的,函数参数将不再是函数调用时的原始变量。
10.结构体比较,如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的
11.可比较的结构体类型和其他可比较的类型一样,可以用于map的key类型。
12.结构体嵌入和匿名成员,让我们只声明一个成员对应的数据类型而不指名成员的名字;这类成员就叫匿名成员,得意于匿名嵌入的特性,我们可以直接访问叶子属性而不需要给出完整的路径:
13.结构体字面值并没有简短表示匿名成员的语法
14.Printf函数中%v参数包含的#副词,它表示用和Go语言类似的语法打印值。对于结构体类型来说,将包含每个成员的名字。
Go语言圣经-JSON
1.标准库中的encoding/json、encoding/xml、encoding/asn1等包提供支持
2.一个JSON数组可以用于编码Go语言的数组和slice
3.JSON的对象类型可以用于编码Go语言的map类型(key类型是字符串)和结构体
4.将一个Go语言中类似movies的结构体slice转为JSON的过程叫编组(marshaling)。编组通过调用json.Marshal函数完成,返还一个编码后的字节slice,包含很长的字符串
5.json.MarshalIndent函数将产生整齐缩进的输出,两个额外的字符串参数用于表示每一行输出的前缀和每一个层级的缩进
6.只有导出的结构体成员才会被编码,这也就是我们为什么选择用大写字母开头的成员名称
7.结构体的成员Tag可以是任意的字符串面值,但是通常是一系列用空格分隔的key:"value"键值对序列;因为值中含义双引号字符,因此成员Tag一般用原生字符串面值的形式书写
8.编码的逆操作是解码,对应将JSON数据解码为Go语言的数据结构,Go语言中一般叫unmarshaling,通过json.Unmarshal函数完成
9.用url.QueryEscape来对查询中的特殊字符进行转义操作。
10.使用了基于流式的解码器json.Decoder,它可以从一个输入流解码JSON数据,还有一个针对输出流的json.Encoder编码对象
练习 4.10: 修改issues程序,根据问题的时间进行分类,比如不到一个月的、不到一年的、超过一年。
练习 4.11: 编写一个工具,允许用户在命令行创建、读取、更新和关闭GitHub上的issue,当必要的时候自动打开用户默认的编辑器用于输入文本信息。
练习 4.12: 流行的web漫画服务xkcd也提供了JSON接口。例如,一个 https://xkcd.com/571/info.0.json 请求将返回一个很多人喜爱的571编号的详细描述。下载每个链接(只下载一次)然后创建一个离线索引。编写一个xkcd工具,使用这些离线索引,打印和命令行输入的检索词相匹配的漫画的URL。
练习 4.13: 使用开放电影数据库的JSON服务接口,允许你检索和下载 https://omdbapi.com/ 上电影的名字和对应的海报图像。编写一个poster工具,通过命令行输入的电影名字,下载对应的海报。
// Issues prints a table of GitHub issues matching the search terms.
package main import (
"fmt"
"github"
"log"
"os"
"time"
)
/*
练习 4.10: 修改issues程序,根据问题的时间进行分类,比如不到一个月的、不到一年的、超过一年。
*/
func main() {
result, err := github.SearchIssues(os.Args[1:])
if err != nil {
log.Fatal(err)
}
fmt.Printf("%d issues:\n", result.TotalCount)
//当前时间
now := time.Now().Unix()
//前一个月
preMonth := now - 30*24*3600
//前一年
preYear := now - 365*24*3600
var notMonth []*github.Issue
var notYear []*github.Issue
var overYear []*github.Issue for _, item := range result.Items {
createTime := item.CreatedAt.Unix()
if createTime > preMonth {
notMonth = append(notMonth, item)
continue
}
if createTime < preMonth && createTime > preYear {
notYear = append(notYear, item)
continue
}
overYear = append(overYear, item)
} fmt.Println("issues(不到一个月):")
for _, item := range notMonth {
fmt.Printf("#%-5d %9.9s %.55s 时间:%s\n", item.Number, item.User.Login, item.Title, item.CreatedAt)
} fmt.Println("issues(不到一年):")
for _, item := range notYear {
fmt.Printf("#%-5d %9.9s %.55s 时间:%s\n", item.Number, item.User.Login, item.Title, item.CreatedAt)
}
fmt.Println("issues(超过一年):")
for _, item := range overYear {
fmt.Printf("#%-5d %9.9s %.55s 时间:%s\n", item.Number, item.User.Login, item.Title, item.CreatedAt)
}
}
[日常] Go语言圣经--结构体,JSON习题的更多相关文章
- [日常] Go语言圣经-WEB服务与习题
Go语言圣经-web服务 1.Web服务程序,标准库里的方法已经帮我们完成了大量工作 2.main函数将所有发送到/路径下的请求和handler函数关联起来,/开头的请求其实就是所有发送到当前站点上的 ...
- [日常] Go语言圣经--并发的循环习题
练习 8.4: 修改reverb2服务器,在每一个连接中使用sync.WaitGroup来计数活跃的echo goroutine.当计数减为零时,关闭TCP连接的写入,像练习8.3中一样.验证一下你的 ...
- C语言中结构体赋值问题的讨论
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- 01.C语言关于结构体的学习笔记
我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...
- C语言中结构体对齐问题
C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- C语言中结构体赋值问题的讨论(转载)
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- go语言学习-结构体
结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...
随机推荐
- TDateTimePicker中Date与Time的误导
Delphi DateTime,Date,Time TDateTimePicker DateTimeDateTimeDateTimePicker 一.DateTime,Date,Time存储方式本质上 ...
- 使用solr crud 的三种方式(了该)
1.solrJ 实际是http 请/响 2.spring data solr 实际是对官方类库(solrJ)的封装 3.使用httpClient 手动请求
- 前端基础-html 列表标签,表格标签,表单标签
一.列表标签 1.ul(无序列表)标签 ul(unordered list)无序列表,ul下的子元素只能是li(list item),如下示例: <ul> <li>第一项< ...
- 教你通过Node.js漏洞完成渗透测试
本篇文章较为详细的讲述了通过node.js的已知漏洞来完成渗透测试的过程,介绍了node.js存在的漏洞可以在多种工具下的不同利用方式.因为我认为会对论坛部分web安全新手有所帮助,所以整理到论坛中. ...
- 二进制入门-打造Linux shellcode基础篇
0x01 前言 本文的目的不是为了介绍如何进行恶意的破坏性活动,而是为了教会你如何去防御此类破坏性活动,以帮助你扩大知识范围,完善自己的技能,如有读者运用本文所学技术从事破坏性活动,本人概不负责. ...
- <c:if test=""></c:if>如何判断空(使用例子)
<c:if test=""></c:if>如何判断空(使用例子) 标签: session / 前端 / c-if userName是登录的时候放到sessi ...
- MyBatis框架介绍及其实操
一.基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.例如,文件的存储.数据的读取等都是数据持久化操作.数据模型可以是任何数据 ...
- typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 集成 koa
接上文 1.安装 koa yarn add koa koa-router koa-static yarn add @types/koa @types/koa-router @types/koa-sta ...
- 使用代码查看Nutch爬取的网站后生成的SequenceFile信息
必须针对data文件中的value类型来使用对应的类来查看(把这个data文件,放到了本地Windows的D盘根目录下). 代码: package cn.summerchill.nutch; impo ...
- 如何用ajax下载文件
引子 在HTML5没来之前,浏览器想要下载文件,可能有这么几种方式: 借助a标签,<a href="学习资料.xlsx"></a> window.locat ...