订阅通知 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 虽然本文的题目叫做“订阅通知”,但是呢,本文却主要介绍「观察者模式」如何在真实业务场景中使用。是不是有些不理解?解释下: 原因一,「观察者模式」其实看起来像“订阅通知” 原因二,“订阅通知”更容易被理解 什么是「观察者模式」? 观察者...阅读全文

Segmentfault 2020-04-15 18:32:36 TIGERB

【Go语言踩坑系列(十)】Channel(下)

声明 本系列文章并不会停留在Go语言的语法层面,更关注语言特性、学习和使用中出现的问题以及引起的一些思考。 引入 有了上一篇文章的基础,这一节我们来看通道的底层实现,我们先看一个例子,相信你已经很熟悉了: func main() { ch := make(chan int) go func() { ch <- 1 }() time.Sleep(5 * time.Second) fmt.Println(len(ch)) // 0 <- ch } 我们在主协程中创建一个通道,并且开了一个子协程往通道...阅读全文

Segmentfault 2020-04-15 15:32:37 NoSay

【Go语言踩坑系列(九)】Channel(上)

声明 本系列文章并不会停留在Go语言的语法层面,更关注语言特性、学习和使用中出现的问题以及引起的一些思考。 我们知道,Go实现了两种并发形式,第一种是多线程共享内存,其实就是Java,C++等语言的多线程并发,通过锁来进行访问。另一种则是Go特有的CSP(communicating sequential processes)并发模型。 什么是CSP? CSP 是 Communicating Sequential Process 的简称,中文可以叫做通信顺序进程,是一种并发编程模型,由 Tony ...阅读全文

Segmentfault 2020-04-15 12:32:33 NoSay

[译]Go Concurrency Patterns: Pipelines and cancellation - 2

接上一节翻译,[点此看前一部分](https://studygolang.com/articles/27916) #### Stopping short 我们创建的管道有固定的模式: - 所有发送操作完成后,由该阶段关闭`下游channel` - 所有阶段均从`上游channel`接收值,直至`上游channel`关闭 这种模式允许每一个接收者使用`for range`循环读取值,并在所有值成功发送到`下游channel`后,退出当前的`goroutine` 但在真实的`pipe...阅读全文

Go语言中文网 2020-04-12 16:13:54 TIEDPAG

http headers大总结

http headers 本文记录自己使用和理解到的headers,参考MDN,如有不同看法请发评论。 方向表示是请求header还是响应header或者两种情况都有,r是请求header,w是响应header,空白就是双向header;作用和解释如果是空白就是我不清楚。 Name 方向 作用 解释 Accept r 通用 请求时告诉服务端可以接受的响应类型,用于协商,服务端会按照顺序和权重返回合适的响应数据类型。 Accept-Charset r 通用 同上 客户端接受的字符集。 Accept...阅读全文

Segmentfault 2020-04-15 09:32:33 eudore

Golang 写的一个动态时间片轮转进程调度算法

现在还有一个问题,在最后一个进程运行完之后,还会再打印一次输出 package main import "fmt" type Process struct { //定义进程的数据结构 PRIORITY int CPUTIME int ALLTIME int STATE string } func main() { PR := map[int]*Process{ //初始进程 0: &Process{ PRIORITY: 9, CPUTIME: 0, ALLTIME: 3, STATE: "rea...阅读全文

简书 2020-04-12 06:32:41 一位路过的假面骑士丶

Golang 交叉编译可执行程序

可以通过 go env 查看当前系统对应的配置,默认编译出的是对应的系统的可执行文件,所以需要编译别的平台的文件的时候,只要将 go 的环境变量设置成对应的架构就可以编译不同平台的文件了 Linux 下编译 Mac 和 Windows 64 位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Mac 下编译 L...阅读全文

简书 2020-04-12 06:32:41 一位路过的假面骑士丶

Panic,堆栈跟踪以及如何恢复【最佳实践】(译文)

作者:Stefan Nilsson 原文网址:yourbasic.org/golang/reco… Panic 是 Go 中的一个异常 Panics 类似于 C++ 和 Java 异常,但仅适用于运行时错误,例如跟随一个 nil 指针或试图对数组访问超出范围的索引。为了表示诸如文件结束之类的事件,Go 程序使用内置 error 类型。有关错误的更多信息,请参见 错误处理最佳实践 和 3种创建错误的简单方法。 Panic 停止 goroutine 的正常执行 程序出现 panic 时,它将立即开始...阅读全文

掘金 2020年04月11日 xiayuguo

Golang 中生成唯一的字符串(UUID,GUID)(译文)

作者:Stefan Nilsson 原文网址:yourbasic.org/golang/gene… 通用唯一标识符 UUID(universally unique identifier)或全局唯一标识符 GUID (globally unique identifier)是用于标识信息的 128 位数字。 UUID 是唯一的(出于实用目的):它重复的概率非常接近零。 UUID 不依赖中央机构的注册和分配。 UUID 的字符串表示形式由 32 个十六进制数字组成,以 5 个组显示,由连字符 - 分隔...阅读全文

掘金 2020年04月11日 xiayuguo

Golang 中生成密码(译文)

作者:Stefan Nilsson 原文网址:yourbasic.org/golang/gene… 随机字符串 该代码从瑞典语字母(包括非 ASCII 字符 å, ä 和 ö )中生成一个随机的数字和字符字符串。 rand.Seed(time.Now().UnixNano()) chars := []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ" + "abcdefghijklmnopqrstuvwxyzåäö" + "0123456789") length := 8 ...阅读全文

掘金 2020年04月11日 xiayuguo

[译]Go Concurrency Patterns: Pipelines and cancellation - 1

英文原文:https://blog.golang.org/pipelines #### 简介 go语言的并发原语支持使得开发者构建流式数据`pipeline(管道)`变得容易,这些管道可以有效的利用I/O和多cup。本文介绍了这类pipeline的示例,重点介绍了操作失败时出现的细微差别,和如何优雅的处理错误的技术 #### What is a pipeline go语言中没有对`pipeline`正式的定义;`pipeline`只是多种并发模式中的一种。通常而言,`pipeli...阅读全文

Go语言中文网 2020-04-11 23:39:35 TIEDPAG

代码组件 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「组合模式」如何在真实业务场景中使用。 什么是「组合模式」? 一个具有层级关系的对象由一系列拥有父子关系的对象通过树形结构组成。 组合模式的优势: 所见即所码:你所看见的代码结构就是业务真实的层级关系,比如Ui界面你真实看...阅读全文

Segmentfault 2020-04-14 15:32:37 TIGERB

链式调用 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「责任链模式」如何在真实业务场景中使用。 什么是「责任链模式」? 首先把一系列业务按职责划分成不同的对象,接着把这一系列对象构成一个链,然后在这一系列对象中传递请求对象,直到被处理为止。 我们从概念中可以看出责任链模式有如...阅读全文

Segmentfault 2020-04-14 13:32:34 TIGERB

代码模板 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「模板模式」如何在真实业务场景中使用。 什么是「模板模式」? 抽象类里定义好算法的执行步骤和具体算法,以及可能发生变化的算法定义为抽象方法。不同的子类继承该抽象类,并实现父类的抽象方法。 模板模式的优势: 不变的算法被继承...阅读全文

Segmentfault 2020-04-14 11:32:34 TIGERB

以图搜图系统工程实践

以图搜图系统工程实践 之前写过一篇概述: 以图搜图系统概述 。 以图搜图系统需要解决的主要问题是: 提取图像特征向量(用特征向量去表示一幅图像) 特征向量的相似度计算(寻找内容相似的图像) 对应的工程实践,具体为: 卷积神经网络 CNN 提取图像特征 向量搜索引擎 Milvus CNN 使用卷积神经网路 CNN 去提取图像特征是一种主流的方案,具体的模型则可以使用 VGG16 ,技术实现上则使用 Keras + TensorFlow ,参考 Keras 官方示例: from keras.appl...阅读全文

Segmentfault 2020-04-13 20:32:33 rife

Gox语言中的基本数据类型及其转换-GX2

Gox语言以脚本语言Anko为语法基础,而Anko语言又是基于Go语言(Golang)做了一定的改进,因此数据类型大致类似于Go语言,数据的赋值等操作也类似但略有不同。下面做一些说明,并用实例来进行验证。 变量的声明与赋值 Gox语言中,变量声明可以使用“var”关键字,也可以不用,与JavaScript语言类似,var关键字只是用来指定该变量是局部变量。另外变量无需指定类型,并且同一变量可以改变数据类型,也就是说变量可以随着它其中存放的数值类型而改变自己的类型。看看下面这段代码: var a ...阅读全文

简书 2020-04-11 17:33:04 陆满庭

海量用户及时通讯系统

需求分析 用户注册 用户登录 显示用户在线的用户列表 群聊 点对点聊天 离线留言 界面设计 界面设计 项目开发前技术储备 项目要保存用户信息和消息数据,因此我们需要学习数据库(redis或者是MySQL)这里我们选择Redis go中使用redis Redis的基本介绍 redis是nosql型数据库 不是关系型数据库 Redis是远程字典服务器,性能比较高,单机性能高,适合做缓存,也可以持久化 是完全开元免费的,高性能的分布式内存数据库 redis的操作指令 redis的操作指令 操作指令 r...阅读全文

简书 2020-04-11 17:33:01 乔大叶_803e

【栈与队列】设计一个有getMin功能的栈

#### 【题目】 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈种最小元素的操作 #### 【要求】 1、pop、push、getMin 操作的时间复杂度都是O(1) 2、设计的站的类型可以使用现成的栈结构 #### 【难度】 ★☆☆☆ #### 【解答】 ```go package main import ( "errors" "fmt" ) func main() { s ...阅读全文

Go语言中文网 2020-04-11 17:32:09 xmge

go升级后vscode调试debug失效Version of Delve is too old for this version of Go (maximum supported version...

过程一 因为dlv的版本不支持的原因,重新下一个即可 go get github.com/go-delve/delve/cmd/dlv 已经有了就更新一下即可 go get -u github.com/go-delve/delve/cmd/dlv 如果已经成功就不需要继续了 过程二 中间可能还会有一个问题,就是包的下载问题 go get提示error: ...is not using a known version control system 错误提示代码 go get -v github.c...阅读全文

简书 2020-04-11 15:32:44 哆啦在这A梦在哪