自增和自减
golang里包含其他语言常用的自增i++ 和自减i--,但是在golang里他们是语句而不是表达式,所以j=i++这种是错误的写法,而且golang也不支持++和--放在变量前面如++i的形式。
i++ // i的值+1
i-- // i的值-1
++i //错误
--i // 错误
j = i-- //错误
短变量声明只能在函数内部不能再外部
s := "" //错误
func main() {
s := ""
prinltln(s)
}
new只是一个预定义的函数,它并不是一个关键字
func delta(old, new int) int { return
三个工具介绍
go fmt是用来规范go文件格式,比如格式化单个文件 go fmt xxx.go
goimports 用来检查导入包,导入依赖包,删除不依赖的包
gometalinter 集成go语言几乎所有检测工具,静态分析代码,包含功能如下
go vet -工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前return的逻辑,struct的tag是否符合标准等。
go tool vet --shadow -用来检查作用域里面设置的局部变量名和全局变量名设置一样导致全局变量设置无效的问题
gotype -类型检测用来检测传递过来的变量和预期变量类型一致
gotype -x
入门docker书籍推荐:docker-从入门到实践
查看image、container、volume占用的空间大小
docker system df
image
image本地导入
docker import - [name] < /path/to/image/file
例如导入/tmp/test.export.tar并命名image名为demo
docker import - demo < /tmp/test.export.tar
image重命名
docker tag oldname:oldversion newname:newversion
docker image rm
目的
不关闭现在的链接
启用新的代码并处理新的请求
中间不能出现拒绝服务
流程
替换可执行程序
发送 SIGUSR2 信号
停止老进程继续接受新请求,并在处理完已有请求后停止
启动新的进程并接受新请求
实现
我根据上面要求写了一个简单的库gracefulServer,可以参考下
比如以gin为例使用该库实现优雅重启,代码如下:
package main
import (
"github.com/gin-gonic/gin"
"time"
"net/http"
"github.com/yushuailiu/gracefulServer"
)
func
package main
import (
"sync"
"fmt"
"time"
)
func main() {
var wg sync.WaitGroup
ch := make(chan int)
goroutineNum := 2
for i := 0; i < goroutineNum; i ++ {
wg.Add(1)
go doSomeThing(i, ch, &wg)
}
for j := 0; j < goroutineNum; j ++
Centos docker-ce安装
一般安装步骤
安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
修改软件源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 切回官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/
shadowsocks 使用的 sockets5 代理,而一般只有浏览器支持,所以使用 shadowsocks 可以实现科学上网,但是其他的应用却仍无法科学上网,所以要想实现全局科学上网需要 Proxifier 支持。
Proxifier介绍
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持 64位系统,支持Xp,Vista,Win7,MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好。有点类
awesome-go
这里记录下我是用到或则感觉比较好的 golang 库
mine projects
ssh-auto——管理ssh登陆信息
easygin——基于gin的web开发库
gracefulServer——web server优雅重启的库
gorename——一行命令重命名包名
Web Framewoks
gin——性能极好的web server frameworks
Console
fatih/color——命令行输出颜色库
Database
gorm——一个蜂场友好的ORM库,支持MySQL PostgreSQL splite3 SQL server等
go-
未备案的域名是如何被限制的
国内域名解析限制的方式是由服务器运营商限制的,比如阿里,运营商会检查到服务器的流量的 HTTP 请求的域名信息,对未备案的域名添加限制,比如阿里会限制自己的提示备案的页面。
如何绕过运营商
既然运营商是根据 HTTP 请求里的域名做的限制,那么我如果没有域名呢?我们直接用 IP 访问显然是可以的,那么 HTTPS 呢?HTTPS 也是可以的,HTTPS 会对数据包做加密处理,运营商无法拿到请求的域名自然无法限制了。
BUT
虽然我们使用 HTTPS 绕过服务器运营商,但是有些平台或做自己的校验,比如 微信,你使用 HTTPS 搭建的站点在微信公众号、小程序中需要调用
事情起因
有个同事需要一个管理系统,需要管理一些图片什么的,我就想着让他用我写的这套系统,然后就想着把代码和库复制一份出来给他用就可以了,然后我顺便可以把一些需要写到配置里的东西提炼下,让这套系统成为一个可复制部署的 CMS 系统。
实操删库过程
第一步
很熟练的把代码复制一份,nginx 配置复制并修改一份。
第二步:删库
登陆数据库
新建库、切到新建库
删库:因为我部署这个博客系统的时候有把初始化数据库的 sql 文件放到服务器上,我看了下还在。然后直接source init.sql。
3步完成之后,有种莫名的感觉涌上心头,然后打开我的博客,发现里面数据已经空了。。其实我这里使用了Ph