创建WEB项目(iris)
仓库地址:https://github.com/kataras/iris/
文档:http://www.topgoer.com/Iris/
创建
1 | mkdir ZDevOpsGo |
创建main.go
输入如下内容
1 | package main |
运行
1 | go run main.go |
或者编译后运行exe文件
1 | go build |
这样就可以访问
使用模板
1 | package main |
模板文件
views/index.html
1 | <html> |
运行就可以访问
使用配置文件
项目根目录创建iris.yml
1 | FireMethodNotAllowed: true |
加载配置文件
1 | // Start the server using a network address. |
项目下的静态文件
假如我们想要处理 http://localhost:8080/static/**/*
的请求都访问项目目录下的 ./static
文件夹,那么按照如下配置就可以了
1 | app := iris.New() |
app.HandleDir("/static", "./static")
的第一个参数为请求的URL,第二个参数为本地文件夹
一般前后端不分离我们可以这样配置,让项目可以访问前端的样式、JS、静态页面、图片等等静态的资源。
JSON文件解析
1 | package utils |
对应的JSON文件
config/config.json
1 | { |
注意
JSON库在转换的时候会首字母大写,但是
project_name
这样的会解析为Project_name
, 而不是ProjectName
Marshal():Go数据对象 -> json数据
UnMarshal():Json数据 -> Go数据对象
1 | func Marshal(v interface{}) ([]byte, error) |
构建json数据
Marshal()和MarshalIndent()函数可以将数据封装成json数据。
struct、slice、array、map都可以转换成json
struct转换成json的时候,只有字段首字母大写的才会被转换
map转换的时候,key必须为string
封装的时候,如果是指针,会追踪指针指向的对象进行封装
Marshal函数将会递归遍历整个对象,依次按成员类型对这个对象进行编码,类型转换规则如下:
Golang 数据类型 | JSON 数据类型 |
---|---|
bool | Boolean |
int float | Number |
string | String |
struct | JSON Object 再根据成员递归打包 |
数组或切片 | JSON Array |
[]byte | base64编码后的JSON String |
map | JSON Object, key必须是string |
interface{} | 按照内部实际进行转换 |
nil | null |
channel, func | UnsupportedTypeError |
注意
JSON转换不支持list
Sqlite
安装GCC环境
在Sourceforge官网,下载MinGW-W64 GCC-8.1
解压后把类似于D:\Tools\mingw64\bin
添加到系统环境变量Path
里
添加后重启开发软件,后输入
1 | go get github.com/mattn/go-sqlite3 |
示例
1 | package main |
注意
panic 会触发程序崩溃,正式上线不要用
Mysql
下载依赖
1 | go get github.com/go-sql-driver/mysql |
示例
1 | package main |
注意
defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。
连接池的实现关键在于SetMaxOpenConns和SetMaxIdleConns,其中:
SetMaxOpenConns用于设置最大打开的连接数,默认值为0表示不限制。
SetMaxIdleConns用于设置闲置的连接数。
设置最大的连接数,可以避免并发太高导致连接mysql出现too many connections的错误。设置闲置的连接数则当开启的一个连接使用完成后可以放在池里等候下一次使用。
解析Nginx配置
1 | package utils |
nginx配置
1 | # 这是upstream |
解析后的数据
1 | [ |
这样Nginx配置文件就能完全解析了