随笔分类 - golang
摘要:1.json 包的 NewDecoder 函数 // 打开文件 file, err := os.Open(dataFile) if err != nil { return nil, err } defer file.Close() // 将文件解码到一个切片里 var feeds []*Feed e
阅读全文
摘要:func hanio(n int, x string, y string, z string) { if n < 1 { fmt.Println("汉诺塔的层数不能小于1") } else if n == 1 { fmt.Println("移动:" + x + "——>" + z) } else {
阅读全文
摘要:假设有且仅有 1 个最大公共子串。比如,输入 a = "13452439", b = "123456"。由于字符串 "345" 同时在 a 和 b 中出现,且是同时出现在 a 和 b 中的最长子串。因此输出 "345"。 func main() { a := "123456" b := "13452
阅读全文
摘要:给定一个字符串,逐个翻转字符串中的每个单词。例如,输入: "the sky is blue",输出: "blue is sky the"。 package main import ( "fmt" "strings" ) type SStack struct { elems []string } fu
阅读全文
摘要:Writer 和 Reader 接口 type Writer interface { Write(p []byte) (n int, err error) } io.Writer接口的声明,接收唯一一个方法Write,这个方法接收一个byte切片,并返回两个值。第一个值是写入的字节数,第二个值是er
阅读全文
摘要:Go语言提供了传统的同步goroutine的机制,就是对共享资源加锁。如果需要顺序访问一个整形变量或者一段代码,atomic和sync包里的函数提供了很好的解决方案。 原子函数:atmoic.AddInt64 atmoic.LoadInt64 atmoic.StoreInt64 AddInt64 这
阅读全文
摘要:Gin框架介绍及环境搭建 Gin特点和特性: 速度:之所以被很多企业和团队所采用,第一个原因是因为其速度快,性能表现初衷; 中间件:和iris类似,Gin在处理请求时,支持中间件操作,方便编码处理; 路由:在Gin中可以非常简单的实现路由解析的功能,并包含路由组解析功能; 内置渲染:Gin支持JSO
阅读全文
摘要:方法集:定义了一组关联到给定类型的值或者指针的方法。定义方法时使用的接收者的类型决定了这个方法时关联到值,还是关联到指针,还是两个都关联。 规范里描述的方法集: Values Methods Receivers T (t T) *T (t T) and (t *T) T类型的值的方法集只包含值接收者
阅读全文
摘要:在声明一个新类型之后,声明一个该类型的方法之前,需要先回答一个问题:这个类型的本质是什么。如果给这个类型增加或者删除某个值,是要创建一个新值,还是要更改当前的值?如果是要创建一个新值,该类型的方法就使用值接收者。如果是要修改当前值,就使用指针接收者。这个答案也会影响程序内部传递这个类型的值的方式:是
阅读全文
摘要:在Go中使用接口(interface{})好像有性能问题,来看一个例子:跑了三个benchmark,一个是接口调用,一个是直接使用,后面又加了一个接口断言后调用 lib_test.go package main import "testing" type D interface { Append(D
阅读全文
摘要:go-micro安装成功后(安装过程百度很多),会报错: 原因:在go-micro里面引用的etcd的包是 http://github.com/coreos/etcd/clientv3而不是http://go.etcd.io/etcd/clientv3这样一来可能就需要改源码了。 找到包http:/
阅读全文
摘要:背景 已经学习了微服务之间通信采用的通信协议,如何实现服务的注册和发现,搭建服务管理集群,以及服务与服务之间的RPC通信方式。具体的内容包括:protobuf协议,consul及docker部署consul集群,gRPC框架的使用等具体的实现方案。 以上这些具体的方案都是为了解决微服务实践过程中具体
阅读全文
摘要:gRPC介绍 gRPC是由Google公司开源的一款高性能的远程过程调用(RPC)框架,可以在任何环境下运行。该框架提供了负载均衡,跟踪,智能监控,身份验证等功能,可以实现系统间的高效连接。另外,在分布式系统中,gRPC框架也有有广泛应用,实现移动社会,浏览器等和服务器的连接。 gRPC开源库支持诸
阅读全文
摘要:无缓冲管道的发送和接收过程是阻塞的,还可以创建一个有缓冲(Buffer)的管道。 定义: 只在缓冲已满的情况,才会阻塞向缓冲管道(Bufferer Channel)发送数据。同样,只有在缓冲为空的时候,才会阻塞从缓冲管道接收数据。 通过向make函数再传递一个表示容量的参数(指定缓冲的大小),可以创
阅读全文
摘要:RPC技术内部原理是通过两种技术的组合来实现的:本地方法调用 和 网络通信技术。 RPC简介 RPC是Remote Procedure Call Protocol单词首字母的缩写,简称为:RPC,翻译成中文叫远程过程调用协议。所谓远程过程调用,通俗的理解就是可以在本地程序中调用运行在另外一台服务器上
阅读全文
摘要:服务发现 为什么要使用服务发现 设想下,我们写了一些通过REST API或者Thrift API调用某个服务的代码,为了发起这个请求,代码需要知道服务实例的网络地址(IP 地址和端口号)。在传统运行在物理机器上的应用中,某个服务实例的网络地址一般是静态的,比如,代码可以从只会偶尔更新的配置文件中读取
阅读全文
摘要:单体应用 单体应用:所谓的单体应用就是指一个war包包含了项目的所有功能。尽管有一个逻辑模块化架构,但应用程序被作为一个单体进行打包和部署。例如,我们所熟知的许多Java应用程序被打包成WAR文件部署在如Tomcat或者Jetty之类的应用服务器上。其他Java应用程序被打包成可执行JAR包。 单体
阅读全文
摘要:RPC 通信 对于单独部署,独立运行的微服务实例而言,在业务需要时,需要与其他服务时行通信,这种通信方式是进程之间的通讯方式(简称IPC)。 IPC有两种实现方式,分别为:同步过程调用、异步消息调用。在同步过程调用的具体实现中,有一种实现方式为RPC通信方式,远程过程调用。(英语:Remote Pr
阅读全文
摘要:package main import "time" func main(){ connectTimeout := 10 time.Sleep(time.Second*connectTimeout) } 这样使用会报错 int and time.Duration are different type
阅读全文
摘要:package main import ( "fmt" "redigo-master/redis" ) func main() { conn, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println("redis.
阅读全文

浙公网安备 33010602011771号