[Go] golang的error接口
error接口 1.error就是一个接口interface 2.属于errors包,该包有一个导出方法New,返回了errorString类型 3.errorString类型实现了error接口 4.之所以这样是因为可以实现每个错误都是不同的实例
package main
import (...[2019/2/22]
多租户通用权限设计(基于casbin)
多租户通用权限设计(基于 casbin)
所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断.
权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中往往表现的非常复杂和难于控制, 很大部分原因是把权限和具体业务结合的太过紧密, 把业务的复杂度也...[2019/2/21]
Linux下安装Beego:go install: cannot install cross-compiled binaries when GOBIN is set
Linux下安装Beego出错
问题:go install: cannot install cro -compiled binaries when GOBIN is set
遇到这个问题一般是在环境变量中设置了 GOBIN 可以打开 /etc/profile 把这个变量注释掉就,执行 source...[2019/2/21]
使用Golang搭建web服务
如何用golang搭建一个web服务呢?菜鸟官网的go web编程教程已经介绍了web服务器的工作原理,这里就不赘述了。
我们先看个例子:http.go
package main
import (
"fmt"
"io"
"log"
"net/http"
)
...[2019/2/21]
Go学习笔记03-结构控制
目录
条件语句
循环语句
条件语句
条件语句用 if 关键字来判定条件,如:
func bounded(v int) int {
if v > 100 {
...[2019/2/21]
[Go] golang结构体成员与函数类型
package main
import (
"fmt"
)
定义一个类型
type tsh struct {
定义成员,类型是func() string
test func() string
}
定义一个函数,获取tsh类型
func New(fn func() string)...[2019/2/21]
Go学习笔记04-函数
目录
函数定义
函数示例
小结
函数定义
函数定义与变量定义相似,
func function_name(var1, var2, var3, ...) (return_type...[2019/2/21]
详解Golang 推荐的命名规范
Golang 推荐的命名规范
很少见人总结一些命名规范,也可能是笔者孤陋寡闻, 作为一个两年的golang 开发者, 我根据很多知名的项目,如 moby, kubernete 等总结了一些常见的命名规范。 命名规范可以使得代码更容易与阅读, 更少的出现错误。
如有不同意见欢迎吐槽、讨...[2019/2/21]
比Python、Java更快的Go能否笑傲江湖
随着云原生时代的到来,拥有高并发性、语法易学等特点的 Golang 地位逐渐凸显,在云原生编程中占据了主导地位。 出现在21世纪的GO语言,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。 特别是在云项目中,大部分都使用了Gola...[2019/2/20]
go Context的使用go Context的使用
控制并发有两种经典的方式,一种是WaitGroup,另外一种就是Context
WaitGroup的使用
WaitGroup可以用来控制多个goroutine同时完成
func main() {
var wg sync.WaitGroup
wg.Add(2)
...[2019/2/19]
基于go手动写个转发代理服务的代码实现
由于公司经常需要异地办公,在调试的时候需要用到内网环境,因此手动写了个代理转发服务器給兄弟们用:socks5proxy。
选型上,语言上就选择了Go,简单清晰,转发协议选择了socks5。
SOCKS5协议介绍
SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间...[2019/2/18]
golang实现分布式缓存笔记(一)基于http的缓存服务
目录
前言
cache
缓存服务接口
cache包实现
golang http包使用介绍
hello.go
Redirect.go...[2019/2/18]
基础算法之排序算法
排序算法的Golang实现
package main
import (
"fmt"
)
冒泡排序:升序
func BubbleSort(s []int) {
for i:= 0;i < len(s);i++{
for j := 0;j < len(...[2019/2/18]
[Go] golang原子函数锁住共享资源
1.atomic包里的几个函数以及sync包里的mutex类型,提供了解决方案 2.原子函数能够以很底层的加锁机制来同步访问整型变量和指针 3.atomic.AddInt64(&counter, 1)的原理是强制同一时刻只能有一个goroutine运行并完成这个加法操作
package...[2019/2/18]
[Go] golang原子函数实现goroutine同步
启动了两个goroutine,并完成一些工作。在各自循环的每次迭代之后,在goroutine 会使用LoadInt64 来检查shutdown 变量的值。这个函数会安全地返回 shutdown 变量的一个副本。如果这个副本的值为1,goroutine 就会跳出循环并终止。
pa...[2019/2/18]
[Go] golang互斥锁mutex
1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码 2.Lock()和Unlock()定义临界区
package main
import (
"fmt"
"runtime"
"sync"
)
var (
全局变量
counter ...[2019/2/18]
[Go] golang缓冲通道实现管理一组goroutine工作
通道 1.当一个资源需要在goroutine之间共享时,通道在goroutine之间架起了一个管道 2.无缓冲通道和有缓冲通道,make的第二个参数就是缓冲区大小 3.无缓冲通道需要发送和接收都准备好,否则先执行的goroutine会阻塞等待 4.有缓冲的通道,在缓冲区没满之前,发送和接收动作都不...[2019/2/18]
Go语言相对于C++的优点
Go语言是Google公司在2009年开源的一门高级编程语言,它为解决大型系统开发过程中的实际问题而设计,支持并发、规范统一、简单优雅,被很多Go语言传道者誉为“互联网时代的C语言”。而C++语言诞生于1979年,可以将C++语言视为一个语言联邦,主要包含C语言(面向过程)、面向对象、STL容器和...[2019/2/18]
casbin的分析
casbin的分析
问题
一般的项目中,都会有权限认证模块,用来控制不同的角色,可以访问的功能。比较出名的权限控制模型有ACL和RABC。如果每个项目中,都重新实现权限控制模块,这样操作会比较繁琐,希望有一个统一的简单模块来控制权限,而casbin这个开源项目,可以支持acl,rabc和abac这...[2019/2/15]
Go 编译原理实现计算器(测试驱动讲解)
本文不需要你掌握任何编译原理的知识。 只需要看懂简单的golang语言即可, 完整的代码示例在GIT 听到编译原理,就觉得很高大上。记得上大学时,这门课要记忆一些BNF,LEX,AST,CFG这些有的没的。一个听不懂,二个没兴趣。随着使用了几门语言之后,也尝试用编译原理的基本知识写过一个sql转e...[2019/2/14]
使用google wire解决依赖注入
使用google wire解决依赖注入
google wire是golang的一个依赖注入解决的工具,这个工具能够自动生成类的依赖关系。
当我们写代码的时候,都希望,类都是一个个独立的结构,互不耦合,而类之间的关系,是通过外部传递不同的依赖组件,来组装出来,生成不同的实例。
一个耦合的例子:
...[2019/2/13]
Golang之轻松化解defer的温柔陷阱Golang之轻松化解defer的温柔陷阱
目录 什么是defer? 为什么需要defer? 怎样合理使用defer? defer进阶 defer的底层原理是什么? 利用defer原理 defer命令的拆解 defer语句的参数 闭包是什么? defer配合recover 后记 参考资料什么是defer? defer是Go语言提供的一种用于...[2019/2/13]
Go学习笔记02-基本语法
目录
变量定义
代码示例
变量定义
变量定义
代码示例
package main
import "fmt"
/* 此处定义的变量为包内变量,在包内有效
...[2019/2/12]
[Go] golang的竞争状态
1.goroutine在逻辑处理器的线程上进行交换
2.竞争状态:两个或者多个goroutine在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于互相竞争的状态 对共享资源的读和写操作必须是原子化的,同一时刻只能有一个goroutine对共享资源进行读和写操作
3...[2019/2/11]
golang中的字符串拼接
go语言中支持的字符串拼接的方法有很多种,这里就来罗列一下
常用的字符串拼接方法
1.最常用的方法肯定是 + 连接两个字符串。这与python类似,不过由于golang中的字符串是不可变的类型,因此用 + 连接会产生一个新的字符串对效率有影响。
s1 := "...[2019/2/11]
golang写业务代码,用全局函数还是成员函数
在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复用的代码都会封装为功能函数了。在写业务代码的时候,使用包+全局函数的划分方式,可以将业务代码写成单...[2019/2/11]
golang标准库 context的使用golang标准库 context的使用
本文索引
问题引入
context包简介
示例
问题引入
goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇。
goroutine的简单固然有利于我们的开发,但简单总是有代价的,考虑如下例子:
func htt...[2019/2/1]
golang实现跨域访问的方法
前端通过Ajax来获取服务器资源时,会存在跨域问题。因为Ajax只能同源使用(预防某些恶意行为),所以当访问不在同一个域中的资源时,就会出现跨域限制。尤其在开发和测试时,跨域问题会给前端测试带来非常不便。
不过CORS(Cro -Origin Resource Sharing,跨域资源共享)解...[2019/1/31]
CQRS简单入门(Golang)CQRS简单入门(Golang)
一、简单入门之入门
CQRS/ES和领域驱动设计更搭,故整体分层沿用经典的DDD四层。其实要实现的功能概要很简单,如下图。
基础框架选择了https: github.com/looplab/eventhorizon,该框架功能强大、示例都挺复杂的,囊括的概念太多,不太适...[2019/1/30]
[Go] go get获取官方库被墙解决
1.直接在github上clone对应的代码 , 地址为:
https: github.com/golang/xxxxxxx.git
xxxxxxx为所缺的库名 , 比如net库 text库
https: github.com/golang/net.git
http...[2019/1/30]
Go:学习笔记兼吐槽(3)
Go:学习笔记兼吐槽(1)
Go:学习笔记兼吐槽(2)
Go:学习笔记兼吐槽(3)
数组
Golang 中,数组是值类型。
数组的声明
var arr [10]...[2019/1/30]
Golint的简易使用方法
根据作者的说法:
Golint is a linter for Go source code.
Golint differs from gofmt. Gofmt reformats Go source code, whereas
golint prints out style mistakes....[2019/1/28]
Ubuntu 16.04 下简单安装使用golang之备忘
??刚开始学习Go语言,这里记录下我在Ubuntu 16.04下安装使用golang的过程,方便以后查询。
?
一、安装
?
1、添加源
??如果使用默认的源安装golang的话,版本太低,只到1.6,所以要添加一个新的源并更新,执行以下命令:
sudo add-apt-repositor...[2019/1/28]
LaTeX表格绘制备忘之Go语言中的几个表
??以下绘制的表格选自《Go语言 云动力》一书。这些表格比较简单,LaTeX语句也比较简单。
?
完整代码:
% 博客园陆巍的博客 https: www.cnblogs.com/atthefirst/
\documentcla {article}
%
\usepackage{ctex} % ...[2019/1/28]
LaTeX宏包TikZ绘图示例——Go语言起源图LaTeX宏包TikZ绘图示例——Go语言起源图
??本例所绘图形选自《Go语言程序设计》(作者:Alan A. A. Donovan与Brian W. Kernighan)。
完整代码
\documentcla {article}
%
\usepackage{ctex} % 汉字支持
\usepackage{geometry} % 页面布局支...[2019/1/24]
Golang常量iota的使用实例Golang常量iota的使用实例
Codes
package main
import "fmt"
type color byte
const (
black color = iota
red
blue
)
func test(c color) {
fmt.Println(c)
}
...[2019/1/23]
[Go] 使用go语言解决现代编程难题
1.计算机一直在演化,64核,128核等等,但是我们依旧在使用为单核设计的技术编程 2.Go语言让分享自己的代码包更容易 3.Go语言重新思考传统的面向对象,提供了更高效的复用代码手段 4.Go不仅提供高性能而且开发更快速 5.Go语法简洁,编译速度快,内置并发,自带垃圾回收器 6.Go编译器只关...[2019/1/21]
beego解读Cache之MemoryCache
beego 框架 cache 目录是 Go 实现的一个缓存管理器,是beego框架自带工具之一,当然,如果你只想使用 cache 而不是整个 beego 框架,可以选择性安装:
go get github.com/astaxie/beego/cache
在我写这篇博文时, beego 版本是 ...[2019/1/21]
再探go modules:使用与细节
还有半个月go1.12就要发布了。这是首个将go modules纳入正式支持的稳定版本。
距离go modules随着go1.11正式面向广大开发者进行体验也已经过去了半年,这段时间go modules也发生了一些变化,借此机会我想再次深入探讨go modules的使用,同时对这个新生包管理方案...[2019/1/21]
go语言打造个人博客系统(二)
go语言打造个人博客系统(二)
??在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发。
博客系统后端接口开发
路由测试
http.HandleFunc("/ping", Pong)
func Pong(w h...[2019/1/18]
说说不知道的Golang中参数传递说说不知道的Golang中参数传递
本文由云+社区发表
导言
几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中存在着map、channel和slice这三种内建数据类型,它们极大的方便着我们的日常coding。...[2019/1/17]
Golang并行判断素数
## Golang多核判断素数方式
1 package main
2
3 import (
4 "bufio"
5 "fmt"
6 "os"
7 "runtime"
8 "strconv"
9 "syscall"
10 )
1...[2019/1/17]
go语言打造个人博客系统(一)
go语言打造个人博客系统(一)
为什么选择go语言?
??听说go语言是在几年前,但真正深入了解他却是在2017年,因为当时作为讲师 ,需要准备go语言的课程,结果稍一接触立刻就喜欢上这门语言了,作为长期的c/c++程序员来说,10年来参加了很多大型项目,用c来开发确实很苦逼,所以碰到go语...[2019/1/16]
[日常] Go-逐行读取文本信息
go逐行读取文本信息: 1.os包提供了操作系统函数的不依赖平台的接口,Open方法打开一个文件用于读取,func Open(name string) (file *File, err error) 2.bufio包实现了有缓冲的I/O,NewReader方法创建一个具有默认大小缓冲、从r读取的*...[2019/1/16]
Go:学习笔记兼吐槽(2)
基本数据类型和string之间的转换
(1) 基本类型转string
使用 fmt.Sprintf(“%参数”, 表达式)
a. 通用:
参数含义
%v
值的默认格式表示
%+v
类似%v,但输出结构体时会添加字段名
...[2019/1/15]
GOLANG使用Context管理关联goroutine的方法
一般一个业务很少不用到goroutine的,因为很多方法是需要等待的,例如http.Server.ListenAndServe这个就是等待的,除非关闭了Server或Listener,否则是不会返回的。除非是一个API服务器,否则肯定需要另外起goroutine发起其他的服务,而且对于API服务器...[2019/1/15]
GOLANG使用Context实现传值、超时和取消的方法
GO1.7之后,新增了context.Context这个package,实现goroutine的管理。
Context基本的用法参考GOLANG使用Context管理关联goroutine。
实际上,Context还有个非常重要的作用,就是设置超时。比如,如果我们有个API是这样设计的:
...[2019/1/15]
golang简单实现jwt验证(beego、xorm、jwt)
程序目录结构
简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息。
app.conf文件内容(可以用个beego直接读取里面的内容)写的是一个jwt的secretkey
jwtkey="12345678"
config.json里面保...[2019/1/14]
转载: 国内的go get无法连接问题的解决转载: 国内的go get无法连接问题的解决
转载自CSDN的文章 https: blog.csdn.net/gongpulin/article/detail 80972806
国内的go get问题的解决
go get golang.org/x 包失败解决方法
由于各种问题,国内使用 go get 安装 golang 官方包可能会失...[2019/1/14]
Go:学习笔记兼吐槽(1)
自动添加分号
在很多其他的编程语言中,每一行代码的结尾都必须有分号(假设一行中只有一句代码),Golang 的开发者认为,既然每行都要加,不如编译器自动来加。当然,你加了分号也不会报错。
Golang 中,在以下两种情况下会自动加入分号:
当输入被断开为标记时,如果行末标记为...[2019/1/14]