golang学习记录

本文介绍了Go语言环境的安装步骤,包括下载压缩包、解压、添加环境变量等,还介绍了Go语言常用的三个包。Viper是完整配置解决方案,gorm是对象关系映射框架,Gin是Web框架,具备中间件支持、JSON验证等功能。

一、安装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~~~

GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.youkuaiyun.com/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.youkuaiyun.com/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值