简介

1、介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范 2、安装 要安装Gin软件包,您需要安装Go并首先设置Go工作区。 1.首先需要安装Go(需要1.10+版本),然后可以使用下面的Go命令安装Gin。 go get -u...阅读全文

简书 2020-06-10 10:32:57 hw_owen

Golang——包

包package是源码(.go文件)的集合。 package 包名 注意: 一个文件夹下面只能有一个包,同样一个包的文件不能改在多个文件夹下。 包名和文件夹名可以不一样,包名不能包括-符号。 包名为main的包为应用程序的入口包,编译时不包含main包的源代码时不会得到可执行文件。 如果想在一个包中引用另一个包里的标识符(如变量、常量、类型、函数等),该标识符必须是对外可见的(public)。在Go语言中只需要将标识符的首字母大写就可以让标识符对外可见。 包的导入 import "包的路径" 注...阅读全文

简书 2020-06-10 10:32:57 Cici冬雪

Golang:数组与切片的复制

在Golang中,数组是值类型而切片是引用类型。因此值的复制与切片的复制并不相同。 数组的复制 对于值类型的数组来说,变量指向的并不是第一个元素的指针,而是整个数组。以下情况会发生数组的复制: 将数组变量赋值给另一个数组变量 将数组变量作为参数传递给方法 举个栗子: package main import "fmt" func main() { sample1 := [2]string{"a", "b"} fmt.Printf("Sample1 Before: %v\n", sample1) s...阅读全文

简书 2020-06-10 10:32:51 李小西033

Go并发之atomic

原文链接: https://mp.weixin.qq.com/s/RvFWCMX8P3VxjJrZRJZzMQ1. atomic介绍:         sync/atomic包提供了原子操作的能力,直接有底层CPU硬件支持,因而一般要比基于操作系统API的锁方式效率高些;这些功能需要非常小心才能正确使用。 除特殊的底层应用程序外,同步更适合使用channel或sync包的功能。 通过消息共享内存; 不要通过共享内存进行通信。英文介绍如下:(Package atomic provides low-...阅读全文

Go语言中文网 2020-06-10 09:12:16 ZhDavis

Go之定时器的使用

一、背景介绍笔者最近在使用Go的定时器,发现Go提供的time包里面,按照下面几种场景做了区分,并分别提供一些API支持。主要场景如下所示:1.超时一次之后,就不再使用的定时器,time.After()。2.每隔一段时间,就需要使用一次的定时器,time.Tick()。3.阻塞住goroutinue的定时器,time.Sleep(),准确来说这个不算一个定时器4.可以自由控制定时器启动和关闭的定时器,time.Ticker()。二、实例演练1. time.After()调用time.After(...阅读全文

Go语言中文网 2020-06-10 09:06:28 ZhDavis

32. 理解 Go 语言中的 Context

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 什么是 Context? 在 Go 1.7 版本之前,context 还是非...阅读全文

Segmentfault 2020-06-12 08:32:34 Python编程时光

Golang Recover提高程序的健壮性

在GO语言中goroutine的开启是很方便的只需要一个关键词go func() 就可以开启一个协程。但是在协程中我们可能会遇到一些致命的错误,如果这个时候我们没有对这个错误进行处理,那么整个程序就会崩溃。而在Go中为解决这个问题提供了一个recover函数来处理。 不使用recover 先来看一个不使用recover的示例 var wait sync.WaitGroup func main() { wait.Add(2) go Worker(0) go Worker(1) wait.Wait(...阅读全文

Segmentfault 2020-06-11 21:32:34 旧梦发癫

gin定义统一处理错误

gin定义统一处理错误 在gin中如果有错误需要响应给客户端,如果每一个都判断,并且处理返回,如果项目复杂了,需要写很多重复的代码来响应错误,今天我们来封装一个统一处理错误包装器,使用的是装饰器模式。 1.定义统一处理错误 pkg/e/error.go package e import "github.com/gin-gonic/gin" //自定义api错误结构体 type ApiError struct { Status int `json:"-"` Code int `json:"code...阅读全文

Segmentfault 2020-06-11 16:32:34 潇尘渊

golang 爬虫数据采集 & beego框架

项目地址 https://github.com/webtao520/golang_reptile 开发电脑系统:mac 开发语言版本:go1.14.3 涉及框架版本:Beego 开发软件版本:vscode 数据库版本:MySQL 5.7.53 Redis版本: Redis 2.6.12 需要安装 go get github.com/astaxie/beego go get github.com/beego/bee 运行 bee run 即可运行项目 打开浏览器访问http://127.0.0.1...阅读全文

Segmentfault 2020-06-11 09:32:35 小兵

数组指针&指针数组

package main import "fmt" func main() { /* 数组指针: 首先是一个指针,一个数组的地址 存储的是数组的地址 *[4]int 指针数组: 首先是一个数组,存储的数据类型是指针 [4]*type *[5]float64 指针,一个存储了5个浮点型数据的数组的指针 *[3]string 指针,一个存储了3个字符串 [3]*string 数组,存储了3个字符串的指针地址 [5]*float64 数组,存储了5个浮点型的数组地址 *[5]*float64 指针,一...阅读全文

Segmentfault 2020-06-11 09:32:35 小兵

golang Context内部关系梳理

对于golang的内置包Context,做了个思维导图,方便学习 结构体/接口关系 从图中可以很容易看出:1.Context主要包含了三个接口Context接口canceler接口stringer接口两个内部接口,一个外部接口 2.主要实现了三种结构体,其实就对应context的三种功能1)同步取消功能对应结构体cancelCtx,其重写了Context接口的三个方法: Value Done Err 并实现了接口canceler,对应方法cancel和Done也实现了接口stringer,对应方...阅读全文

Segmentfault 2020-06-11 09:32:34 laughbug

31. 说说 Go 语言中的空接口

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 1. 什么是空接口? 空接口是特殊形式的接口类型,普通的接口都有方法,而空接口没有定义任何方法...阅读全文

掘金 2020年06月09日 王一白

硬核!《DNS 速成指南》一文搞懂 DNS ,网络排查不再难

1. DNS 是什么? DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。 举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69。 2. 域名的层级 由于后面我会讲到 DNS 的解析过程,因此需要你对域名的层级有一些了解 根域名 :.root 或者 . ,通常是省略的 顶级域名,如 .com,.cn 等 次级域名,如 baidu.co...阅读全文

分布式监控系统WGCLOUD,server如何做水平扩容啊

首先,wgcloud从v3.0开始支持server集群模式,master-slave。 下载:http://www.wgstart.com 500个监控主机以下,不用做server集群和负载均衡,server是springboot架构,天然支持高并发。 注意server的配置,config/application.yml #自定义配置参数 base: #登陆账号admin的密码 admindPwd: 111111 #通信token,agent端和此保持一致 wgToken: wgcloud #是...阅读全文

Segmentfault 2020-06-11 09:32:34 tianshiyeben

golang 结构体

普通结构体 1.public type Flower struct { Name string Color string Category string } 外部包可以直接引用和赋值2.private type leaf struct { count int size int } 外部包不能直接引用需要定义public函数提供操作,例如 func (l *leaf) SetColor(color string) { l.color = color } 3.public结构体里面有private ...阅读全文

Segmentfault 2020-06-11 08:32:33 laughbug

硬核!《DNS 速成指南》一文搞懂 DNS ,网络排查不再难

1. DNS 是什么? DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。 举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69。 2. 域名的层级 由于后面我会讲到 DNS 的解析过程,因此需要你对域名的层级有一些了解 根域名 :.root 或者 . ,通常是省略的 顶级域名,如 .com,.cn 等 次级域名,如 baidu.co...阅读全文

Segmentfault 2020-06-10 23:32:35 Python编程时光

行为驱动开发:一篇文章带你用 Python 玩转 BDD

相信大部分的人都听说过 BDD,即:行为驱动开发,但并未涉及到它的使用方和项目实战。 所以,本篇文章将大家全面了解 BDD 及实现方式,最后使用 Python BDD 框架落地到实际项目中去。 1. BDD 及优势 BDD,行为驱动开发是 敏捷软件开发 的一种技术,鼓励软件项目的所有成员之间的相互协助 传统的软件开发方式主要缺点包含:测试用例比较单一,导致覆盖率不高;业务和产品不能够全面了解产品的行为表现 BDD 的出现主要优势有下面 2 点,主要体现在: 可以很好的减少项目成员之间的沟通成本,...阅读全文

简书 2020-06-09 09:32:53 AirPython