go web编程学习记录
学习 https://segmentfault.com/a/1190000013297625的记录
简单demo
package main import "github.com/gin-gonic/gin"func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
配置文件模块: go-ini/ini
目录结构:
gin-blog/
├── conf
├── middleware
├── models
├── pkg
├── routers
└── runtime
- conf:用于存储配置文件
- middleware:应用中间件
- models:应用数据库模型
- pkg:第三方包
- routers 路由逻辑处理
- runtime 应用运行时数据
创建数据库及表
API错误码包
pkg/e/code.go
package e const (
SUCCESS = 200
ERROR = 500
INVALID_PARAMS = 400<span class="hljs-attr">ERROR_EXIST_TAG = 10001
<span class="hljs-attr">ERROR_NOT_EXIST_TAG = 10002
<span class="hljs-attr">ERROR_NOT_EXIST_ARTICLE = 10003 <span class="hljs-attr">ERROR_AUTH_CHECK_TOKEN_FAIL = 20001
<span class="hljs-attr">ERROR_AUTH_CHECK_TOKEN_TIMEOUT = 20002
<span class="hljs-attr">ERROR_AUTH_TOKEN = 20003
<span class="hljs-attr">ERROR_AUTH = 20004
)
pkg/e/msg.go
package e var MsgFlags = map[int]string {
SUCCESS : "ok",
ERROR : "fail",
INVALID_PARAMS : "请求参数错误",
ERROR_EXIST_TAG : "已存在该标签名称",
ERROR_NOT_EXIST_TAG : "该标签不存在",
ERROR_NOT_EXIST_ARTICLE : "该文章不存在",
ERROR_AUTH_CHECK_TOKEN_FAIL : "Token鉴权失败",
ERROR_AUTH_CHECK_TOKEN_TIMEOUT : "Token已超时",
ERROR_AUTH_TOKEN : "Token生成失败",
ERROR_AUTH : "Token错误",
} func GetMsg(code int) string {
msg, ok := MsgFlags[code]
if ok {
return msg
}<span class="hljs-keyword">return MsgFlags[ERROR]
}
model的处理
go get -u github.com/jinzhu/gorm
go get -u github.com/go-sql-driver/mysql
models/models.go
package models import (
"log"
"fmt" "github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql" "gin-blog/pkg/setting"
) var db *gorm.DB type Model struct {
ID int `gorm:"primary_key" json:"id"`
CreatedOn int `json:"created_on"`
ModifiedOn int `json:"modified_on"`
} func init() {
var (
err error
dbType, dbName, user, password, host, tablePrefix string
) sec, err := setting.Cfg.GetSection("database")
if err != nil {
log.Fatal(2, "Fail to get section 'database': %v", err)
} dbType = sec.Key("TYPE").String()
dbName = sec.Key("NAME").String()
user = sec.Key("USER").String()
password = sec.Key("PASSWORD").String()
host = sec.Key("HOST").String()
tablePrefix = sec.Key("TABLE_PREFIX").String() db, err = gorm.Open(dbType, fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local",
user,
password,
host,
dbName)) if err != nil {
log.Println(err)
} gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string {
return tablePrefix + defaultTableName;
} db.SingularTable(true)
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(100)
} func CloseDB() {
defer db.Close()
}
go web编程学习记录的更多相关文章
- python核心编程学习记录之Web编程
cgi未完待续
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- python核心编程学习记录之基础知识
虽然对python的基础知识有所了解,但是为了更深入的学习,要对python的各种经典书籍进行学习 第一章介绍python的优缺点,略过 第二章介绍python起步,第三章介绍python基础,仅记录 ...
- [ASP.NET MVC4高级编程] 学习记录(一)
理论: 先有GUI在发展,当用户按下某个键,某个进程会监听到这个动作,这个进程就是控制器.这就是MVC模式. 后来有了事件驱动编程,响应动作的是按钮本身,而不是控制器. 再后来webForm中,事件驱 ...
- <Linux多线程服务端编程>学习记录
使用智能指针解决多线程下 类的解析冲突问题 有这样一个场景 使用StockFactory记录Stock的信息 容器是map<string,smart_ptr>; 代码如下: #inclu ...
- 慕课网python进阶函数式编程学习记录
函数 不等于 函数式 函数: function 函数式: functional,一种编程范式 就好比计算机 不等于 计算 c语言: 函数 python :函数式(计算) 函数式编程特点: 把计算视为函 ...
- python核心编程学习记录之执行环境
- python核心编程学习记录之面向对象编程
未完待续525
- python核心编程学习记录之模块
- python核心编程学习记录之函数与函数式编程
@func function 意思是func(function) @func(a) function 意思是func(a)这是个函数对象,在去调用function函数 如果要传额外的值,只传值用*tu ...
随机推荐
- TP-Link路由器后台密码爆破
title: TP-Link路由器后台密码爆破 author: 杨晓东 permalink: TP-Link路由器后台密码爆破 date: 2021-10-02 11:27:04 categories ...
- 第五周作业-N67044-张铭扬
1. 搭建chrony服务完成多个主机的时间同步. [root@centos8 ~]# yum -y install chrony [root@centos8 ~]# vim /etc/chrony ...
- mysql查询最近2天数据
SELECT * FROM jk_dzbl_zybrbljlb where jlrq >= now()-interval 2 day
- N63050 第三周运维作业
五.文本处理工具和正则表达式1.基本正则表达式(53分钟)2.基本正则表达式和扩展正则表达式(50分钟)3.文本处理三剑客之grep(43分钟)4.shell脚本编程基础知识(14分钟)5.shell ...
- vue框架08 vue3
vue3的介绍 # vue项目的版本,新项目使用vue3,部分老项目使用vue2 # vue3的变化 1.性能的提升 - 打包大小减少41% - 初次渲染快55%,更新渲染块133% - 内存减少54 ...
- python 多进程和异步io的有机结合 Error in atexit._run_exitfuncs
众所周知,python的多线程开发在GIL(全局器解释锁)下饱受诟病,在单核模式下搞多线程对效率的提升相当有限.于是大家的共识就是搞io密集的程序,建议采用多线程,计算密集型的程序就搞多进程.近期的一 ...
- js判断图片链接是否有效
let checkImgExists = function(url) { return new Promise(function(resolve, reject) { let ImgObj = new ...
- python菜鸟学习: 14. GUI界面化使用
# 获取输入框中的内容 def getVars(): global outterDomain1, innertDomian1, guestEid1, appName1, unicodeName1, r ...
- 20203412马畅若 实验三 《Python程序设计》Socket编程技术实验报告
实验三 Socket编程技术 课程:<Python程序设计>班级: 2034姓名: 马畅若学号:20203412实验教师:王志强实验日期:2020年5月30日必修/选修: 公选课 ##1. ...
- AWT+Swing区别
AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口.AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关 ...