摘要: GET 和 POST 是我们最常用的两种请求方式,今天结合前端 axios 请求库来讲一讲,如何在 golang 服务中,正确接收这两种请求的参数信息。 搭建一个简单的服务 首先,我们来创建一个最简单的静态页面,将 axios 引进来: 接下来,我们写一个简单的 golang 服务程序,在浏览器端访阅读全文
posted @ 2019-07-05 13:29 liuhe688 阅读(75) 评论(0) 编辑
摘要: 前面我们介绍了 Marshal 和 Unmarshal 方法,今天再解一下另外两个 API:Encoder 和 Decoder。 Encoder Encoder 主要负责将结构对象编码成 JSON 数据,我们可以调用 json.NewEncoder(io.Writer) 方法获得一个 Encoder阅读全文
posted @ 2019-07-04 13:36 liuhe688 阅读(34) 评论(0) 编辑
摘要: 上次我们介绍了 Go 语言中序列化和反序列化 JSON 数据的两个方法 Marshal() 和 Unmarshal(),并以示例演示了它们的用法。 我们在例子中看到,需要事先声明好对应的结构体,才能跟 JSON 字段映射起来。 有的时候,如果 JSON 数据的定义过于复杂,我们需要一种更加灵活的方式阅读全文
posted @ 2019-06-04 08:05 liuhe688 阅读(55) 评论(0) 编辑
摘要: JSON 作为目前最流行的数据传输格式, 相信每个程序员都跟它打过交道吧。使用 Go 语言时,也不可避免的要操作 JSON 数据,令人惊喜的是,Go 内置了序列化和反序列化 JSON 的功能,今天就来总结一下。 序列化是将结构对象转为 JSON 字符串,反序列化是将 JSON 字符串转为结构对象,它阅读全文
posted @ 2019-06-03 08:03 liuhe688 阅读(101) 评论(0) 编辑
摘要: 最近网站需要针对百度做 SEO 优化,提交代码之后,用 Go 语言写了个程序,模拟百度的爬虫,测试返回的内容是否正确。 代码很简单,就是发送一个请求,把百度相关的信息放入请求头中即可,代码如下: 运行完上面的程序,会在当前目录下,生成一个 source.txt 文件,内容即抓取过来的网页源代码。 有阅读全文
posted @ 2019-05-15 19:35 liuhe688 阅读(52) 评论(0) 编辑
摘要: 使用 Go 语言,我们可以轻松创建出 Web 服务,这一点比 Node.js 还要简单,今天就来总结一下 Go 语言中 Web 服务的创建方式。 首先,我们需要引入 net/http 这个包来处理 HTTP 请求,然后在指定的端口开启服务,下面来写一个最简单的 Web 服务程序: 上面代码中,我们会阅读全文
posted @ 2018-08-10 06:33 liuhe688 阅读(31) 评论(0) 编辑
摘要: 上次我们写了个并发程序,来抓取几个站点的网页内容,其中使用到了正则表达式来获取站点的域名部分,并作为文件名存储本地文件,今天,我们就来总结一下正则表达式的常用方法。 首先,在 Go 语言中,正则表达式相关的操作都封装在 regexp 这个包中,所以使用前需要引入该包。 下面我们来写个最简单的案例: 阅读全文
posted @ 2018-08-09 06:29 liuhe688 阅读(44) 评论(0) 编辑
摘要: 在上一篇中,我们根据命令行的 URL 参数输入,抓取对应的网页内容并保存到本地磁盘,今天来记录一下如何利用并发,来抓取多个站点的网页内容。 首先,我们在上一次代码的基础上稍作改造,使它能够获取多个站点的内容。下面代码中,我们首先定义好三个 URL,然后逐个发送网络请求,获取数据并保存,最后统计消耗的阅读全文
posted @ 2018-08-08 13:01 liuhe688 阅读(47) 评论(0) 编辑
摘要: 今天写个简单的程序,根据指定的 URL 来抓取相应的网页内容,然后存入本地文件。这个程序会涉及到网络请求和文件操作等知识点,下面是实现代码: 上面的代码中,我们引入了 网络包,然后调用 方法获取 URL 对应的资源,之后读取出资源数据,然后在控制台打印,并将内容写入到本地文件中。 需要注意的是,在读阅读全文
posted @ 2018-08-07 07:59 liuhe688 阅读(23) 评论(0) 编辑
摘要: 上次我们从命令行接收用户输入,并统计了每次输入内容出现的次数,今天对程序加以改造,使其能够读取文件内容,并统计每行文本出现的次数。 首先,我们把接收输入的逻辑封装成一个函数: 上面的 函数有两个参数: 和 ,第一个参数可以接收标准输入或文件对象,第二个参数接收一个 map 引用。 然后,我们移除接收阅读全文
posted @ 2018-08-05 12:53 liuhe688 阅读(22) 评论(0) 编辑
摘要: 上次我们介绍了收集命令行参数的几种方式,感觉还是不过瘾,今天再来介绍一下如何从命令行接收用户输入。 我们这里设计一个小需求,借助程序从命令行收集用户的逐行输入,以 为结束信号,然后在输入结束后,统计每一行输入的内容和该内容出现的次数。 为了完成这个功能,我们首先需要创建一个 的数据结构,来存放每一行阅读全文
posted @ 2018-08-03 07:42 liuhe688 阅读(78) 评论(0) 编辑
摘要: 记得最早在学校机房学习 Java 时,照着书上的例子,写一个最简单 main 方法,当程序运行并在屏幕上打印出 hello world 时,内心竟有种莫名的激动,相信很多人都有这种经历吧。 不管学什么编程语言,都先从命令行程序搞起。 首先,我们来写一个 Go 语言版的 hello world 程序:阅读全文
posted @ 2018-08-02 07:36 liuhe688 阅读(47) 评论(0) 编辑
摘要: 上次我们分析了无状态组件生成 DOM 的过程,无状态组件其实就是纯函数,它不维护内部的状态,只是根据外部输入,输出一份视图数据。而今天我们介绍的有状态组件,它有内部的状态,因此在组件的内部,可以自行对状态进行更改,进而渲染出新的视图。下面我们就来分析有状态组件生成真实 DOM 结点的过程。 我们先来阅读全文
posted @ 2018-07-26 13:40 liuhe688 阅读(21) 评论(0) 编辑
摘要: 在上一篇文章中,我们总结并模拟了 JSX 生成真实 DOM 结点的过程,今天接着来介绍一下无状态组件的生成过程。 先以下面一段简单的代码举例: js const Greeting = function ({name}) { return { }; }; const App = ; console.l阅读全文
posted @ 2018-07-21 23:18 liuhe688 阅读(7) 评论(0) 编辑
摘要: 在上一篇文章中,我们介绍了 Babel 是如何将 JSX 代码编译成可执行代码的,随后也实现了一个自己的解析器,模拟了 Babel 编译的过程。 现在我们再来回顾一下,假定有如下业务代码: js const style = { color: 'red', fontSize: '20px', }; c阅读全文
posted @ 2018-07-15 23:16 liuhe688 阅读(17) 评论(0) 编辑