Go语言规范0 - 汇总

目录 统一规范篇 合理规划目录 GOPATH设置 import 规范 代码风格 大小约定 命名篇 基本命令规范 项目目录名 包名 文件名 常量 变量 变量申明 变量命名惯例 全局变量名 局部变量名 循环变量 结...

2019-07-04 15:27:30

阅读数 27

评论数 0

Go语言规范4 - 优化篇

目录 优化篇 4.1 质量保证 4.1.1 代码质量保证优先原则 4.1.2 对外接口原则 4.1.3 值与指针(T/*T)的使用原则 4.1.4 init的使用原则 4.1.5 defer的使用原则 4.1.6 Goroutine使用原则 4.1.7 Channel...

2019-07-04 15:20:38

阅读数 14

评论数 0

Go语言规范3 - 开发篇

目录 开发篇 3.1 包 第三方包管理 3.2 魔鬼数字 3.3 常量 & 枚举 3.4 结构体 3.5 运算符 3.6 函数 3.7 参数 3.8 返回值 3.9 注释 通用注释要求 包注释要求 函数与方法注释要求...

2019-07-04 15:09:12

阅读数 24

评论数 0

Go语言规范2 - 命名篇

目录 命名篇 2.1 基本命令规范 2.2 项目目录名 2.3 包名 2.4 文件名 2.5 常量 2.6 变量 变量申明 变量命名惯例 全局变量名 局部变量名 循环变量 2.7 结构体(struct) 2.8 接口名 2.9...

2019-07-04 14:53:19

阅读数 16

评论数 0

Go语言规范1 - 统一规范篇

目录 序言 目录 统一规范篇 1.1 合理规划目录 1.2 GOPATH设置 1.3 import 规范 1.4 代码风格 1.5 大小约定 参考链接 序言 看过很多方面的编码规范,可能每一家公司都有不同的规范,这份编码规范是写给我自己的,同时希望我们公司内部同事也...

2019-07-04 14:48:01

阅读数 18

评论数 0

有限状态机(FSM)golang的实现

有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变...

2019-06-04 10:25:00

阅读数 86

评论数 0

Go语言(Golang)sort包的使用

import "sort" sort包提供了排序切片和用户自定义数据集的函数。 通过使用golang提供的包sort,可以快速实现复杂结构的数据排序。 如果要使用sort,需要实现sort下 Interface对应的方法:Len()、Less()、Swap()3个方法。 ...

2019-06-02 16:31:56

阅读数 13

评论数 0

Golang container包下ring(数据结构中的循环链表)的使用

import "container/ring" ring实现了环形链表的操作。 本文只讨论golang中container包下ring的使用,循环链表的概念及原始操作参考其他。 示例代码: package main import ( "container...

2019-06-02 12:39:21

阅读数 13

评论数 0

Golang container包下list(数据结构中的链表)的使用

import "container/list" list包实现了双向链表。要遍历一个链表: for e := l.Front(); e != nil; e = e.Next() { // do something with e.Value } 链表的基础知识以及原始操...

2019-06-02 12:13:47

阅读数 30

评论数 0

Golang container包下heap(数据结构中的堆)的使用

mport "container/heap" heap包提供了对任意类型(实现了heap.Interface接口)的堆操作。(最小)堆是具有“每个节点都是以其为根的子树中最小值”属性的树。 一、堆的基本概念 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说...

2019-06-02 12:02:32

阅读数 30

评论数 0

Golang Reflect反射3

序言 第一次接触反射技术是在很多年前学习设计模式的时候,那时在优化Java版简单工厂的实现,当读取配置信息中的的类型字符串后利用反射来创建对象实例,替代了switch case语句的分支判断。 第二次接触反射技术是在几年前微服务架构开始大范围流行的时候,那时在考虑异构微服务的多版本集成问题,支持...

2019-05-30 15:19:08

阅读数 15

评论数 0

Go语言(Golang)的Web框架:gin的使用

gin是Go语言写的一个web框架,API性能超强,运行速度号称较httprouter要快40倍。封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点。 Github地址:https://github.com/gin-gonic/gin gin的安装:go get githu...

2019-05-29 16:20:04

阅读数 38

评论数 0

Golang匿名结构体的使用

一、结构体基础 结构体 (struct) 将多个不同类型的字段集中组成一种复合类型,按声明时的字段顺序初始化。 typeuserstruct{ namestring agebyte } user:=user{"Tom",2} 定义匿名结构体时没有type关键字,与其他...

2019-05-23 09:52:29

阅读数 101

评论数 0

Golang 变量的生命周期与变量逃逸

一、变量生命周期 1 变量的生命周期    生命周期是指程序执行过程中变量存在的时间段。下面我们分别来看看包变量(全局变量)和局部变量两种变量的生命周期。   ① 包变量一直常驻在内存到程序的结束,然后被系统垃圾回收器回收。也就是说包变量的生命周期是整个程序的执行时间。   ② 局部变量,例如...

2019-05-21 16:40:44

阅读数 86

评论数 0

Golang map的多键索引

在大多数的编程语言中,映射容器的键必须以单一值存在。这种映射方法经常被用在诸如信息索引上,如根据通讯簿的名字进行检索。但随着查询条件越来越复杂,检索也会变得越发困难。 代码示例: package main import ( "fmt" ) type queryKey ...

2019-05-20 16:39:18

阅读数 138

评论数 0

Golang interface(接口)的nil判断

nil在Go语言中只能被赋值给指针和接口。接口在底层的实现有两部分:type和data(参考上一篇博客:https://blog.csdn.net/weixin_42117918/article/details/90372113)。在源码中,显示地将nil赋值给接口时,接口的type和data都将...

2019-05-20 15:03:26

阅读数 41

评论数 0

Go语言interface(接口)底层实现

Go的interface源码在Golang源码的runtime目录中。 Go在不同版本之间的interface结构可能会有所不同,但是,整体的结构是不会改变的,此文章用的Go版本是1.11。 Go的interface是由两种类型来实现的:iface和eface。 其中,iface表示的是包含方法...

2019-05-20 14:11:06

阅读数 24

评论数 0

Golang Map并发处理机制(sync.Map)

Go语言中的Map在并发情况下,只读是线程安全的,同时读写线程不安全。 示例: package main import ( "fmt" ) var m = make(map[int]int) func main() { //写入操作 i:=0 go func()...

2019-05-16 17:03:53

阅读数 37

评论数 0

Golang ORM操作使用

ORM 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。 bee...

2019-05-09 17:48:50

阅读数 129

评论数 0

Golang context包的使用

Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。在 Go 语言中 context 包允许您传递一个 "context" 到您的程序。 Context...

2019-05-06 15:28:12

阅读数 40

评论数 0

提示
确定要删除当前文章?
取消 删除