go语言
文章平均质量分 60
Q52077987
这个作者很懒,什么都没留下…
展开
-
GO编程模式学习笔记:MAP-REDUCE
GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得。原文链接:GO编程模式:MAP-REDUCEMapfunc MapStrToStr(arr []string, fn func(s string) string) []string { var newArray = []string{} for _, it := range arr { newArray = append(newArray, fn(it)) } return newArr原创 2021-06-19 15:49:02 · 336 阅读 · 0 评论 -
GO编程模式学习笔记:修饰器
GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得。原文链接:GO编程模式:修饰器修饰器模式在函数变成第一公民以后,就从以前的继承结构演变成了函数嵌套,也就是函数式编程形式。一个简单的修饰器模式如下:package mainimport "fmt"func decorator(f func(s string)) func(s string) { return func(s string) { fmt.Println("Started") f原创 2021-06-11 10:26:53 · 298 阅读 · 2 评论 -
GO编程模式学习笔记:切片,接口,时间和性能
GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得。原文链接:GO编程模式:切片,接口,时间和性能1. Full Slice Expressionslice会共享底层数组,而append会在cap不足的时候扩容,所以共享底层数组的两个slice,在经过一次append之后,不一定还是否共享。不能依赖这个特性写代码。但是有一种方式可以强制append之后不共享内存:dir1 := path[:sepIndex:sepIndex]这个叫做Full Slice Expression,原创 2021-06-09 22:27:11 · 302 阅读 · 0 评论 -
GO 编程模式学习笔记:错误处理
GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得。原文链接:GO 编程模式:错误处理将错误类型当作区分错误的原因,类型相当于原来的错误码。if err != nil { switch err.(type) { case *json.SyntaxError: ... case *ZeroDivisionError: ... case *NullPointerError: ... default: .原创 2021-06-06 07:54:44 · 218 阅读 · 0 评论 -
GO 编程模式学习笔记——GO GENERATION
GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得。原文链接:GO 编程模式:GO GENERATIONGo语言代码生成主要还是用来解决编程泛型的问题。Go语言的类型检查有两种技术,一种是 Type Assert,一种是Reflection。反射实现一个支持任何类型的slice(但是必须是同一类型,这也符合范型定义)type Container struct { s reflect.Value}func NewContainer(t reflect.Type, size原创 2021-06-04 09:59:07 · 320 阅读 · 0 评论 -
GO编程模式学习笔记——FUNCTIONAL OPTION
GO编程模式学习笔记系列为学习陈皓的GO编程模式系列文章记录与心得。原文链接:GO 编程模式:FUNCTIONAL OPTIONS首先FUNCTIONAL OPTIONS只是一种模式,并不是必须的,个人感觉和替代者比,也未见得优势多明显,了解这种模式可以在读代码或者用第三方库的时候更轻松。主要是使用这种模式会让你的代码更具有Go语言风格,让你散发着gopher的独特气质。如果一个对象的初始化配置项众多,且有很多可以使用默认值,也可以自定义,那么就可以使用以下三种方式解决:1.必填项和选填项分离fu原创 2021-06-01 17:24:56 · 296 阅读 · 0 评论 -
grpc和protocol buffer使用
grpcgrpc是Google的rpc开源框架,它使用了protocol buffer(Google的另一个开源工具)作为接口定义语言和消息传递格式。大概的使用方法是:使用protocol buffer语言编写接口定义。使用protocol buffer工具将接口编译成目标语言代码,包括服务端的接口框架和客户端的接口stub定义,数据的序列化和反序列化过程等通用代码。开发人员在服务端编...原创 2019-05-19 16:20:03 · 1685 阅读 · 2 评论 -
go 错误处理
Go 语言的错误处理有两种方式:panic和error。panic适用于严重的,调用方不可预料的错误,比如数组越界,即使告知调用方错误的原因,调用方也不可能在原地恢复程序正常流程。error就是一般的错误,比如网络中断,调用方可以预料这种错误的发生,并能根据错误做出相应的处理。有一种错误处理的模式是将panic通过recover转化成error,这种模式适用于内部错误多且杂,并且发生在各个函...原创 2019-03-08 16:57:30 · 394 阅读 · 0 评论 -
使用通信来共享内存,而不是通过共享内存来通信
所有go语言的学习者都会看到这样一句话“使用通信来共享内存,而不是通过共享内存来通信”,这是go语言并发编程的座右铭,然而却不那么好理解。为了搞清楚熟悉的锁模式并发编程和go的channel模式并发编程的区别,先分别看一下这两种模式都是怎么做的:为了行文简洁,暂时把代码执行单元都称为“线程”,在go语言中都是go routine。线程和go routine的关系涉及go 运行时的实现,已经超...原创 2019-02-11 17:29:41 · 2035 阅读 · 3 评论 -
几个go 并发模式
go 语言中向一个已经关闭的channel发送数据会引起panic,因此go并发中一个基本的原则就是在数据发送端关闭channel。虽然channel是双向的通道,两个go routine可以通过一个channel进行双向通信,但是在一般的数据流的模式下,我们宁可将channel降级为单向的通道,以获取更安全可读的代码。本文主要介绍一些将channel作为单向通信的并发模式,文末会简单给一个双向...原创 2019-02-15 19:55:22 · 1333 阅读 · 0 评论 -
go语言开发工程结构
go语言的工作区是一个目录,下边有3个主要的文件件,src用于保存源码文件,pkg用于保存二进制库文件,bin用于保存二进制可执行文件。GOPATH就是工作区的根目录。其他语言可能是一个项目使用一个工作区,但是go建议所有项目使用同一个工作区。一个典型的go工作区目录结构:bin/pkg/src/ project1/ .git/ package1/ package2/ m...原创 2018-11-06 06:50:00 · 1020 阅读 · 0 评论