golang学习记录

一、安装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)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:

  • 设置默认值
  • JSONTOMLYAMLHCLenvfileJava 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~~~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值