-
Golang 限速器
所属栏目:[大数据] 日期:2020-12-16 热度:122
限速器 之前看到这篇golang并发编程的两种限速方法,觉得 sleep 等待的方式不是特别好,唤醒线程的时间比较长。而且1s内的请求只能均匀的到来,如瞬间来 N 个,那么只有一个能立刻返回,剩下的只能等待。 【修正】 根据下图的说明,无论是 sleep 还是 chan bl[详细]
-
golang chan
所属栏目:[大数据] 日期:2020-12-16 热度:179
####如何判断chan关闭 package mainimport( "fmt")func main(){ c := make(chan bool) close(c) if ok,_ := -c; ok{ fmt.Println("not closed") }else{ fmt.Println("closed") }} 此方法有个缺点,需要读一下才能判断其有没有被关闭。golang并没有提供一个方[详细]
-
golang panic: runtime error: invalid memory address or nil p
所属栏目:[大数据] 日期:2020-12-16 热度:131
今天做消息队列持久化存储服务过程中,golang操作mysql 报错: panic : runtime error invalid memory address or nil pointer dereference [ 经过反复查找,原来是变量定义问题 做个记录,以后再有问题可以做个参考,原始代码: varDb*sql.DBfuncinit(){Db,[详细]
-
Golang学习笔记 - 标准库"net/http"的简析及自制简单路
所属栏目:[大数据] 日期:2020-12-16 热度:131
原文链接:http://targetliu.com/golang-http-router/ 还是在继续学习Go的路上,曾经在使用PHP的时候吃过过度依赖框架的亏。现在学习Go的时候决定先打好基础,从标准库学起走。 源码分析 我们知道最简单的建立http服务器代码基本上都是这样的: http.HandleF[详细]
-
golang之race
所属栏目:[大数据] 日期:2020-12-16 热度:123
golang虽然有 牛逼 的goroutine,但是由于底层还是多线程的,并没有解决在多核编程里面不需要加锁的问题。Erlang有解决?所以在golang里面该加锁的地方,还是得由 你自己 去控制加锁。说实话,这个特性为也挺讨厌,这会显著增加编写golang的复杂性。使用其他[详细]
-
Golang1.7中的TCP交互封装.
所属栏目:[大数据] 日期:2020-12-16 热度:180
package connectionimport ( "encoding/binary" "errors" "io" "net" "sync" "time" ) //支持的最大消息长度 const maxLength int = 1 32 - 1 // 4294967295 var ( rHeadBytes = [ 4 ]byte{ 0 , 0 , 0 } wHeadBytes = [ 4 ]byte{ 0 , 0 } errMsgRead = error[详细]
-
golang什么时候应该把方法绑定在struct的值上而不是指针上?
所属栏目:[大数据] 日期:2020-12-16 热度:69
golang 支持 struct 也支持 struct 的指针。一个常见的困惑是既然struct 指针存在了,为什么不干脆只有struct的指针呢?两个原因: struct不可空,而struct指针可以为nil []my_struct的内存是连续的,而[]*my_struct只有指针是连续存放的,而实际的内容则需[详细]
-
[Go小技巧] 实现Go经典的消息队列处理协程
所属栏目:[大数据] 日期:2020-12-16 热度:59
type Engine struct {queue chan interface{}}// 推送请求到队列func (e *Engine) Push(req interface{}) {e.queue - req}// 开启服务协程func (e *Engine) Serve() {go func() {for {req := -e.queue// do some thing_ = req}}()}[详细]
-
[Go小技巧] 如何写很酷的连贯操作?
所属栏目:[大数据] 日期:2020-12-16 热度:161
定义连贯操作的结构体方法 package toytype Toy struct {nick stringshape stringcolor stringheight int}func (t *Toy) SetNick(nick string) *Toy {t.nick = nickreturn t}func (t *Toy) SetShape(shape string) *Toy {t.shape = shapereturn t}func (t *T[详细]
-
[Go小技巧] 如何用函数实现接口以及如何检验接口实现?
所属栏目:[大数据] 日期:2020-12-16 热度:90
type (Handler interface {Do(int) error}HandlerFunc func(int) error)func (hf HandlerFunc) Do(i int) error {return hf(i)}// 检查是否已实现Handler接口var _ Handler = HandlerFunc(nil) 说明: Golang中下划线“_”表示忽略接收到的值; const、var、[详细]
-
[Go小技巧] 教你如何将前端文件打包进Go程序,Cool!
所属栏目:[大数据] 日期:2020-12-16 热度:71
在Golang的开发中,我们有时会想要将一些外部依赖文件打包进二进制程序。比如本人在开发lessgo web框架时,希望将扩展包swagger(一个自动API文档的前端)打包进项目文件中,从而减少依赖,并能提高代码稳定性。实现步骤如下: 下载两个Golang的第三方包 go[详细]
-
对于Golang并发编程的一点感悟
所属栏目:[大数据] 日期:2020-12-16 热度:112
并发编程的核心其实就是 时间统筹 的运用 并发编程让程序员能够 更加自由地 从现实世界抽象 设计模型 假如把团队的每个人看作是1条协程,那么他们之间的沟通就是channel,协作流程就是业务逻辑 自己对并发编程的应用场景一些总结(说得不对的地方,大家莫要[详细]
-
golang 通过gin框架获取未知的参数
所属栏目:[大数据] 日期:2020-12-16 热度:178
原本的gin文档中(https://github.com/gin-gonic/gin)已经封装了很多可用的获取用户指定的参数,而在某些特定情况下我们需要获取用户传递的所有参数,则需要采用以下的方式来进行: func GetArgs(c *gin.Context){ … if c.Request.Form == nil { c.Request[详细]
-
Golang中的覆盖率测试
所属栏目:[大数据] 日期:2020-12-16 热度:168
Golang中的覆盖率测试 golang中提供了不少工具链,可以使用它们方便的进行单元测试、分析性能瓶颈,提供运行时信息等,总而言之是非常有用的。 go test这个工具大家用的应该比较多,之前我使用也大多是用来做单元测试的,go中做单元测试非常的方便,然而我忽[详细]
-
Golang浮点型的默认舍入规则——四舍六入五成双
所属栏目:[大数据] 日期:2020-12-16 热度:148
四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则,又名银行家舍入法。它比通常用的四舍五入法更加精确。 具体规则: 被修约的数字小于5时,该数字舍去; 被修约的数字大于5时,则进位; 被修约的数字等于5时,要看5前面的数字,若是[详细]
-
golang 数组与切片
所属栏目:[大数据] 日期:2020-12-16 热度:71
通过下面几个问题来更好理解golang 的数组和切片 类型 数组是值类型,将一个数组赋值给另一个数组时,传递的是一份拷贝。 切片是引用类型,切片包装的数组称为该切片的底层数组。 我们来看一段代码 //a是一个数组,注意数组是一个固定长度的,初始化时候必须[详细]
-
golang defer 使用小结与注意要点
所属栏目:[大数据] 日期:2020-12-16 热度:199
关于延时调用函数(Deferred Function Calls) 延时调用函数的语法如下: defer func_name(param-list) 当一个函数调用前有关键字 defer 时,那么这个函数的执行会推迟到包含这个 defer 语句的函数即将返回前才执行. 例如: func main() { defer fmt.Println("Fou[详细]
-
golang官方学习文档
所属栏目:[大数据] 日期:2020-12-16 热度:50
最近发现好多学习golang的同学不知道怎么开始学习,其实直接去官方看例子就OK,官方讲解的非常详细 官方中文在线文档 https://tour.go-zh.org/welcome/1 支持语言列表见 https://tour.golang.org/welcome/2[详细]
-
golang中interface{}转为struct
所属栏目:[大数据] 日期:2020-12-16 热度:191
es,ok := services["elasticsearch"].(*elasticsearch.ElasticSearchService) interface{}转为struct需要assert为指针[详细]
-
golang调用sql server proc
所属栏目:[大数据] 日期:2020-12-16 热度:150
许久没写博客,近来真有点郁闷,首先自己水平有限,在成为大牛的路上努力挣扎中,狰狞地挣扎,其次是不满某些人的某些态度,我觉得态度是很重要的,好,吐槽完毕。 由于项目需要,需要用到sql server。首先golang连接sql server用的是官方推荐的包github.com[详细]
-
golang+VScode安装与配置
所属栏目:[大数据] 日期:2020-12-16 热度:110
一、安装golang golang在设置windows环境变量的时候有点问题,喜欢在文件夹后面加,设置完之后最好自己再改一遍。 编辑环境变量GOROOT,将C:Go改成C:Go 编辑环境变量path,删掉;C:Gobin,然后在最开头写上%GOROOT%Go; 验证是否安装 C:go versiongo vers[详细]
-
Golang学习笔记(1)---go程序一般结构
所属栏目:[大数据] 日期:2020-12-16 热度:162
Go程序是通过 package 来组织的(与python的库类似) 只有 package 名称为 main 的包可以包涵 main 函数(同时main函数也是一个程序的入口) 一个可执行程序有且仅有一个 main 包 通过 import 关键字来引入其他非main包 通过 const 关键字来进行常量的定义[详细]
-
Golang学习笔记(2)---go语言基本类型
所属栏目:[大数据] 日期:2020-12-16 热度:136
布尔型:bool 长度1字节 取值范围:true,false 注意:不可以用数字代表true或false 整型:Int 根据平台可能为32为或64位 8位整型:int8/uint8 长度:1字节 取值范围:-127~127,0~255 byte 字节型 其实就是 uint8的别名 16位整型:int16/uint16 长度:2字节[详细]
-
Golang学习笔记(3)---go语言变量、常量的定义及赋值
所属栏目:[大数据] 日期:2020-12-16 热度:137
单个变量的赋值与声明 变量的声明格式:var 变量名称 变量类型 变量的赋值格式:变量名称 = 表达式 声明的同时赋值:var 变量名称 [变量类型] = 表达式 变量名 := 变量值 ---只能在函数体内使用 多个变量的复制与声明 全局变量的声明可以使用var()的方式简写[详细]
-
GOlang设计模式
所属栏目:[大数据] 日期:2020-12-16 热度:119
https://github.com/tmrts/go-patterns[详细]
