Go语言中文网 为您找到相关结果 1366

如何使用 Golang 日志监控你的应用程序?

你是否厌烦了那些使用复杂语言编写的、难以部署的、总是在不停构建的解决方案?Golang 是解决这些问题的好方法,它和 C 语言一样快,又和 Python 一样简单。但是你是如何使用 Golang 日志监控你的应用程序的呢?Golang 没有异常,只有错误。因此你的第一印象可能就是开发 Golang 日志策略并不是一件简单的事情。不支持异常事实上并不是什么问题,异常在很多编程语言中已经失去了其异常性:它们过于被滥用以至于它们的作用都被忽视了。在进一步深入之前,我们首先会介绍 Golang 日志的基础,并讨论 Golang 日志标准、元数据意义、以及最小化 Golang 日志对性能的影响。通过日志,你可以追踪用户在你应用中的活动,快速识别你项目中失效的组件,并监控总体性能以及用户体验。I. Go...阅读全文

博文 2018-12-24 18:31:35 u014389734

Golang sync.Once使用

package main import ( "fmt" "sync" ) func main() { var count int increment := func() { count++ } var once sync.Once var increments sync.WaitGroup increments.Add(100) for i := 0; i < 100; i++ { go func() { defer increments.Done() once.Do(increment) }() } increments.Wait() fmt.Printf("Count is %d\n", count) } 程序输出如下, image.pn...阅读全文

博文 2019-06-08 17:32:39 FredricZhu

Go依赖管理工具dep

安装: Mac:brew install dep Linux curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh 验证 终端输入dep ➜ ~ dep Dep is a tool for managing dependencies for Go projects Usage: "dep [command]" Commands: init Set up a new Go project, or migrate an existing one status Report the status of the project's dependencies ensure Ensure a dependency...阅读全文

博文 2019-11-17 02:32:42 更多精彩内容有,总比没有要好:Go依赖管理工具depfreelanggolang 官方依赖管理工具 dep 使用和持续集成木猫尾巴时间NAV辞典旅游心得:我在旅行途中,你在哪?污大师2018.5.11囧man

go web编程——session管理机制设计与实现

生Go语言没有实现session管理机制,所以如果使用原生Go语言进行web编程,我们需要自己进行session管理机制的设计与实现,本文将就此进行详细介绍,并实现一个简单的session管理机制。session信息可以使用内存、文件或数据库等方式进行存储,考虑到对不同存储方式的兼容,我们设计的session管理机制应该能很方便的在不同存储方式之间进行切换。所以,session管理机制可以分为两部分内容:session管理器和session存储器,session管理器主要负责多种存储方式的共同操作部分,例如,cookie的读取与设置、session ID的生成,以及一些共同需要的参数设置等等。session管理器结构可设置如下://session管理器 type SessionManager...阅读全文

博文 2019-12-19 23:21:56 JetWu

Golang基础知识-概念篇

