区块

收录了 18 篇文章 · 2 人关注

  • go语言的初始化顺序,包,变量,init

    依次见例子代码: p1.go package p1 import "fmt" //1.1 var x float32 = 1.2 //1.2 func init() { //1.3 fmt.Printf("p1 package, x:%f\n", x) //1.4 } func Donothing() { fmt.Println("do nothing.\n") } a.go: package main import "fmt" var WhatIsThe1 = AnswerToLife(2.1...

  • 快速开始使用grpc(golang版)

    开始前准备 安装gprc go get -u google.golang.org/grpc 安装protocol buffers protoc编译器这个用于生成gRPC服务代码的。 下载解压后放入PATH路径,供后续使用。接下来安装protoc的go语言的插件go get -u github.com/golang/protobuf/protoc-gen-go 。 注意:这边插件也必须要在PATH路径下 栗子 采用$GOPATH/src/google.golang.org/grpc/example...

  • 如何在 Golang 中使用 MongoDB 构建微服务

    如今,Golang 越来越流行于编写 RESTful 微服务。这些服务常常使用 MongoDB 作为持久性存储。在本文中,我们将使用 Go 和 MongoDB 构建一个简单的 *书店* 微服务。我们将使用 *mgo* 驱动程序连接 MongoDB,并使用 *curl* 测试微服务。 ## MongoDB MongoDB 以其简单、高可用性和面向文档的特性风靡市场。与关系型相比,文档化的优点是: + 文档化在许多编程语言中可以对应原生数据类型。 + 嵌入式文档和数组减少了对高昂...

  • 使用 Goroutines 池来处理基于任务的操作

    *作者注:使用 Go 语言工作了一段时间之后,我学会了如何使用无缓冲 channel 来构建 Goroutines 池,我喜欢这种方式胜于此文章中所展示的方式。话虽如此,此文章在它所描述的场景中依然有巨大价值。* 我在多个场合都被问到为什么使用工作池模式,为什么不在需要的时候启动所需要的 Goroutines?我的答案一直是:受限于工作的类型、你所拥有的计算资源和所处平台的限制,盲目地使用 Goroutines 将会导致程序运行缓慢,进而伤害整个系统的响应和性能。 每个程序、系统和平...

  • Caprice: Golang版的高性能实时全文检索引擎(segment 设计篇)

    承接前文Caprice: Golang版的高性能实时全文检索引擎(实现篇),本文是系列文章的第四篇。系列文章地址如下:一. 如何构建实时全文检索引擎二. Caprice: Golang版的高性能实时全文检索引擎三. Caprice: Golang版的高性能实时全文检索引擎(实现篇)本篇主要介绍segment的设计。我们知道FST被认为是构建高效的倒排索引的核心,但它的缺点是修改不易,因此为了克服这个问题,包括lucene在内的检索引擎,在使用FST的时候几乎都选择了segment这个概念去处理这...

  • Golang 编译原理 计算器(通俗易懂)

    本文不需要你掌握任何编译原理的知识。 只需要看懂简单的golang语言即可, 完整的代码示例在GIT 听到编译原理,就觉得很高大上。记得上大学时,这门课要记忆一些BNF,LEX,AST,CFG这些有的没的。一个听不懂,二个没兴趣。随着使用了几门语言之后,也尝试用编译原理的基本知识写过一个sql转es的工具之后。发现其实了解一点点编译原理的知识,能够提高我们的生产效率,做出一些很酷的小工具来。 本文将用golang和编译原理的基本技术实现一个计算器。虽然功能简单,网上也有很多人做过类似事情,但这篇...

  • golang中context包解读

    前瞻 context 包困扰我好久,之前在 watch etcd 的时候首次上手使用这个包,当时并不理解这个包的作用,只知道可以用来关闭 watch , 后来被大牛吐槽了,决定深入探究一番。 简介 golang 中的创建一个新的 goroutine , 并不会返回像c语言类似的pid,所有我们不能从外部杀死某个goroutine,所有我就得让它自己结束,之前我们用 channel + select 的方式,来解决这个问题,但是有些场景实现起来比较麻烦,例如由一个请求衍生出的各个 goroutin...

  • 几个常见的数据结构的实现

    https://github.com/tommyliu1114/LStructure

  • golang 重构博客统计服务

    欢迎关注楼主与他的小伙伴们的小站,每周分享一些技术文章,让我们在技术上一起成长------> 戳这里,欢迎光临小站 -_- 作为一个后端开发,在docker,etcd,k8s等新技术不断涌现的今天,其背后的功臣golang在语言排行榜上持续走高,因此楼主也就开了这次使用golang自己开发的基础功能的二次装逼之旅。 源于Spring Boot 感兴趣的小伙伴可以看看楼主的上一篇,基于Spring Boot实现的功能,请移步使用Spring Boot实现博客统计服务 实现redis存储逻辑 选择r...

  • Go Web开发基础

    1.Abstract 在学习web开发的过程中会遇到很多困难,因此写一篇类似综述类的文章。作为路线图,从web开发要素的index出发,来介绍golang开发的学习流程以及Example代码。在描述中多是使用代码来描述使用方法不会做过多的说明。最后可以方便地copy代码来实现自己的需求。 本文适应对象: 对web开发有一定经验的人能够灵活使用ajax的人(至少懂得前后分离)golang web 开发有一定了解,至少略读过一些golang web开发的书籍 看完本文之后您会收获: golang w...

  • Golang 微框架 Gin 简介

    所谓框架 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。 曾经我以为Python世界里的框架已经够多了,后来发现相比golang简直小巫见大巫。golang提供的net/http库已经很好了,对于http的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架。既然构造框架的门...

  • golang flag包

    go flag 包用来解析命令行参数,通过一个简单的例子来了解下 package main import ( "flag" "fmt" ) func main() { //参数1:命令行传递参数的名称 参数2:默认值 参数3:参数的说明 username := flag.String("name", "", "Input your name") //注意 username 是string 的指针 type: *string // 在例如: // var ip = flag.Int("flagna...

  • Golang 内存管理源码剖析

    Golang 的内存管理基于 tcmalloc,可以说起点挺高的。但是 Golang 在实现的时候还做了很多优化,我们下面通过源码来看一下 Golang 的内存管理实现。下面的源码分析基于 go1.8rc3。 1.tcmalloc 介绍 关于 tcmalloc 可以参考这篇文章 tcmalloc 介绍,原始论文可以参考 TCMalloc : Thread-Caching Malloc。 2. Golang 内存管理 0. 准备知识 这里先简单介绍一下 Golang 运行调度。在 Golang 里...

  • Golang 微服务教程(三)

    译文链接:wuYin/blog原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。 本文完整代码:GitHub 在上节中,我们使用 go-micro 重新实现了微服务并进行了 Docker 化,但是每个微服务都要单独维护自己的 Makefile 未免过于繁琐。本节将学习 docker-compose 来统一管理和部署微服务,引入第三个微服务 user-service 并进行存储数据。 MongoDB 与 Postgres 微服务的数据存储 到目前为止,c...

  • Golang 微服务教程(四)

    译文链接:wuYin/blog原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。 本文完整代码:GitHub 上节引入 user-service 微服务并在 Postgres 中存储了用户数据,包括明文密码。本节将对密码进行安全的加密处理,并使用唯一的 token 来在各微服务之间识别用户。 在开始之前,需要手动运行数据库容器: $ docker run -d -p 5432:5432 postgres $ docker run -d -p 27017...

  • Golang 微服务教程(五)

    译文链接:wuYin/blog原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。 本文完整代码:GitHub 在上节中,我们使用 JWT 在微服务之间进行了用户的认证。在本节中,我们将使用 go-micro 结合 nats 插件来完成用户创建事件的发布与订阅。 正如前几节所说,go-micro 是一个拔插式的框架,能与很多优秀的开源软件进行对接,可参考插件列表:go-plugins,可看到已支持很多优秀组件。 事件驱动 概念 事件驱动架构 理解起来比较...

  • Golang 微服务教程(六)

    译文链接:wuYin/blog原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。 本文完整代码:GitHub 在上节中我们使用 go-micro 搭建了微服务的事件驱动架构。本节将揭晓从 web 客户端的角度出发如何与微服务进行调用交互。 微服务与 web 端交互 参考 go-micro 文档,可看到 go-micro 实现了为 web 客户端代理请求 RPC 方法的机制。 内部调用 微服务 A 调用微服务 B 的方法,需要先实例化再调用:bClien...

  • 用Go构建区块链——1.基本原型

    本篇开始进入"用Go构建区块链"系列,主要对原文进行翻译。本篇对应原文如下: Building Blockchain in Go. Part 1: Basic Prototype 话不多说,开始进入正文。 1、介绍 区块链是21世纪最具革命性的技术之一,它仍在逐步发展中,并且其潜力还未被充分认识。本质上,区块链只是一个分布式数据库而已。但是,它的独特之处在于它不是一个私有的数据库,而是一个公共的,即每个使用它的人都拥有它的全部或部分副本。只有得到其他数据库管理员的同意,新的记录才能被加入。正因为...