go语言基础知识学习第四天

解决下载速度较慢问题

一个全球代理为 Go 模块而生的:https://goproxy.io/zh/
在这里插入图片描述
在终端中输入

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

在项目目录下新建go.mod文件
go mod init 名称

导入包操作
在这里插入图片描述

beego 框架

是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架

基于八大独立的模块构建的,是一个高度解耦的框架
在这里插入图片描述
典型的 MVC 架构,它的执行逻辑为
在这里插入图片描述

bee 工具

为了协助快速开发 beego 项目而创建的项目
通过 bee 可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署
go get github.com/beego/bee

新建一个 Web 项目
bee new myproject

监控 beego 的项目运行
bee run

在go.mod中安装bee工具问题
解决方法为 export GO111MODULE=off && go get -u github.com/beego/bee

简单的Beego项目

学习资料

https://www.flysnow.org/2017/01/05/install-golang.html

在线生成文档

godoc -http=:8000

Gin 框架安装

go get -u github.com/gin-gonic/gin

会出现报错问题

github.com/mattn/go-isatty/isatty_tcgets.go:6:8: cannot find package "golang.org/x/sys/unix" in any of:
        /home/solomon/sdk/go1.14.3/src/golang.org/x/sys/unix (from $GOROOT)
        /home/solomon/go/src/golang.org/x/sys/unix (from $GOPATH)
github.com/golang/protobuf/proto/buffer.go:11:2: cannot find package "google.golang.org/protobuf/encoding/prototext" in any of:
        /home/solomon/sdk/go1.14.3/src/google.golang.org/protobuf/encoding/prototext (from $GOROOT)
        /home/solomon/go/src/google.golang.org/protobuf/encoding/prototext (from $GOPATH)
github.com/golang/protobuf/proto/buffer.go:12:2: cannot find package 

解决方法
git clone https://github.com/gin-gonic/gin.git

  • /go/src/golang.org/x 目录下安装 git clone https://github.com/golang/sys.git
  • /go/src/google.golang.org/protobuf 目录下安装 git clone https://github.com/protocolbuffers/protobuf-go.git

go install github.com/gin-gonic/gin

运行简单的示例

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": "Hello World",
		})
	})
	r.Run()
}

Gin项目简单示例

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

type user struct {
	ID	int
	Name string
	Age  int
}

func main()  {
	//users := []User{{ID:123, Name:"Solomon"}, {ID:456, Name: "Django"}}
	r := gin.Default()
	// 自动重定向
	r.RedirectTrailingSlash = false
	v1Group := r.Group("/v1", func(c *gin.Context) {
		// 路由中间件
		fmt.Println("/v1的中间件")
	})
	{
		// * 匹配后面所有的
		v1Group.GET("/users/:id", func(c *gin.Context) {
			id := c.Param("id")
			c.String(200, "The user id is %s", id)
			//c.JSON(200, users)
		})
		v1Group.GET("/post", func(c *gin.Context) {
			// 获取查询参数 Query
			// 可以通过DefaultQuery方法指定一个默认值
			c.String(200, c.DefaultQuery("search", "hello world"))
		})
		v1Group.GET("/blog", func(c *gin.Context) {
			c.JSON(200, c.QueryArray("blog"))
		})
		v1Group.POST("/blog", func(c *gin.Context) {
			data := c.PostForm("data")
			c.String(200, data)
		})
		v1Group.GET("/json", func(c *gin.Context) {
			// 实现服务端对JSONP的支持非常简单
			c.JSONP(200, gin.H{
				"message": "Hello World",
			})
			//c.JSON(200, user{ID: 123, Name: "Solomon", Age: 16})
			// 传递JSON数组
			//allUsers := []user{{ID: 124, Name: "Solomon", Age: 16}, {ID: 125, Name: "Solomon", Age: 16}}
			//c.IndentedJSON(200, allUsers)
			// 对特殊的字符串不进行转义
			//c.PureJSON(200, gin.H{
			//	"message": "<b>Hello World!</b>",
			//})
		})
	}
	v2Group := r.Group("/v2")
	{
		// * 匹配后面所有的
		v2Group.GET("/users/:id", func(c *gin.Context) {
			id := c.Param("id")
			c.String(200, "The user id is %s", id)
			//c.JSON(200, users)
		})
		v2Group.GET("/post", func(c *gin.Context) {
			// 获取查询参数 Query
			// 可以通过DefaultQuery方法指定一个默认值
			c.String(200, c.DefaultQuery("search", "hello world"))
		})
		v2Group.GET("/blog", func(c *gin.Context) {
			c.JSON(200, c.QueryArray("blog"))
		})
		v2Group.POST("/blog", func(c *gin.Context) {
			data := c.PostForm("data")
			c.String(200, data)
		})
	}
	r.Run(":8080")
}

日志使用

func main() {
    // Disable Console Color, you don't need console color when writing the logs to file.
    gin.DisableConsoleColor()

    // Logging to a file.
    f, _ := os.Create("gin.log")
    gin.DefaultWriter = io.MultiWriter(f)

    // Use the following code if you need to write the logs to file and console at the same time.
    // gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

    router := gin.Default()
    router.GET("/ping", func(c *gin.Context) {
        c.String(200, "pong")
    })

    router.Run(":8080")
}
func main() {
	router := gin.New()

	// LoggerWithFormatter middleware will write the logs to gin.DefaultWriter
	// By default gin.DefaultWriter = os.Stdout
	router.Use(gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {

		// your custom format
		return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
				param.ClientIP,
				param.TimeStamp.Format(time.RFC1123),
				param.Method,
				param.Path,
				param.Request.Proto,
				param.StatusCode,
				param.Latency,
				param.Request.UserAgent(),
				param.ErrorMessage,
		)
	}))
	router.Use(gin.Recovery())

	router.GET("/ping", func(c *gin.Context) {
		c.String(200, "pong")
	})

	router.Run(":8080")
}

简单的项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值