Go 1.13 errors 包优雅的处理异常判断

Go 1.13 发布后对 errors 包有进一步的改善,其中errors.Is可以很方便的进行异常的判断。

使用 Goribot 快速构建 Golang 爬虫

zhshch2002/goribot: [Crawler/Scraper for Golang]Make a Golang spider in 3 lines是我的一个业余项目,目的是能尽可能简洁的使用Golang开发爬虫应用。

用 GitHub Actions 自动化发布Hexo网站到 GitHub Pages

说实话不用每次都执行一大长串部署指令真的香啊!

使用GitHub Actions自动构建镜像并推送到阿里云容器镜像服务

这两天有个使用Docker部署的项目,寻思着用Actions自动化构建一下试试。过程简单,十分方便。

GitHub Actions 魔法入门

这篇文章已经过时原因是GitHub修改了Actions的配置方式,新的文章->使用GitHub Actions自动构建镜像并推送到阿里云容器镜像服务

GitHub Actions是一种生命周期钩子出发的任务流。大致可以描述为,当什时候(如push时)就做啥啥啥(比如自动部署、测试)。怎么和IFTTT有点像?(逃

Golang生成随机数

在GoLang 中,我们可以通过 math/rand 包里的方法来生成一个伪随机数:

1
2
3
4
5
6
7
8
9
10
package main

import (
"fmt"
"math/rand"
)

func main() {
fmt.Println(rand.Int()) // => 134020434
}

但如果你在本地,运行和我一样的代码,无论运行多少次,输出都是一样的

Golang爬虫全家桶—Goquery选择器

goquery类似jquery,它是jquery的go版本实现。使用它,可以很方便的对HTML进行处理。

Golang爬虫全家桶—Goquery开箱指南

Goquery是一个Html解析库。其部分操作很接近JQuery的选择器。基本上会用jquery的,Goquery基本可以1分钟上手。

安装

1
go get github.com/PuerkitoBio/goquery

然后引入

1
import "github.com/PuerkitoBio/goquery"

从Golang中的panic、defer和recover到错误处理的理解方式

Golang中的异常,不是用try-catch来处理的。很多Go的函数会返回多个参数,一般最后一个参数为error类型。

在Golang的设计哲学里:

  • 异常应该用对应的逻辑去处理,无法处理使程序无法继续的情况返回error。
  • error不是异常,是需要被记录到log中的使程序无法运行的情况
  • error位置的返回值为nil即认为没有错误。
  • panic会打断程序,输出错误日志,recover会取消panic的打断继续运行。

go get没反应?启用goproxy.cn代理

由于一些众所周知的原因,go get并不能顺利的访问golang.org/x相关的内容。所以执行go get时会长时间没有反应。

对此可以使用GOPROXY这个环境变量设置一个golang.org/x的模块代理。(关于模块代理

pyenv与virtualenv安装,Python版本管理使用教程

pyenv是Python版本管理工具。 pyenv可以

  • 安装多个版本的 Python
  • 改变全局的 Python 版本
  • 设置目录级别的 Python 版本
  • 创建和管理 virtual python environments

所有的设置都是用户级别的操作,不需要sudo命令。

pyenv的美好之处在于,它并没有使用将不同的PATH植入不同的shell这种高耦合的工作方式,而是简单地在PATH的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有对Python可执行文件的查找都会首先被这个垫片路径(shims)路径截获,从而使后方的系统路径失效。

HTTP协议是如何工作的?原理是什么?

视频地址:https://www.bilibili.com/video/av44861167

HTTP简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。

2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。

当前常见的而且是使用最多的还是HTTP/1.1,遂本文以讲解HTTP/1.1为主。

为Centos 7分配SWAP(交换分区)

经过Mariadb数次异常停摆后,查出来内存溢出错误。为啥以前就没有出过这个问题。free指令一看,我怎么没有swap分区!整理了一下Linux下分配交换分区的指令,以备后用。

当前环境为Centos 7,root用户

CentOS7编译安装Python3.7

安装依赖环境:

1
yum install -y openssl-devel openssl-static zlib-devel lzma tk-devel xz-devel bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel gcc libffi-devel

下载Python3.7.0

1
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

将解压后文件夹迁移至/usr/local

1
mv Python-3.7.0 /usr/local

进入Python目录

1
cd /usr/local/Python-3.7.0/

Linux下创建自定义服务(systemctl)

以下用一个python脚本为例,创建一个系统服务。python运行指令:

1
/usr/bin/python /home/snail/autorun.py

创建服务描述文件

1
sudo vim /lib/systemd/system/autorun.service

写入如下内容:

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Test Service
After=multi-user.target
 
[Service]
Type=idle
ExecStart=/usr/bin/python /home/snail/autorun.py
 
[Install]
WantedBy=multi-user.target

上面定义了一个叫 Test Service 的服务。它在multi-user环境起来之后运行;ExecStart参数指定我们要运行的程序;idle确保脚本在其他东西加载完成之后运行,它的默认值是simple。

注意使用绝对路径。为了获得脚本的输出信息,我们可以重定向到文件,更改ExecStart。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×