golang的序列化

  1. Go中使用encoding/json中的Marshal以及Unmarshal对数据进行序列化和反序列化
  2. json中的key永远为字符串,Golang中一般我们键都为string,value为interface,之后拿到interface采用反射来判断类型,
  3. 序列化的时候首字母必须大写,不然访问不到
  4. 如果希望序列化之后结构体的key有其他别名或者首字母小写,可以加上一个tag

具体的序列化

  1. map序列化之后,Key为json中的key,value也是json中的value
  2. 结构体序列化之后,如果有tag,那么key就是对应的tag

注意:使用Unmarshal()的时候,第2个参数,直接传声明的变量进去即可,因为Golang会自动帮我们分配内存和赋值
例如传入一个只声明的map或结构体

gojson

爬取豆瓣Top250电影

前言

十一无聊,想着看几部电影来happy一下,不知道有什么精彩电影,于是就爬取一下豆瓣的Top250

项目已经开源到了网站

实现步骤

  1. 爬取页面内容(伪装一个user-agent)
  2. 获取页面内容后使用正则表达式提取自己想要的内容(正则表达式编写)
  3. 将自己提取到的内容存放到数据库中(go的数据持久化)

go中的heap实现大根堆与小根堆

小根堆

几个注意点:

  1. 因为heap需要我们实现sort接口(3个方法,Less,Swap,以及Len)我们使用Less比较的时候决定了大根堆或小根堆
  2. push以及pop因为涉及到切片中元素个数的改变,可能进行扩容或缩容,所以要使用指针
  3. Push以及Pop的实现就按照对切片的处理即可
  4. 之后初始化我们的堆的时候需要先建立我们自己的堆,然后使用heap.Init()初始化
  5. 后面堆要弹出或加入元素都必须使用heap.Push()以及heap.Pop()