Go:学习笔记整理

说明

下面是我在学习Go期间,整理的一部分数据(只记录了部分对我而言有用的),可以用作参考.不定期更新.

第一个Go程序

在Windows上安装Go,必须在系统环境变量中配置变量:GOPATH(值为Windows路径),Go只会编译执行GOPATH目录中的.go文件.

Go语言Logo

变量声明及类型

变量声明

在Go中变量声明,有如下方式:

1.
// 声明不赋值,使用默认值
var age int

2.
// 根据值判断类型
var vname = value

3.
// 省略var,左侧的变量不能已经被声明过.
vname:=value

多个变量

var age,info,name type
var age,info,name = a1,a2,a3
age,info,name := a1,a2,a3

var (
age type
name type
)

在同一个代码块中,age:=10只能存在一次(也就是不能在写一个age:=10);另外,在同一个代码块中如果定义了变量没有使用,编译会报错,给变量赋值也不行,变量必须要使用.

如果要交换两个变量的值,则可以直接:
a,b = b,a

常量

定义之后不会被修改的变量,定义方式:
const name = “job”
或者
const name string = “job”

类型

Go中有以下类型:

类型 描述
布尔 只有两个值,true或者false
数字 整型int和浮点型float.
字符串 一串字符表示,Go的字节使用UTF-8编码标识Unicode文本
派生 1.指针;2.数组;3.结构化类型(struct);4.联合体类;5.函数类型;6.切片类型 ;7.接口;8.Map类型;9.Channel类型

整数类型最大值与最小值(获取方式下面有调用示例)

类型 描述
uint8 最小值:0,最大值:调用math.MaxUint8
uint16 最小值:0,最大值:调用math.MaxUint16
uint32 最小值:0,最大值:调用math.MaxUint32
uint64 最小值:0,最大值:调用math.MaxUint64
int8 最小值:MinInt8,最大值:调用math.MaxInt8
int16 最小值:MinInt16,最大值:调用math.MaxInt16
int32 最小值:MinInt32,最大值:调用math.MaxInt32
int64 最小值:MinInt64,最大值:调用math.MaxInt64

调用示例

浮点类型:

类型 描述
float32 调用:math.MaxFloat32
float64 调用:math.MaxFloat32
complex64 调用:math.SmallestNonzeroFloat32
complex128 调用:math.SmallestNonzeroFloat64

Go时间格式化

Go是个奇葩!!!
我们一般的格式化是:yyyy-MM-dd HH:mm:ss,在Go中必须是这样:”2006-01-02 15:04:05″,嗯,你没看错,据说这个时间是Go诞生的时间.

那么使用格式化,例子来了:

WordPress:让站内资源使用相对路径

相对路径

好处:

  1. 引用站内资源,可以使加载速度更快一些;
  2. 更好的支持SSL(浏览器不会警告不安全信息);
  3. 别人复制数据直接粘贴,无法显示

Linux+Nginx+PHP+MySQL

插件和改代码

然后安装插件:Root Relative URLs
安装之后,然后修改该插件的sb_root_relative_urls.php文件中的函数为下面这个:

然后就可以了..
如果不修改第一个,只安装并启用了插件,会有资源访问不上.

搞定.

Go:解析JSON

开始

按照《Go语言编程》第五章的例子来的…(有很大改动,不然运行不了)
这本书是2012年左右出的,那时候Golang还没出1.0版本.
而现在Golang已经1.8版本了,改了不少东西才能正常的跑起来……
大概2017-03-11 0:30 开始写的…
这会3:15
……

搞完静态文件(就一个妹子UI的CSS),
已经3.40了…

还查了不少golang的文档,这下算是入坑了..

这是昨天改的一个梨子,也先贴一下吧.

Go相册网站程序

还有个问题,就是上传的图片名称会多一段数字,暂时没处理,但是不影响查看。
使用Go版本1.8

Go相册程序目录结构
uploads目录下面的文件是上传的,上传之后就可以看到了

列表页:list.html

上传页面:upload.html

还有一个文件是妹子UI的css,可以在网上直接保存一份(ctrl+s),只是保存到指定目录就可以.[参考地址]

Go语言Logo

解析JSON数据

JSON解析成Go结构体,可以使用这个工具,直接获取相关结构体

源码如下(优先从网络获取数据,若从网络获取、解析失败,则直接使用本地数据[网络获取的数据与本地数据一样]):

Linux:配置SSL遇到的问题

问题是这样的

环境:Centos,Flask,Let’s Encrypt.

使用下面的方式,来安装SSL,发现在Wordpress程序上没有任何问题,而在安装Flask程序时,则出现了问题。具体往下看。

在Flask程序上申请SSL证书,出现下面的提示:

Failed authorization procedure.
The following errors were reported by the server

众所周知,Flask的目录结构是:

Flask项目目录结构

在使用

命令之后,如果输入的是/flaskxxx这个目录,那么就会生成红色框内的目录(Let’s Encrypt会在网站根目录生成一个目录里面会放一个验证程序[类似于验证文件],随后程序会进行访问相关地址进行匹配),用过Flask的都知道,这个红色的目录肯定是不对的(Flask一般读取templates目录下面的文件)。

所以,在Flask上申请SSL的时候,就遇到了这个问题。

我们只能从侧面去解决这个问题。

Linux+Nginx+PHP+MySQL

解决方案

在你的Flask文件中加入下面的代码,然后再次执行

就可以实现验证,也就可以申请到SSL证书了。

2017.5.15更新:当文件不存在时,不显示详细路径(加入try/except处理).

修改Python文件之后,如果使用的是uwsgi+nginx架构,只需要重启uwsgi即可.

折腾一下午这个问题……

另外,下午将目前的几个站全都升级了SSL。只是遗憾的是,国内的淘宝联盟不支持SSL,代码只能显示空白了。(百度统计,CNZZ都支持SSL,而51LA目前还不支持SSL),还好GG支持SSL,直接就可以用了。

Python:清除文件内容

问题

在Linux或者Windows服务器下面(当然,个人电脑可能也存在此问题),有时候系统运行时间长了,会存在很多日志文件(或者其它缓存文件)。而这些文件,可能在不同的目录中。当然,这时,也可以直接删除相关日志文件和目录,那么这样会导致一个问题——程序可能会因为找不到日志目录而报错。因此,想到一个更简单的办法:

只清除指定目录下面的所有文件的内容(但还是要注意配置目录,数据无价),而不对目录、文件进行删改(只清除文件内容)操作。

python Logo

源码

**********数据无价,请谨慎操作*********
*********针对程序的使用,不承担任何责任***********

请注意以下几点:

  1. 程序需要配置需要清除的目录(请谨慎配置)、日志文件(默认当前目录)地址
  2. 程序基于Python3(我使用Python3.6)
  3. 程序提供日志功能,可自行修改相关代码配置格式.

源码如下:

Linux 定时任务参考:

5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,

以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]