1、go中使用struct模拟类和对象 type Bike struct{ color string //首字母小写表示属性私有 Name string //首字母大些表示属性公有 } //首字母大些表示方法对外公开 func (b *Bike) Move() string{ return b.color } 2.三大基本特性 封装:首字母大小写代表公私有权限 继承:使用内嵌的方式,对结构体struct进行组合 多态:使用interface实现 3、五大基本原则 1、单一功能原则(struct) 2、开闭原则(扩展是开放,修改是关闭的) 3、里氏替换原则(子类可以替换父类,而程序逻辑不变) 4、接口隔离原则 5、依赖反转原则(对接口进行开发...阅读全文

Golang 中错误与异常需要重新认识

如何进行错误处理,这是一个Go程序员之间,特别是一些新的Go程序员,会经常讨论的问题.讨论到最后往往由于以下代码的多次出现而变成了抱怨. if err != nil { return err } 我们最近扫描了我们能找到的开源项目,这段代码只在一页或者两页中出现了一次,是不是比你想象的少很多.然而,必须到处写 if err != nuil的感觉依然存在 , 那一定是哪里出了问题,而且明显问题出在Go自己身上. 不幸的是,这是一个误解,而且很容易纠正.或许一个新的Go程序员想问 “怎么会只有一个错误处理?”,那么学习这种模式,保持它.在其它语言中可以使用try-catch或者其他类似机制去处理错误.因此程序员认为,当我需要在其他语言中使用try-catch的时候,我只需要在Go写if err ...阅读全文

Hyperledger Fabric学习笔记01-系统逻辑架构

本系列学习笔记以阅读《深度探索区块链:Hyperledger Fabric技术与应用》一书的笔记为蓝本,故默认Hyperledger Fabric 1.0,期间可能会追加最新版本的内容,到时会在里面注明。这是一个边看边写的系列,有兴趣的也可以先自行购买此书学习。 Hyperledger Fabric 1.0是一种通用的区块链技术,其设计目的是利用一些成熟的技术实现分布式账本技术(Distributed Ledger Techonlogy DLT)。 超级账本采用模块化架构设计,复用通用的功能模块和接口。 模块化的方法带来了可扩展性、灵活性等优势,会减少模块修改、升级带来的影响,能很好地利用微服务实现区块链应用系统的开发和部署。 Hyperledger Fabric 1.0设计的几个特点: 特...阅读全文

博文 2019-03-21 01:34:41 蜜汁炒酸奶

Delve代码分析笔记(3)——config

Delve程序运行起来以后,首先就会加载和解析配置文件: func New() *cobra.Command { // Config setup and load. conf = config.LoadConfig() ...... } Delve的配置文件位于用户home目录下的.dlv文件夹下,文件名是config.yml。例如,如果是root用户,则配置文件的全路径是:/root/.dlv/config.yml。目前配置文件只支持为命令指定别名。 config包只包含一个config.go文件。代码也比较简单,归纳起来就是:如果用户没有创建配置文件,则替用户创建一个(里面没有实质内容),然后读取配置文件内容,并把Config结构体(定义如下)返回给调用者。 // Config defi...阅读全文

1.安装Ontology

成功编译ontology需要以下准备: Golang版本在1.9及以上 安装第三方包管理工具glide 正确的Go语言开发环境 Golang所支持的操作系统 部署|获取ontology 从源码获取 克隆ontology仓库到 $GOPATH/src/github.com/ontio 目录 $ git clone https://github.com/ontio/ontology.git 或者 $ go get github.com/ontio/ontology 用第三方包管理工具glide拉取依赖库 $ cd $GOPATH/src/github.com/ontio/ontology $ glide install 用make编译源码 $ make 成功编译后会生成两个可以执行程序 onto...阅读全文

博文 2018-06-22 11:34:40 stevenlife

[译]使用Go Cloud的Wire进行编译时依赖注入

2018年10月9日 概述 Go团队最近公布了用于开放云开发的可移植云API和工具,开源项目Go Cloud 。 这篇文章详细介绍了Wire,一个随Go Cloud提供的依赖注入工具。 Wire解决了什么问题? 依赖注入是一种编写可伸缩、低耦合代码的标准技术。因为依赖注入显式地为组件提供他们需要工作的所有依赖关系。 在Go中,这通常采用将依赖项传递给构造函数的形式: // NewUserStore返回一个使用cfg和db作为依赖项的UserStore。 func NewUserStore(cfg *Config, db *mysql.DB) (*UserStore, error) {...} 复制代码这种技术在小规模下工作得很好,但是较大的应用程序会存在一个复杂的依赖图。这导致了一大块依赖于...阅读全文

博文 2018-10-17 10:03:20 一桶冷水

Golang包管理工具之govendor的使用

本文个人博客地址为:http://www.huweihuang.com/article/golang/govendor-usage/ 本文个人博客地址为:https://huweihuang.net/article/golang/govendor-usage/ 更多golang包管理工具参考 golang包管理工具之glide的使用1. govendor简介golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下。常用的依赖包管理工具有godep,govendor等,在Golang1.5之后,Go提供了 GO15VENDOREXPERIMENT 环境变量(Go 1.6版本默认...阅读全文

Go init函数

init函数会在main函数执行之前进行执行、init用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作。 如果一个包被多个地方引用,那么只有在这个包第一次被引用时,才会执行这个包里边的init函数,其他地方对包的再次引用,这个包里边的init函数不会被执行。 init 函数在包级别被定义,主要用于: 初始化那些不能被初始化表达式完成初始化的变量 检查或者修复程序的状态 注册 仅执行一次的计算 更多其它场合 main.go中的内容是: package main import ( "pk1" "pk2" ) func main() { pk1.Pk1Demo() pk2.Pk2Demo() } pk1目录中的de1.go package pk1 import ( "fmt" ) f...阅读全文

博文 2019-04-08 20:35:13 听砜

Go依赖包管理工具,3分钟掌握govendor

网上写govendor的博文不少,但从安装到介绍,总看上去有些沉重,下面奉上一篇简单的教程,3分钟入门。 第1部分 简明教程 2步走,3分钟轻松搞定Go项目的依赖。 第1步 安装 go get -u github.com/kardianos/govendor 第2步 为项目增加依赖 进入到项目目录 使用govendor init命令初始化项目的依赖 运行govendor fetch命令增加依赖 打开./vendor/vendor.json查看依赖的包 步骤: cd path/to/project govendor init govendor fetch project_url_with_out_http cat vendor/vendor.json 举个例子:项目awesome依赖githu...阅读全文

博文 2018-11-17 01:34:39 大彬

Go语言实战笔记(二十三)| Go 调试

《Go语言实战》读书笔记,未完待续,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续笔记。觉得有帮助的话,顺手分享到朋友圈吧,感谢支持。 对于任何程序员来说,调试程序是必备的技能。当我们的开发好的程序不符合我们的预期时,就需要我们通过调试它找到根本的原因,然后才可以有针对性的解决它。 调试是一种技能,不限于我们说的debug,这只是其中的一种,这是可以打断点的调试,除此之外,还有打印输出、日志记录、单元测试,这都可以称之为调试程序的手段。 打印输出打印输出是一种比较传统的调试手段,我们可以把我们需要了解的变量值,执行的步骤等打印出来,来证明我们的猜测,以便解决问题。 123456789func min(a,b int) int {...阅读全文

博文 2017-08-28 07:06:44 飞雪无情

Go基础学习记录 - 编写Web应用程序 - 安全验证

载Go基础学习记录 - 编写Web应用程序 - 安全验证 安全验证 前面加了很多功能,但是程序存在严重的安全漏洞,用户可以访问在服务器上读/写的任意路径。为了缓解这种情况,我们可以编写一个函数来使用正则表达式验证标题。首先,将"regexp"添加到导入列表中。然后我们可以创建一个全局变量来存储我们的验证表达式: var validPath = regexp.MustCompile("^/(edit|save|view)/([a-zA-Z0-9]+)$") 函数regexp.MustCompile将解析并编译正则表达式,并返回一个regexp.Regexp。MustCompile与Compile的区别在于,如果表达式编译失败,它将会出现异常,而Compile会将错误作为第二个参数返回。现在,让...阅读全文

博文 2018-08-10 23:34:58 DurbanZhang

Go基础编程:Go语言介绍

本文转自:https://www.zhihu.com/question/21409296 Go语言是什么 2009年11月10日,Go语言正式成为开源编程语言家庭的一员。 Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 开发人员在为项目选择语言时,不得不在快速开发和性能之间做出选择。C和C++这类语言提供了很快的执行速度,而 Ruby 和 Python 这类语言则擅长快速开发。Go语言在这两者间架起了桥梁,不仅提供了高性能的语言,同时也让开发更快速。 Go语言优势 可直接编译成机器码,不依赖其他库,glibc的版本...阅读全文

博文 2019-04-26 23:32:38 tennysonsky

兄弟连Go语言培训带你实战GO案例(44)Go 可变长参数列表

兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌名师团队精心打造,历时半年时间共同研发而出。 Go可变长参数列表 支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表 的函数。 packagemain import"fmt" //这个函数可以传入任意数量的整型参数 funcsum(nums...int){ fmt.Print(nums,"") total:=0 for_,num:=rangenums{ total+=num } fmt.Println(total) } funcmain(){ //支持可变长参数...阅读全文

[译] 使用 Go 和 ReactJS 构建聊天系统 (六)

本节完整代码:GitHub 本文是关于使用 ReactJS 和 Go 构建聊天应用程序的系列文章的第 6 部分。你可以在这里找到第 5 部分 - 优化前端 在本节中,我们将专注于将 Docker 添加到后端应用程序中。 为什么要这么做呢?在我们研究诸如身份验证,负载均衡和部署之类的问题前,使用容器技术部署应用程序是个标准的做法。 为什么用 Docker 如果这是你第一次听说 Docker 容器化技术,那么你可能会质疑使用它的原因。 对我来说,其中一个主要原因是它让部署变得更加容易。你可以将基于 docker 的应用程序部署到支持 Docker 的任何服务器或平台。 这意味着,无论你在何处部署,都可以使用简单的命令启动应用程序。 不仅如此,它还解决了 “在我的机器上运行好好的” 这个问题,因为...阅读全文

博文 2019-08-03 11:34:17 咔叽咔叽

进程管理工具 Supervisor

要想在终端后台常驻进程,首先想到的是在命令后加 & 符号,来达到隐藏程序在后台的目的,尽管看起来进程已经在后台运行了,实际上终端会话关闭时进程还是会被 kill 掉,这种问题一般是采用搭配 nohup 命令来解决的,nohup 作用是忽略 SIGHUP 信号,而会话关闭时正好发送了该信号给会话内所有运行程序,简而言之,nohup 命令搭配 & 不仅可以在后台运行,还不受会话关闭的影响。 $ nohup /bin/cat & 那么问题来了,虽然做到了后台运行,也避免了挂断操作带来的影响,但是它避免不了常驻进程自己出现问题,一旦它因自身异常终止了进程,这对黄金搭档就无力回天了。那怎么才能把挂了的常驻进程拉起来呢?这就是我们要讲的主题 Supervisor。 Supervisor 介绍 Super...阅读全文

Golang桥接模式将多个chan桥接成一个chan

bridges/bridges.go // bridges package bridges type BridgeO struct { } func NewBridge() *BridgeO { bridgeO := &BridgeO{} return bridgeO } func (bridgeO *BridgeO) OrDone( done, c <-chan interface{}, ) <-chan interface{} { valStream := make(chan interface{}) go func() { defer close(valStream) for { select { case <-done: return case v, ok := <-c: if ok...阅读全文

博文 2019-06-18 15:32:53 FredricZhu

ldd与otool

ldd ldd命令用于打印程序或者库文件所依赖的共享库列表 ldd不是一个可执行程序,而只是一个shell脚本 golang go install -buildmode=shared std go build -linkshared hi.go Linux ldd /usr/local/bin/openssl linux-vdso.so.1 => (0x00007fffa4913000) libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007fc0de4b5000) libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007fc0ddfc5000) libpthread.so....阅读全文

Snake勒索软件正在威胁全球的企业网络

一种针对企业网络的新型勒索软件出现了,Snake。Snake是一种新的勒索软件,它正和最流行的勒索软件家族(如Ryuk,Maze,Sodinokibi,LockerGoga,BitPaymer,DoppelPaymer,MegaCortex和LockerGoga)一起威胁着全球。而让人担心的正是,这些犯罪组织为了让利润最大化,针对的不是单个用户而是企业。上周,MalwareHunterTeam的研究人员首先发现了Snake勒索软件,并在恶意软件分析师Vitali Kremez的支持下对其进行了分析。Snake勒索软件是用Golang编写的,将整个网络作为目标,并且存在大量混淆。其中,包含了一种常规混淆,这种混淆在以前并不常见,通常是与目标方法结合使用。与其他勒索软件一样,Snake在执行时会...阅读全文

博文 2020-01-13 21:32:45 UCloud云主机

[译] part 7: golang 包

文地址:Part 7: Packages 原文作者:Naveen R 译者:咔叽咔叽 转载请注明出处。 什么是包以及为什么要使用它 到目前为止,我们看到的 go 代码只有一个文件,其中有一个 main 函数和其他几个函数。在实际场景中,将所有源代码写入单个文件不是一个好方法。复用和维护这种代码将变得非常艰难,包就是用来解决这些问题的。 包可以使代码更好的复用和可读,也可以使代码解耦,因此使得应用程序很容易维护。 例如,假设我们正在创建一个 go 图像处理的应用程序,它提供了图像裁剪,锐化,模糊和色彩增强等功能。组织此应用程序的一种方法是将与功能相关的所有代码分组到自己的包中。例如,裁剪可以是单个包,锐化可以是另一个包。这样做的优点是,色彩增强功能可能需要一些锐化功能。色彩增强代码可以简单地导...阅读全文

博文 2019-04-23 04:34:39 咔叽咔叽_7647

Golang pipline的最佳实践--使用channel

package main import ( "fmt" ) func main() { generator := func(done <-chan interface{}, args ...int) <-chan int { results := make(chan int) go func() { defer close(results) for _, v := range args { select { case <-done: return case results <- v: } } }() return results } multiply := func(done <-chan interface{}, intStream <-chan int, multiplier int) ...阅读全文

博文 2019-06-16 21:32:41 FredricZhu

Go基础学习记录 - 编写Web应用程序 - 错误处理

错误处理 前面的分享加了两个功能,一个是编辑功能,一个保存功能 在我们的程序中有几个地方其实是忽略了错误的处理。这是不好的做法,尤其是因为这样的做法发生错误时,程序会出现意外行为。更好的解决方案是处理错误并向用户返回错误消息。这样,如果出现问题,服务器将完全按照我们想要的方式运行,并且可以通知用户。首先,让我们处理renderTemplate中的错误: func renderTemplate(w http.ResponseWriter, templateName string, p *Page) { t, err := template.ParseFiles("template/" + templateName + ".html") if err != nil { http.Error(w,...阅读全文

博文 2018-08-09 23:34:50 DurbanZhang

Go语言简介

简介: Go语言是谷歌推出的一种全新的编程语言。 Go概述 Go语言是谷歌2009年发布的第二款开源编程语言,它专门针对多处理器系统应用程序的编程进行了优化,它是一种系统语言其非常有用和强大,其程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Go支持面向对象,而且具有真正的闭包(closures)和反射 (reflection)等功能。 Go可以在不损失应用程序性能的情况下降低代码的复杂性。 Go语言简介 发表时间: 2009年 类型: 开源编程语言 公司: 谷歌 官网:http://golang.org API文档:https://golang.org/doc/ 教程:http://www.muzhuangnet.com/manual/Golang/ 下载:https://...阅读全文

Java零基础入门

课程介绍 本课程主要讲解JavaSE的发展历史,JDK开发环境的搭建,CLASSPATH属性作用,Java程序基本结构、基本数据类型的划分及使用、程序结构、方法的定义与使用,本课程是作为Java系列课程的初期课程,掌握本课程之后可以继续学习Java高级开发部分。 课程目标 • 掌握java基础 适合人群 • 0起点学员 课时列表 • 课时1:【Java摸底自测】10道题测测你的Java底子 • 课时2:Java简介(Java发展概述) • 课时3:Java简介(Java主要特点) • 课时4:JDK的安装与配置 • 课时5:第一个Java程序 • 课时6:CLASSPATH环境属性 • 课时7:Java程序基本...阅读全文

你也可以算出圆周率的 - 随机落点算法 - 致即将到来的圆周率日

一年一度的圆周率日就要到了,是的,就是3月14日,因为它与圆周率π的前几位3.14的数字一样。我们知道,传说中祖冲之计算圆周率用的是“割圆术”的改进方法,可惜我们大多数现代人的脑子已经无法理解这种方法了。使用其他的复杂公式也有,但人的脑子更不容易理解,但有一个异想天开的方法你知道吗?任何人可以简单地去计算出Pi呢(下面我们都用Pi来代替圆周率π吧,好写好认,:p)。这个方法源自概率论的基础,叫做蒙特卡洛法,形象一点的话我们也可以把它称为随机落点法,我们先说说它的原理:我们先看看下面这张图 假设有图中的一个正方形和一个刚好套在它中间的圆形,可以很直观地看出:圆形的半径如果是R的话,正方形的边长就是2R。圆形的面积根据公式是Pi乘以R的平方,也就是 Pi × R × R = PiR²正方形的面积...阅读全文

博文 2020-03-13 01:32:51 陆满庭

第六天:golang学习笔记之time

★time | time包提供了时间的显示和测量用的函数. time time包提供了时间的显示和测量用的函数. time包提供了最基本的时间计量结构Time,Duration,Location 时间打印格式如下: 2019-12-18 21:45:32.987483681 +0800 CST m=+0.000048086 年-月-日 小时:分钟:秒.纳秒 时区 m=+xxx.xxxxxxx UTC:协调世界时(Universal Time Coordinated),UTC相当于本初子午线(即经度0度)上的平均太阳时,北京时间比UTC时间早8小时 CST:CST可能就是北京时间?China Standard Time m=+xxx.xxxxxxx:这里的xxxxxxx为与程序执行开始时间的时...阅读全文

博文 2019-12-19 00:32:42 Macmillan_

Golang 编译Mac、Linux、Windows多平台可执行程序

Golang 支持在一个平台下生成多个平台运行包 编译之后直接可执行,使用起来非常方便 1.MacMac下编译Linux, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 2.LinuxLinux下编译Mac, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 3.Win...阅读全文

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 下编译 LInux 和 Windows 64 位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=w...阅读全文

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

golang基础--Gocurrency并发

goroutine只是由官方实现的超级"线程池"而已,每个实例4-5kb的栈内存占用和用于实现机制而大幅减少的创建和销毁开销。 并发不是并行(多CPU): Concurrency Is Not Parallelism 并发主要由切换时间片来实现"同时"运行,并行则是直接利用多核实现多线程的运行,但Go可以设置使用核数,以发挥多核计算机的能力。 通过go关键字实现多线程 package main import ( "fmt" "time" ) func Go() { fmt.Println("1234...") } func main() { go Go() //go关键字构成多线程 time.Sleep(2 * time.Second) //主程序睡眠2s } Goroutine 奉行通过通...阅读全文

博文 2018-07-19 03:30:00 failymao

缓存命中率

概念:所谓缓存命中率,是指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好优点:缓存是现在所有高并发系统必需的核心模块,主要作用就是把经常访问的数据(也就是热点数据),提前读入到内存中。这样,下次访问时就可以直接从内存读取数据,而不需要经过硬盘,从而加快应用程序的响应速度如何查询缓存命中率:Linux 系统中并没有直接提供这些接口,可以使用cachestat 和 cachetop查看系统缓存命中率cachestat提供了整个操作系统缓存的读写命中情况。cachetop 提供了每个进程的缓存命中情况查看指定文件缓存的大小:使用pcstat工具先安装go安装 pcstatexport GOPATH=~/goexport PA...阅读全文

(golang学习)3. go线程、协程理解

1.进程、线程、协程区别 a.各自特点 参考《详细介绍 进程、线程和协程的区别》 进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度; 线程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,标准线程由操作系统调度; 协程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,协程由程序员在协程的代码里显示调度。 协程与线程:每个单位时间内,一个CPU只能处理一个线程(操作系统:thread),线程是CPU处理的单位或单元,底层资源占用中等(比进程少)。线程中程序的执行过程是:同步阻塞的(依次执行),非抢占式的(依代码编写顺序)。开发上比较清晰明了。协程是“用户级”的线程,通过把线程的分段运行:主动暂停、主动运行,切换逻辑点,针对i/o请求可以节约连接、对方处理的中间环节等待时间,一...阅读全文

博文 2019-07-29 20:02:40 沧浪水

MyBatis功能架构设计

image.png功能架构讲解:我们把Mybatis的功能架构分为三层:(1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。(2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。(3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。框架架构框架架构讲解:这张图从上往下看。MyBatis的初始化,会从mybatis-config.xml配置文件,解析构造成Configuration这个类,就是图中的红框。...阅读全文

2.蛤蟆笔记go语言——包

2.蛤蟆笔记go语言——包 每个 Go 程序都是由包组成的。 程序运行的入口是包 main。 这个程序使用并导入了包 "fmt" 和"math/rand"。 按照惯例,包名与导入路径的最后一个目录一致。例如,"math/rand" 包由 package rand 语句开始 代码 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("Myfavorite number is", rand.Intn(10)) } 执行如下: Myfavorite number is 1 导入 代码用圆括号组合了导入,这是“打包”导入语句。 同样可以编写多个导入语句,例如: import "fmt" import "math" 不...阅读全文

博文 2016-09-07 10:00:44 notbaron

Golang包管理工具govendor的使用

1. govendor简介 golang工程的依赖包经常使用go get命令来获取,例如:go get github.com/kardianos/govendor ,会将依赖包下载到GOPATH的路径下。 常用的依赖包管理工具有godep,govendor等,在Golang1.5之后,Go提供了 GO15VENDOREXPERIMENT 环境变量(Go 1.6版本默认开启该环境变量),用于将go build时的应用路径搜索调整成为 当前项目目录/vendor 目录方式。通过这种形式,我们可以实现类似于 godep 方式的项目依赖管理。 2. 安装与使用 2.1. 安装 go get -u -v github.com/kardianos/govendor 2.2 使用 #进入到项目目录 cd ...阅读全文

BMIP002协议介绍

比原BMIP002协议 概述 比原链技术社区最近提出了一套资产规范提议,该提议允许在issue类型的交易中实现标准资产token。该标准定义资产在链上的基本功能,以及发行人通过智能合约管理资产的规范。 功能 资产是一种可以在区块链上发行的价值,给定资产的的所有单位都是可替代的。 每个资产都有全球唯一的资产ID,该资产ID来自发行程序和资产定义,发行程序通常定义一组可能的签名秘钥和阀值数量的签名,这些签名必需被提供以授权发布资产的新单元。 资产定义由提交给区块链的任意键值数据组成,提供所有参与者查看。 该标准为用户提供了一种发行资产的简单方法。它允许任何满足Bytom标准的token很容易被其他应用程序支持:比如钱包,区块链浏览器,到交易所。 一个例子是商家可以在很短的时间内在他们的商业应用中...阅读全文

博文 2019-04-23 16:34:45 比原链Bytom

go 代码依赖管理工具mod使用

什么是go mod Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。类似于php的composer,java的maven; Go.mod其实就是一个Modules,关于Modules的官方定义为: Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。Modules替换旧的基于GOPATH的方法,来指定使用哪些源文件。 Modules和传统的GOPATH不同,不需要包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以作为Modules,只要其中包含有go.mod文件。 如何使用 开启go mod export GO111M...阅读全文

golang创建属于自己的HttpServer,统一的权限验证

场景说明 go 中使用官方的http server方法的话,缺少统一的方法调用,无法对用户的权限等进行统一的验证 http.HandleFunc("/ws", wsHandler) 官方的这种路由方式,无法灵活的进行应用 php 中可以使用 __construct 对访问的方法进行统一的验证,而直接使用go的官方方法并没有类似的 创建简单的 http server func main() { // /ws 是url路径 http.HandleFunc("/ws", wsHandler) http.HandleFunc("/test", testHandler) http.ListenAndServe("0.0.0.0:8000", nil) } // 用户ws连接处理方法 func wsHa...阅读全文

博文 2019-08-28 15:32:58 小柒的另一个世界

go语言plugin怎么返回对象

golang的plugin功能用的比较少,官方的示例只有返回函数,而没有返回对象。但是实际应用中OOP可以极大提高程序的质量,经过我自己试验,发现plugin是可以返回对象的。 返回类型 我试验的返回对象的类型是空接口,然后用类型断言转换成含有一组约定方法的接口。 实例 我们首先在主程序中定义一个约定返回接口: type ResObj interface { Say(string) int } 插件中的对象定义和返回接口的函数: //对象定义 type ObjType struct { //内部封装数据 Name string } //Say 方法的实现 func (p *ObjType) Say(s string) int { fmt.Printf("%s say: %s\n", p.Na...阅读全文

博文 2018-12-05 16:34:56 从火星来

HTTP/2 协议的优点解析

HTTP 协议于 1991 年引入,至今已有近 30 年的历史。自第一个文档化版本 (后来称为 0.9) 以来,它已经经历了一段相当长的历程。在本文中,我们将简要回顾 HTTP 协议的发展历史,重点介绍 HTTP/2 带来了什么,以及我们如何从中获益。我们将使用 Node.js 服务端来实现它。1HTTP 协议简史HTTP 的第一个版本只能传输超文本标记语言 (HTML) 文件,因此我们称之为超文本传输协议。它真的很简单,唯一可用的方法就是 GET。它没有 HTTP 头文件或状态代码。如果出现问题,服务器可以使用带有错误描述的 HTML 文件进行响应。1996 年 1.0 版本出现了。与前一个版本相比,它进行了许多改进,其中最重要的是状态代码、POST 和 header 等附加方法。现在,我...阅读全文

博文 2019-08-13 01:32:44 L_34f1

配置Sia开发环境

(以 Ubuntu 桌面版开发环境为例)步骤1: 安装Go语言编译器 sudo apt install golang-go 上述命令在Ubuntu 17.04下默认将安装1.7版本的Go编译器. 安装完毕后可以运行 go version查看编译器版本号. 步骤2: Hello world 程序测试创建任意目录以便分类存放测试程序, 然后在自己新建的目录下创建一个测试程序, 这里我们新建一个文件并保存为 hello.go, 内容如下: package main import "fmt" func main(){ fmt.Println("hello world\n") } 进入Linux终端窗口, cd命令切换到 hello.go 所在的目录下, 输入go build命令编译源代码, 得到一个...阅读全文

博文 2017-07-04 03:06:34 阿群1986

Golang学习笔记-1.11 数组

本文系第十一篇Golang语言学习教程 数组 数组是同一类型元素的集合。一个数组可以由0个或多个元素组成。 定义数组的格式: var [n]type , n >0 n表示数组中元素的数量,type代表每个元素的类型;元素数量n同时作为数组类型的长度,例: var a [2]int //数组 a 是长度为 2 的 int 型数组 var b [2]int //数组 b 是长度为 1 的 int 型类型,与数组 a 是完全不同的类型 且Go语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。 package main import "fmt" func main(){ var a [2]int // //定义一个长度为 2 的整数数组 fmt.Println(a) }...阅读全文

博文 2018-07-22 01:35:32 xunk1900

面试都在问的微服务,一文带你彻底搞懂!

来自公众号:后端技术学堂 作者LemonCoder 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程序」( Monolithic application ),单体式应用内部包含了所有需要的服务。而且各个服务功能模块有很强的耦合性,也就是相互依赖彼此,很难拆分和扩容。 在座的各位都写过单体程序,给大家举个栗子,刚开始写代码你写helloworld 程序就是单体程序,一个程序包含所有功能,虽然helloworld 功能很简单。 单体应用程序的优点 开发简洁,功能都在单个程序内部,便于软件设计和开发规划。 容易部署,程序单一不存在分布式集群的复杂部署环境,降低了部署难度。 容易测试,没有各种复杂的服务调用关系,都是内部调用方便测试。 单体应用程序的缺点 单体程序的缺点一开始不是特别明...阅读全文

博文 2020-05-22 11:33:46 码农小光

使用google/wire进行依赖注入

Wire使用教程 Wire是Google提供的帮助Go开发人员实现编译时依赖注入的工具。通过例子学习使用Wire。这里我们要建立一个小的欢迎程序,用来了解如何使用Wire。 构建欢迎程序的第一步 让我们创建一个小程序,它模拟一个事件,其中包含一个带有特定消息的欢迎来宾的问候语。 我们创建了三种数据类型 给迎宾员的信息 传达信息的迎宾员 以迎宾开始的活动 type Message string type Greeter struct { // ... TBD } type Event struct { // ... TBD } 现在,我们将创建一个简单的初始化器,总是返回一个硬编码的消息: func NewMessage() Message { return Message("Hi there...阅读全文

博文 2019-11-09 17:02:38 frank2020

Go Build 不同系统的可执行文件

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。 1、Mac下编译Linux, Windows平台的64位可执行程序 $ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go $ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 2、Linux下编译Mac, Windows平台的64位可执行程序 $ CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go $ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go 3、Windows下编译M...阅读全文

博文 2020-03-13 01:32:54 乌云龙oO

Go的包管理工具(一)

在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大。今天这篇文章,咱们一起聊聊Go的依赖包管理工具。 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使用Maven或者Gradle管理包依赖。早期的Go被很多开发者所诟病的一个问题就是依赖包的管理。Golang 1.5 release版本的发布之前,只能通过设置多个GOPATH的方式来解决这个问题,例如:我两个工程都依赖了Beego,但A工程依赖的是Beego 1.1,B工程依赖的是Beego 1.7,我必须设置两个GOPATH来区分,并且在切换工程的时候GOPATH也得切换,无比痛苦。在Golang 1.5 release 开始支持除了GOROOT和GOPATH之外的依赖管理:vender,官...阅读全文