Go
zl1zl2zl3
这个作者很懒,什么都没留下…
展开
-
云原生时代,Java还是Go?
Java曾经著名的座右铭:"一次编写,到处运行",已经很过时了,因为现在我们只想在容器里运行代码。在容器里,一个 "Just in time "的编译器意义不大。出于这个原因,可能为了更好地适应云计算,Java生态系统正处于转型之中。Oracle 的GraalVm允许将字节码编译成Linux可执行文件(ELF),而Rad Heat的Quarkus以及其他框架,则立志让响应式服务这件事变得更简单。Quarkus以Netty和Vertx.x为核心,可以用来构建非常高效的响应式Web服务。Java编译成转载 2020-07-16 09:22:14 · 804 阅读 · 1 评论 -
理解GO CONTEXT机制
1 什么是Context最近在公司分析gRPC源码,proto文件生成的代码,接口函数第一个参数统一是ctx context.Context接口,公司不少同事都不了解这样设计的出发点是什么,其实我也不了解其背后的原理。今天趁着妮妲台风妹子正面登陆深圳,全市停工、停课、停业,在家休息找了一些资料研究把玩一把。Context通常被译作上下文,它是一个比较抽象的概念。在公司技术讨论时也经常会提到...转载 2018-11-02 08:39:47 · 1359 阅读 · 0 评论 -
Go 语言运行时环境变量快速导览
原文: http://dave.cheney.net/2015/11/29/a-whirlwind-tour-of-gos-runtime-environment-variablesGo 语言运行时环境变量快速导览Go Runtime除了提供:GC, goroutine调度, 定时器,network polling等服务外, 还提供其它一些工具设施,用于开启额外的调试输出, 或是改变...转载 2018-11-02 08:39:04 · 1111 阅读 · 0 评论 -
go build和go install的区别
go build通过go build加上要编译的Go源文件名,我们即可得到一个可执行文件,默认情况下这个文件的名字为源文件名字去掉.go后缀。$ go build hello.go$ lshello hello.go当然我们也 可以通过-o选项来指定其他名字:$ go build -o mygo hello.go$ lsmygo hello.go如果我们在go-ex...原创 2018-11-01 09:58:19 · 1581 阅读 · 0 评论 -
Windows 平台下 Go 语言的安装和环境变量设置
1. Go 语言 SDK 安装包下载和安装最新稳定版 1.5.3 安装包 go1.5.3.windows-amd64.msi下载地址 https://golang.org/dl/,大小约 69 MB(作者上传了一份该版本安装包到 CSDN 资源,嫌国外网速慢可以去下载:http://download.csdn.net/detail/defonds/9408855),下载之后直接运行安装,安装路...转载 2018-10-24 17:27:23 · 12322 阅读 · 0 评论 -
GO标准库—命令行参数解析FLAG
评论有人提到没有例子,不知道讲的是什么。因此,为了大家能够更好地理解,特意加了一个示例。其实本文更多讲解的是 flag 的实现原理,加上示例之后,就更好地知道怎么使用了。建议阅读 《Go语言标准库》一书的对应章节:flag – 命令行参数解析。在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用。如果命令行参数纯...转载 2018-10-31 10:55:34 · 2483 阅读 · 0 评论 -
go build命令详解
go help build构建编译由导入路径命名的包,以及它们的依赖关系,但它不会安装结果.使用go build [-o 输出名] [-i] [编译标记] [包名]如果参数为***.go文件或文件列表,则编译为一个个单独的包。当编译单个main包(文件),则生成可执行文件。当编译单个或多个包非主包时,只构建编译包,但丢弃生成的对象(.a),仅用作检查包可以构建。当编译包...原创 2018-10-25 08:59:29 · 30011 阅读 · 2 评论 -
Go语言命令行库urfave/cli简介
很多用Go写的命令行程序都用了urfave/cli这个库,包括geth,有必要简单了解一下。用C写过命令行程序的人应该都不陌生,我们需要根据argc/argv一个个地解析命令行参数,调用不同的函数,最后还要写一个usage()函数用于打印帮助信息。urfave/cli把这个过程做了一下封装,抽象出flag/command/subcommand这些模块,用户只需要提供一些模块的配置,参数的解析和...转载 2018-10-22 10:52:29 · 5729 阅读 · 2 评论 -
使用 golang 调用consul api 接口,注册user-tomcat服务
1,关于consuldubbo的注册中心是zookeeper,redis。 motan的注册中心是zookeeper,consul。 kubernetes的注册中心是 etcd。 使用consul的好处是服务发现啥的都支持了。 可以使用域名进行负载均衡。 也是一个不错的 Server-Side Discovery Pattern 。2,启动consul服务,调用接口首先要...转载 2018-07-10 15:09:01 · 7417 阅读 · 0 评论 -
golang包管理解决之道——go modules初探
golang的包管理是一直是为人诟病之处,从golang1.5引入的vendor机制,到准官方工具dep,目前为止还没一个简便的解决方案。不过现在go modules随着golang1.11的发布而和我们见面了,这是官方提倡的新的包管理,乃至项目管理机制,可以不再需要GOPATH的存在。 go modules的初始化现在modules机制仍在早期阶段,所以golang提供了一个环境...转载 2018-10-19 13:36:39 · 3493 阅读 · 0 评论 -
理解Go 1.5 vendor
Go 1.5中(目前最新版本go1.5beta3)加入了一个experimental feature: vendor/。这个feature不是Go 1.5的正式功能,但却是Go Authors们在解决Go被外界诟病的包依赖管理的道路上的一次重要尝试。目前关于Go vendor机制的资料有限,主要的包括如下几个:1、Russ Cox在Golang-dev group上的一个名 为"proposa...转载 2018-11-09 09:14:41 · 476 阅读 · 0 评论 -
初窥Go module
目录一. 建立试验环境二. 传统Go构建以及包依赖管理的回顾三. go modules定义、experiment开关以及“依赖管理”的工作模式四. go modules的依赖版本选择五. go modules与vendor六. 小结自2007年“三巨头(Robert Griesemer, Rob Pike, Ken Thompson)”提出设计和实现Go语言以来,Go语...转载 2018-11-09 09:16:11 · 3900 阅读 · 0 评论 -
深入理解Golang包导入
Golang使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。Golang中包的定义和使用看起来十分简单:通过package关键字定义包:package xxx使用import关键字,导入要使用的标准库包或第三方依赖包。 ...转载 2018-11-13 10:23:55 · 881 阅读 · 0 评论 -
Go会接替Java,成为下一个企业级编程语言吗?
策划编辑|Natalie作者|Kevin Goslar译者|Sambodhi编辑|Debra本文最初发布于 KACKERNOON 博客,经原作者 Kevin Goslar 授权由 InfoQ 中文站翻译并分享。AI 前线导读:Go 是 Google 开发的一种编程语言,在过去的几年里取得了很大的成功。现代的云端、网络和 DevOps 软件的很大一部分都是用 Go 编写的...转载 2019-04-17 20:46:12 · 2303 阅读 · 0 评论 -
为什么很多公司转型Go语言开发?Go语言能做什么
来源:http://t.cn/EXZCk881、为什么选择Go语言选择Go语言的原因可能会有很多,关于Go语言的特性、优势等,我们在之前的文档中也已经介绍了很多了。但是最主要的原因,应该是基于以下两方面的考虑:执行性能缩短API的响应时长,解决批量请求访问超时的问题。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现模式下...转载 2019-04-22 09:48:21 · 936 阅读 · 0 评论 -
为什么很多公司都转型go语言开发?Go语言能做什么
一、我们为什么选择Go语言选择Go语言的原因可能会有很多,关于Go语言的特性、优势等,我们在之前的文档中也已经介绍了很多了。但是最主要的原因,应该是基于以下两方面的考虑:执行性能缩短API的响应时长,解决批量请求访问超时的问题。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上...转载 2019-04-07 14:19:48 · 13170 阅读 · 0 评论 -
今日头条 Go 建千亿级微服务的实践
来源:https://zhuanlan.zhihu.com/p/26695984今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上。微服务数量超过100个,高峰 QPS 超过700万,日处理请求量超过3000亿,是业内最大规模的 Go 应用。Go 构建微服务的历程在2015年之前,头条的主要编程语言是 Python 以及部分 C++。随着业务和流量的快速增长,服务端...转载 2019-04-04 20:31:48 · 770 阅读 · 0 评论 -
再见,Python。你好,Go 语言
关于这篇文章的标题,我要解释一下。1、Python 和 Go 都是很好的编程语言,不过各擅胜场。Python 更成熟,库多,适合脚本操作和数据分析,在人工智能领域一家独大。Go 比较年轻,有活力,更擅长并发编程和高可用场景。2、极客时间目前更多使用了 Go 语言构建后端服务,未来数据分析领域会采用 Python。3、这篇文章的作者是 Jake Wilson,现任 SketchUp we...转载 2019-02-23 15:46:59 · 313 阅读 · 1 评论 -
使用Go语言从零编写PoS区块链
导语:本文作者在前几篇文章中展示了一个简单的区块链,包括生成块,验证数据,广播通信等。本文继续前文,介绍了PoS算法的基本原理,并且用golang实现了简单的PoS区块链。译者: ChainGod(孙飞)原文链接: http://chaingod.io/article/16在本系列前三篇文章中[1][2][3],我们向大家展示了如何通过精炼的Go代码实现一个简单的区块链。包括生成...转载 2018-12-01 21:10:21 · 497 阅读 · 0 评论 -
Go包导入与Java的差别
闲暇时翻阅了近期下载到的电子书《Go in Practice》 ,看到1.2.4 Package Management一节中的代码Demo,感觉作者对Go package导入的说法似乎不够精确:“Packages are imported by their name”(后续的说明将解释不精确的原因)。联想到前几天遇到的一个Java包导入的问题,让我隐约地感觉Java程序员很容易将两种语言的Pack...转载 2018-11-17 13:56:13 · 276 阅读 · 0 评论 -
追求极简:Docker镜像构建演化史
// Dockerfile.target.alpine自从2013年dotCloud公司(现已改名为Docker Inc)发布Docker容器技术以来,到目前为止已经有五年多的时间了。这期间Docker技术飞速发展,并催生出一个生机勃勃的、以轻量级容器技术为基础的庞大的容器平台生态圈。作为Docker三大核心技术之一的镜像技术在Docker的快速发展之路上可谓功不可没:镜像让容器真正插上了翅...转载 2018-11-13 11:32:18 · 313 阅读 · 0 评论 -
golang 实现HTTP代理和反向代理
代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端。下图是 《HTTP 权威指南》一书中给出的图例,可以很清晰地说明这一流程:代理的功能有很多,事实上整个互联网到处都充斥着代理服务器。如果所有的 HTTP 访问都是客户端和服务器端直接进行的话,我们的网络不仅会变得缓慢,而且性能会大打折扣。代理服务器根据不同的配置和使用,可能会有不同的功能,这些...转载 2018-10-18 17:16:13 · 9467 阅读 · 1 评论 -
GO 语言websocket编程
GO提供原生的websocket API,使用时go get然后引用即可golang.org/x/net/websocket使用起来也很方便,直接上代码吧。一个echo server的代码package mainimport( "golang.org/x/net/websocket" "fmt" "net/http" "flag")type W...转载 2018-09-29 20:54:18 · 2119 阅读 · 1 评论 -
go语言的命令行库
命令行应用通常很小,程序猿们也不喜欢为它编写注释。所以一些额外的工作,如解析参数有个合理的库来帮忙做就好了。https://github.com/urfave/cli 这个项目因此而生。安装:go get github.com/urfave/cli以下的例子均来自官网:(例1)package mainimport ( "os" "github.com/urfave...转载 2017-08-04 15:39:38 · 530 阅读 · 1 评论 -
go初学者安装echo框架
一、echo简介Go语言中,web框架非常多,但是echo绝对是性能非常好的一种,下面是各种go框架的性能对比中国有这个框架的翻译版本,不是非常全,但是也基本上差不多了,如果英文基础好的话可以查阅英文版 - 点击打开链接二、安装因为golang.org在我们伟大的天朝无法访问的原因,所以按照官网上面的介绍是万万不可能安装成功的,这里我来把我之转载 2017-07-31 14:32:54 · 7314 阅读 · 0 评论 -
go标准命令详解0.2 go install
搬运自github赫林的go_command_tutorial,绝对干货,感谢作者。0.2 go install命令Go install用于编译并安装指定的代码包及它们的依赖包。当指定的代码包的依赖包还没有被编译和安装时,该命令会先去处理依赖包。与go build命令一样,传给go install命令的代码包参数,应该以导入路径的形式提供。并且,go build命令的绝大多数标记也都可以用...转载 2017-05-22 10:03:11 · 570 阅读 · 0 评论 -
go标准命令详解0.1 go build
搬运自github赫林的go_command_tutorial,绝对干货,感谢作者。为了让讲解更具关联性,也为了让读者能够更容易的理解这些命令和工具,本教程并不会按照这些命令的字典顺序讲解它们,而会按照我们在实际开发过程中通常的使用顺序以及它们的重要程度的顺序推进说明。 我们先从Go build命令开始。0.1 go buildgo build命令用来编译指定的代码转载 2017-05-22 09:28:48 · 540 阅读 · 0 评论 -
golang导包
被坑的体无完肤,特此纪念,不是新手不要看包结构如图接下来我们要在main.Go中调用myprint2.go中的方法myprint2.go[plain] view plain copy print?package test import "fmt" func MyPrint2() { f转载 2017-05-22 09:24:13 · 716 阅读 · 0 评论 -
GOPATH与工作空间
前面我们在安装Go的时候看到需要设置GOPATH变量,Go从1.1版本到1.7必须设置这个变量,而且不能和Go的安装目录一样,这个目录用来存放Go源码,Go的可运行文件,以及相应的编译之后的包文件。所以这个目录下面有三个子目录:src、bin、pkg从go 1.8开始,GOPATH环境变量现在有一个默认值,如果它没有被设置。 它在Unix上默认为$HOME/go,在Windows上默认为%US...转载 2017-05-23 16:42:05 · 618 阅读 · 0 评论 -
Go语言TCP网络编程(详细)
一、序言 Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp so...转载 2017-05-23 14:35:13 · 1289 阅读 · 0 评论 -
Golang精编100题
能力模型级别 模型 初级 primary 熟悉基本语法,能够看懂代码的意图; 在他人指导下能够完成用户故事的开发,编写的代码符合CleanCode规范; 中级 intermediate 能够独立完成用户故事的开发和测试; 能够嗅出代码的坏味道,并知道如何重构达成目标; 高级 senior 能够开发出高质量高性能的代码; 能...转载 2017-05-23 10:56:14 · 2038 阅读 · 0 评论 -
go get安装第三方包的前提条件和步骤
首先,你要找到第三方类包所在的网址, 例如: http://github.com/Go-sql-driver/MySQL分为命令行自动安装 和 手动下载 然后安装。( 欢迎加入go语言群: 218160862 ,群内有实践)一、通过 go get github.com/go-sql-driver/mysql 命令安装第三方类库 要启用 go get github.com/go-s...转载 2017-08-04 16:30:51 · 1907 阅读 · 0 评论 -
Go实战--也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)
生命不止,继续 go go go !!!接下来,想跟大家一起分享一些golang语言成熟的、知名度比较高的web框架。我们从iris web框架开始,开始呢,我们先不去计较和比较谁的速度快,谁的性能好,让我们先学习如何使用,积累到了一定程度后,再去进行测试各个框架的速度性能。ris自称是Go语言中所有Web框架最快的,它的特点如下:1.聚焦高性能 2.健壮的静态路由支持和通配符子...转载 2018-04-02 10:00:26 · 714 阅读 · 0 评论 -
用 golang 1.11 module 做项目版本管理
go 1.11 有了对模块的实验性支持,大部分的子命令都知道如何处理一个模块,比如 run build install get list mod子命令,第三方工具可能会支持的晚一些。到 go 1.12 会删除对 GOPATH的支持, go get命令也会变成只能获取模块,不能像现在这样直接获取一个裸包。可以用环境变量 GO111MODULE开启或关闭模块支持,它有三个可选值: off、 ...转载 2018-09-20 08:33:28 · 4967 阅读 · 3 评论 -
Go语言入门——dep入门
本文出现了大量maven的内容,更适合java程序员阅读,如果你的语言做依赖管理的方案与maven差异很大,可能在有些地方会不理解 从很久之前go语言在依赖解决和管理方面方案的匮乏就被不少人诟病。光指望go get指令,很多事办不成。我也不清楚从什么时候开始,dep,这个官方的解决方案开始被推广了。从说明上看,不会早于go 1.8,从github的源代码上看,至少开源不会超过1年 官方...转载 2018-06-06 14:05:40 · 3759 阅读 · 0 评论 -
GO select用法详解
golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。 在执行select语句的时候,运行时系统会自上而下地判断每个case中的发送或接收操作是否可以被立即执行(立即执行:意思是当前Goroutine不会因此操作而被阻塞)select的用法与switch非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。与switch语句可以...转载 2018-05-24 12:32:36 · 2564 阅读 · 0 评论 -
gorm增删改查总结
gorm在创建表时使用CreateTable方法进行处理,其参数可以是结构体变量的地址形式,也可以是结构体的地址形式。例如:var t Tecentdb.CreateTable(&t)或者db.CreateTable(&Tecent{})。即使类的地址形式中初始化了一些字段,在创建表之后也不会自动添加到表中。如果表已经创建并且表中有数据,再次执行该方法不会再次创建表也不...转载 2018-05-04 16:49:54 · 45004 阅读 · 1 评论 -
golang orm 框架之 gorm
最近在想给这个小站增加点赞和评论功能,第三方系统又有各种限制,就想自己弄个后端,实现类似的功能,对于个人来说,数据量不是很大,单机的 mysql 足够存下所有数据,mysql 作为底层存储是个不错的选择之前在公司是直接用的 github.com/go-sql-driver/mysql 访问数据库都是直接用写 sql,取出结果然后自己拼成对象,使用上面不是很方便,可读性也不好。想起之前研究 ph...转载 2018-04-03 13:52:09 · 3703 阅读 · 1 评论 -
Go实战--也许最快的Go语言Web框架kataras/iris初识三(Redis、leveldb、BoltDB)
生命不止,继续 go go go !!!之前介绍了iris框架,介绍了如何使用basic认证、Markdown、YAML、Json等: Go实战–也许最快的Go语言Web框架kataras/iris初识(basic认证、Markdown、YAML、Json)介绍了如何使用TOML、Cache、Cookie等: Go实战–也许最快的Go语言Web框架kataras/iris初转载 2018-04-02 10:43:33 · 1568 阅读 · 0 评论 -
Go语言学习之encoding/json包
json json大家都不陌生: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。encoding/...转载 2018-04-02 14:46:04 · 5176 阅读 · 0 评论