Gin学习笔记|0

Gin是什么

概述

Gin是一个由Go语言编写的开源框架,自称是目前速度最快,性能最好的HTTP web框架,引用官方介绍:

Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance – up to 40 times faster. If you need smashing performance, get yourself some Gin.

Gin已经在Github上开源,同时也开源了众多的中间件可供使用:

项目地址

特性

引用自Gin的官方文档

  • 快速(Fast)
    基于Radix树的路由,内存占用极少。没有反射,可预测的API性能
  • 中间件支持
    传入的HTTP请求可以由一系列的中间件来处理,例如:Logger,Authorization,GZIP,最终操作数据库
    • 异常处理
      服务会保持始终可用。Gin可以捕获panic,并尝试进行恢复。而且有极为便利的机制处理HTTP请求过程中发生的错误。
  • JSON验证
    Gin可以解析并验证请求的JSON
  • 路由组
    更好地组织路由,例如是否需要授权、不同的API版本,可以无限制地嵌套且不会影响性能
  • 内置渲染
    Gin为JSON、XML和HTML的渲染提供了易用的内置API
  • 可扩展性
    可以很方便地编写新的中间件

Gin的安装

Go的安装

在Linux系统下可以直接使用包管理进行安装,不过需要注意Go的版本,一部分Linux发行版并没有包含最新版本的Go,这种情况下可以选择自行下载二进制文件或直接从源码安装,在Go的官网有具体方法,这里便不再赘述。

Debian/Ubuntu:

1
$ sudo apt install golang

RHEL/CentOS:

1
$ sudo yum install golang

使用

1
$ go version

来检查是否安装成功,输出应该是如下形式:

1
go version go1.13.8 linux/amd64

开源论坛Flarum的安装与使用

Flarum 简介

提到开源论坛程序,我们最先都会想到discuz和phpwind这种巨头,但是长时间的发展也令他们的程序越发发庞大和臃肿,对于开发者来说如果只想要单纯的论坛功能无疑是拿高射炮打蚊子,不仅大材小用,同时在维护上也更加耗费精力。

在这种情况下选择一个轻量的论坛程序不失为一个明智的选择,Flarum就是这样一个优雅的轻量论坛软件,它拥有一个现代的、简洁优雅的界面,同时可以通过插件来实现各种强大的功能。

阅读更多

Go语言并发编程基础

多线程(1)

Go线程基本用法

使用go关键字便可以创建一个新的Go线程(goroutine),goruntine是由Go运行时进行管理的轻量级线程,执行

1
go f( x , y , z )

会启动一个新的Go线程并执行

1
f( x , y , z )

其中f,x,y和z的求值发生在当前的线程中,而f的执行发生在新的线程中

阅读更多

Go语言方法和接口基础

概述

几种当前较流行的编程语言在对面向对象编程的设计上都大同小异,Go也不例外,如果理解了面向对象的理念学习起来还是很简单的。

方法

概述

Go语言中没有其他常见的语言中的的概念,它通过其他方法来实现面向对象这一设计。

定义

方法是一类带特殊接收者参数的函数,这个参数写在func关键字和方法名之间。

我们可以为一个结构体类型定义方法:

示例1:method.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
"math"
)

type Vertex struct {
X, Y float64
}

func (v Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

func main() {
v := Vertex{3, 4}
fmt.Println(v.Abs())
}

示例中Abs()方法拥有一个Vertex类型的接收者v,或者也可以说Vertex类型的结构体v拥有一个Abs()方法(函数)。

阅读更多

Go派生类型基础

结构体

概述

结构体struct是一个由相同或者不同类型的数据所构成的集合。

集合中的的元素被称为结构体的成员member,不过在Go中经常被称为字段field实际上是同一个概念。

定义

结构体使用如下语法来声明

1
2
3
4
5
6
type struct_variable_type struct {
member def
member def
...
member def
}

结构体是一种自定义数据结构,type语句声明了这个结构体的类型,这个类型是由用户自定义的,同时在结构体的内部我们需要声明这个结构体所拥有的成员的名称和相应的类型

阅读更多

Go指针基础

概述

指针是一个变量,它的值是另一个变量的地址,通过指针我们可以直接地访问特定地址的内存单元。通过指针我们可以访问并操作内存单元,运用这个特性可以允许我们写出非常高效的程序。

定义

指针变量使用*T表示该指针是指向T类型值的指针,例如:

1
2
3
var p *int
// 指针变量p是一个指向int类型变量的指针
// 指针的零值为nil

与C不同,Go并不支持指针运算

阅读更多

Go语言的控制语句基础

概述

控制语句很好理解,即循环、条件等控制代码执行流程的语句,这些语句在Go中的形式与其他语言的差别也很小

循环语句

Go只有for循环一种循环语句

一个基本的for语句由三部分组成,每部分用分号隔开

  1. 初始化:在第一次迭代前执行
  2. 条件表达式: 在每次迭代前进行判断,一旦布尔值为false,循环就会终止
  3. 后置语句:在每次迭代的结尾执行

初始化语句通常为一个短变量声明,该声明仅在for语句的作用域中可见

阅读更多

Go语言入门

最近开始搭建个人网站,在后端技术栈的选择上犹豫了很久。综合了网络上的各种评价最终选择了golang。作为一个新近开源的语言,go语言较为简单,符合我的需求同时具有完善的框架。

概述

Go语言被设计成一门应用于搭载在Web服务器,存储集群,或其他类似用途的服务器系统编程语言。Go相对于其他大多数语言有着更高的开发效率。

Go语言于2009年开源,未来前景相当不错。

官方网站

官方中文文档

阅读更多

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment