一、安装go语言环境
安装包下载地址:https://golang.google.cn/dl/
1、下载压缩包(建议版本>=1.13):go1.17.6.linux-amd64.tar.gz
2、将下载的压缩包解压至 /usr/local目录
tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz
3、将 /usr/local/go/bin 目录添加至 PATH 环境变量
临时修改:
export PATH=$PATH:/usr/local/go/bin
永久修改:编辑 ~/.bashrc 或者 /etc/profile,将以下命令添加该文件的末尾
gedit ~/.bashrc
export PATH=$PATH:/usr/local/go/bin
source ~/.bashrc
4、查看安装是否成功
go version #查看go版本
go env #查看go环境变量
二、import包
1、viper
Viper是适用于Go应用程序(包括Twelve-Factor App
)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:
- 设置默认值
- 从
JSON
、TOML
、YAML
、HCL
、envfile
和Java properties
格式的配置文件读取配置信息 - 实时监控和重新读取配置文件(可选)
- 从环境变量中读取
- 从远程配置系统(etcd或Consul)读取并监控配置变化
- 从命令行参数读取配置
- 从buffer读取配置
- 显式配置值
package inite
import(
"fmt"
"github.com/spf13/viper"
"github.com/fsnotify/fsnotify" //viper使用该包实现监听文件的功能
)
func InitConfig() *viper.Viper {
v := viper.New() //实例化viper对象
v.SetConfigFile("./config.json") // 指定配置文件路径
viper.SetConfigType("json") // 如果配置文件名称中没有扩展名,则需要配置此项
viper.WatchConfig() //实时读取配置文件
viper.OnConfigChange(func(in fsnotify.Event) { //配置文件产生变更之后会调用的回调函数
err := v.Unmarshal(&config) //config为一个结构体变量
fmt.Println("Config file changed:", in.Name)
})
err := viper.ReadInConfig() // 查找并读取配置文件
err := v.Unmarshal(&config)
return v
}
2、gorm
对象关系映射(Object Relational Mapping,简称ORM
)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。ORM
框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM
框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。
package database
import (
"fmt"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type User struct {
Id int64 `gorm:"id;primarykey""`
Name string `gorm:"name"`
password string `gorm:"password"`
}
func MyDB(){
// 建立数据库连接
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
fmt.Println("failed to connect database")
}
var user_in = User{
Name: "hhh",
password: "xxxxxx",
}
var user_out User
db.Model(&User{}).Create(&user_in)
err := db.Model(&User{}).where("Name=?", user_in.Name).First(&user_out).Error
if err != nil {
fmt.Println("failed to find user, Named:%s\n",user_in.Name)
}
db.Model(&User{}).Where("Id=?", user_out.Id).Update("password","hhhhhh")
db.Model(&User{}).Omit("password").find(&user_out)
}
3、gin
Gin 是一个基于 Go 语言编写的 Web 框架,封装比较优雅,API友好,源码注释比较明确,自身的net/http足够简单,性能也非常不错。
部分功能特性:
-
中间件支持
传入的 HTTP 请求可以由中间件链和最终操作处理。
-
JSON 验证
Gin 可以解析和验证请求的 JSON,例如检查有个必须值是否存在。
-
路由分组
支持通过路由分组来更好地组织路由,例如是否需要授权、设置 API 的版本等。
-
内置渲染
Gin 框架提供了简单易上手的 API, 来返回 JSON、XML 或者 HTML 格式的响应。
package main
import (
"github.com/gin-gonic/gin"
"github.com/gin-contrib/static"
"net/http"
)
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
origin := c.Request.Header.Get("Origin")
if origin != "" {
origin := c.Request.Header.Get("Origin")
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE")
c.Header("Access-Control-Allow-Headers", "Authorization, X_Requested_With,Accept, Origin,Content-Type")
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type")
c.Header("Access-Control-Max-Age", "86400") //缓存请求时间,单位s
c.Header("Access-Control-Allow-Credentials", "true")//跨域请求是否带cookie
c.Set("content-type", "application/json") //设置返回格式是json
}
if method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
}
c.Next()
}
}
type LoginS struct {
Account string `json:"account"`
Password string `json:password`
}
func LoginInfo(c *gin.Context){
var login_info LoginS = {
Account : "xxx",
Password: "hetui",
}
c.JSON(http.StatusOK, gin.H{
"status": 200,
"data": login_info,
})
}
func main() {
r := gin.Default() // 初始化gin对象
r.Use(Cors()) //全局中间件注册
//static.Serve()会返回一个中间件处理程序,该处理程序在给定目录中提供静态文件
r.Use(static.Serve("/", static.LocalFile("/home/root/app/www",false)))
r.GET("/hello", func(c *gin.Context) { // 设置一个get请求,其URL为/hello,并实现简单的响应
c.HTML(http.StatusOK, "index.html", "welcome!")
})
api := r.Group("/api/v1") //路由分组
r.Get("/login/info", LoginInfo)
r.Run(":8080") // 启动服务
}
学习持续进行ing~~~