学习 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编程学习记录的更多相关文章

  1. python核心编程学习记录之Web编程

    cgi未完待续

  2. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  3. python核心编程学习记录之基础知识

    虽然对python的基础知识有所了解,但是为了更深入的学习,要对python的各种经典书籍进行学习 第一章介绍python的优缺点,略过 第二章介绍python起步,第三章介绍python基础,仅记录 ...

  4. [ASP.NET MVC4高级编程] 学习记录(一)

    理论: 先有GUI在发展,当用户按下某个键,某个进程会监听到这个动作,这个进程就是控制器.这就是MVC模式. 后来有了事件驱动编程,响应动作的是按钮本身,而不是控制器. 再后来webForm中,事件驱 ...

  5. <Linux多线程服务端编程>学习记录

    使用智能指针解决多线程下 类的解析冲突问题 有这样一个场景 使用StockFactory记录Stock的信息  容器是map<string,smart_ptr>; 代码如下: #inclu ...

  6. 慕课网python进阶函数式编程学习记录

    函数 不等于 函数式 函数: function 函数式: functional,一种编程范式 就好比计算机 不等于 计算 c语言: 函数 python :函数式(计算) 函数式编程特点: 把计算视为函 ...

  7. python核心编程学习记录之执行环境

  8. python核心编程学习记录之面向对象编程

    未完待续525

  9. python核心编程学习记录之模块

  10. python核心编程学习记录之函数与函数式编程

    @func function 意思是func(function) @func(a) function 意思是func(a)这是个函数对象,在去调用function函数 如果要传额外的值,只传值用*tu ...

随机推荐

  1. Django views.py 增,删,改

    from django import forms from django.shortcuts import render, redirect from app01 import models # Cr ...

  2. spring boot创建多线程定时任务

    @Component@EnableScheduling // 1.开启定时任务@EnableAsync // 2.开启多线程public class MultithreadScheduleTask { ...

  3. nuxt 服务端渲染注意事项

    1.路由 nuxt按照 pages 文件夹的目录结构自动生成路由 http://localhost:3000/user/reg 相当于 去访问 pages文件夹 下的 user文件夹 下的 reg.v ...

  4. textfsm

    from concurrent.futures import ThreadPoolExecutor import netmiko import os from threading import Loc ...

  5. 一个比较全的C++农历算法(转)

    这以前本是一个MFC代码,我在这个基础上修改成了标准C++的.. 即可以在VC里用,也可以在C++Builder里用..所以一并放到这里来, 希望有人喜欢..喜欢的就给点鼓励啊~~ 示例代码: 代码: ...

  6. win10家庭版升级为专业版

    1.选择此电脑点击属性 2.点击更改产品密匙 3.输入产品密匙 4N7JM-CV98F-WY9XX-9D8CF-369TT下一步等待升级重启即可.

  7. UE4大地图(流关卡、无缝地图)

    原作者:xiaosongfang 对于UE4来说我只是个菜鸟,研究一下网上的教程稍微尝试的做一下demo,所以可能下面会有描述不准确或者说没解释清的地方请多谅解哈.也非常欢迎指出我说的不对的地方一起学 ...

  8. JavaScript 时间的操作

    1. 标准日期格式 转 时间戳 第一步,设置一个标准日期,获取这个日期格式的时间戳 let timeStr = "2020-08-10 12:34:45"; let newTime ...

  9. 第二周集训队比赛wp

    Web1 直接截包改get为Host: Web2: 不一样的猪圈 普通的猪圈变种 NormalPwn 用IDA查看发现main下面有一个危险函数点进去发现/bin/sh 进main空格发现找cmman ...

  10. (已解决)富文本编辑器:使用layui的layedit怎么回显存放在数据库里的富文本数据(包含有图片base64码)?

    1. 背景 我把富文本内容从后台导入到前端,回显在layui的layedit里面. 2. 步骤 直接在<textarea></textarea>中间进行赋值(我用的是模板赋值) ...