随笔分类 - go基础系列
摘要:分布式消息传递的方式. REST RPC 消息队列 都在什么情况下使用这三种方式呢? 1. 客户端和主服务器之间, 使用的是REST请求方式 2. 主服务器和其他子服务器之间通信,比如接口调用, 可以使用RPC 3. 服务器和服务器之间消息传递可以是用消息队列 对外: 使用REST 模块内部:使用R
阅读全文
摘要:并发版爬虫, 在上一篇单机版爬虫的基础上演变而来 这里只有并发引擎的代码, 基本的解析器代码参考: https://www.cnblogs.com/ITPower/articles/12450374.html 一. 单节点版爬虫的问题 拉取数据的速度太慢, 慢有两部分. 一部分是网络请求, 根据ur
阅读全文
摘要:爬虫的分类 网络爬虫分为两类 1. 通用爬虫: 类似于baidu, google. 他们会把大量的数据挖下来, 保存到自己的服务器上. 用户打开跳转的时候, 其实先是跳转到他们自己的服务器. 2. 聚焦爬虫: 其实就是有目标的爬虫, 比如我只需要内容信息. 那我就只爬取内容信息. 通常我们使用的爬虫
阅读全文
摘要:先普及一下, 什么是广度优先搜索 广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶点时,依次遍历其所有的邻接点,然后再从这些邻接点出发,同样依次访问它们的邻接点。按照此过程,直到图中所有被访问过的顶点的邻接点都被访问到。 最后还需要做的操作就是查看图中是否存在尚未被访问的顶点,若有
阅读全文
摘要:其实这一章的内容, 我们在之前的测试章节都已经涉及过了. 一. 模拟一个http服务端 package main import "net/http" type handler int func (h *handler) ServeHTTP(writer http.ResponseWriter, re
阅读全文
摘要:感觉channel在理解起来还有点费劲的, 尤其是select的使用, 既要可以读数据, 又要可以写数据. 复习一下都学了哪些?然后在重点查一下select的资料 一. channel的定义. channel的读数据--两种方式 package main import ( "fmt" "time"
阅读全文
摘要:channel用于goroutine之间的通讯. 其内部实现了同步, 确保并发安全, 多个goroutine同时访问, 不需要加锁. 对channel操作行为做如下总结: 1. ch <- : 写入channel 2. ch -> :读出channel 3. clouse : 关闭channel g
阅读全文
摘要:接下来学习并发编程, 并发编程是go语言最有特色的地方, go对并发编程是原生支持. goroutine是go中最近本的执行单元 每一个go程序至少有一个goroutine, 那就是主goroutine. 当程序启动时, 他会自动创建. 也就是main方法 main方法也是一个goroutine 一
阅读全文
摘要:java也可以生成文档, 就像一个手册一样, 可以用来查看方法, 接口, 下面我们给go项目生成文档 godoc -http :6060 godoc如果没有需要下载 然后在浏览器打开http://localhost:6060就可以查看生成的文档了. 可以进入到Package包中查看. 1. 生成注释
阅读全文
摘要:下面分析近期做过的一个beego项目 最新开发了一个go项目, 目前已经上线, 昨天研究了性能测试, 那就对之前做的项目进行一个性能分析吧 给beeg项目添加pprof功能. 百度查了, 说beego是支持pprof的, 只需要在配置文件中beego.PprofOn = true开启即可, 但我试了
阅读全文
摘要:1. testing.T 对函数/方法进行单元测试 2. testing. B 对性能进行的测试 3. testing.M 对main方法进行的测试 参考文献 1. https://blog.csdn.net/fujian9544/article/details/100080029
阅读全文
摘要:接着上次的博客: https://www.cnblogs.com/ITPower/articles/12315637.html pprof的基本操作, 上次博客有记录, 这里进一步研究pprof 接下来开始今天的学习内容. 计划今天研究以下几个部分的内容 1. pprof扩展 a. 在单元测试tes
阅读全文
摘要:一. go语言单元测试写法 1. 文件命令, 测试内容+ _test 2. 测试的方法名以Test开头. 参数为(test *Test) 3. 测试文件和源文件放在同一个目录中 例: package TestingDebug func Add(a, b int) int { return b + a
阅读全文
摘要:资源处理是什么? 打开文件需要关闭, 打开数据库连接, 连接需要释放. 这些成对出现的就是资源管理. 有时候我们虽然释放了, 但是程序在中间出错了, 那么可能导致资源释放失败. 如何保证打开的文件一定会被关闭呢? 这就是资源管理与错误处理考虑的一个原因 一. defer 1. defer保证在函数结
阅读全文
摘要:一. 函数 1. 函数是组织好的、可重复使用的、用于执行指定任务的代码块。Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。 2. 函数的定义 Go语言中定义函数使用func关键字 func 函数名(参数)(返回值){ 函数体 } 定义规则: 函数名:由字母、数字、下划线组成
阅读全文
摘要:接口的设计原则有很多. 今天我们来研究两种. 后面在陆续研究 1. 开闭原则 2. 依赖倒置原则 interface是Go语言的基础特性之一, 可以理解为对一种类型的规范或者约束. 他跟java, c++不同, Go语言实现接口不需要显示说明实现了哪个接口, 也没有继承或者子类或者implement
阅读全文
摘要:下面介绍几个常用的接口 1. stringer 在fmt.print中定义了一个Stringer接口. 这个接口里只有一个方法String. 实现了这个接口的String方法的结构体, 那么在外部调用打印结构体的时候, 将按照Stringer中定义的方式打印. 例如给Retriever结构体增加一个
阅读全文
摘要:第一天: 接口的定义和实现 第二天: 一. go语言是面向接口编程. 在学习继承的时候说过, go语言只有封装, 没有继承和多态. 那么继承和多态在go中如何实现呢? 通过接口来实现 1. 接口的定义 接口定义由两部分组成. 使用者和实现者. 接口由使用者定义是什么意思呢? 比如, 我要下载一个资源
阅读全文
摘要:第一天: go对象的基础. 如何创建结构体, 方法, 构造方法(工厂函数), 接收者模式 第二天: 包, 如何引入外部包和系统包(定义别名或组合) 第三天: 每个目录定义一个main方法. 一. 面向对象介绍 1. go语言仅支持封装, 不支持继承和多态. 那么继承和多态所做的事情, 怎么来做呢?
阅读全文
摘要:本章讲解了3方面的内容 1. 数组 2. 切片 3. map 一、数组 1. 数组的定义方式 var arr1 [5]int arr2 := [3]int{1, 3, 5} arr3 := [...]int{2, 4, 6, 8, 10} var grid [4][5]int fmt.Println
阅读全文