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

Go -- 中开启gctrace

godebug是一个跨平台的Go程序调试工具,传统的编译型语言调试器使用底层系统调用并读取二进制文件用于调试各类符号。使用起来很麻烦而且很难移植。 godebug使用不同的方法,直接把源码作为目标程序,在每一行插入调试代码,然后编译并运行。结果就是一个全功能的调试器,完全可以移植到不同平台。事实上,由于有了gopherjs ,你也可以在浏览器上进行调试: 点击此处尝试原文调试窗口。通过原文的“DEBUG IT”按钮,你可以编辑程序并重新调试它。 工作原理 下面这张是描述上面例子的矢量图: 从中可以看出原始代码转换了两次:第一次godebug插入调试instrumentation,然后gopherjs将结果编译成JavaScript。 让我们看一下instrumentation步骤,以下是go...阅读全文

博文 2019-04-19 16:31:04 weixin_34378969

Golang学习笔记5——数组array

1.array的定义 定义数组的格式: var a[4]int //元素自动初始化为零 a := [...]int{19:1} //编译器按照初始化值数量确定数组长度 a := [5]int{1,2} //未提供初始值的元素自动初始化为零 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 数组在go中为值类型 2.数组指针和指针数组 //数组指针是指获取数组变量的地址。 //此时变量p就是指向数组的指针。特别注意p定义的类型为长度为100的数组的指针。 长度必须相等才能赋值。 func main() { var a = [...]int{99:1} var p *[100]int = &a fmt.Println(p) } //指针数组是指元素为指针类型的数组 func main(...阅读全文

博文 2017-10-22 09:04:44 MarksGui

如何使用 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

golang 的交叉编译

Go是一门编译型语言,所以在不同平台上,需要编译生成不同格式的二进制包。 由于Go 1.5对跨平台编译有了一些改进,包括统一了编译器、链接器等。 编译时候只需要指定两个参数:GOOS和GOARCH即可。 示例: # 编译到 linux 64bit $ GOOS=linux GOARCH=amd64 go build # 或者可以使用 -o 选项指定生成二进制文件名字 $ GOOS=linux GOARCH=amd64 go build -o app.linux # 编译到 linux 32bit $ GOOS=linux GOARCH=386 go build # 编译到 windows 64bit $ GOOS=windows GOARCH=amd64 go build # 编译到 win...阅读全文

博文 2017-07-03 08:03:33 中柠檬

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-08-30 03:00:04 htyu_0203_39

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...阅读全文

[译]使用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特性以及变量的使用方式

引言 Go语言(又称Golang)结合了编译语言的运行速度与脚本语言的开发速度,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。 Golang特性 环境变量之GOROOT、GOPATH、Path GOROOT: 指定了go sdk的安装目录 GOPATH: Golang的工作目录 Path: 指定了go sdk的bin目录 go run与go build go build可将.go文件编译成可执行文件,因为可执行文件打包了Golang的运行环境,所以文件变大了,且该可执行文件在没有Golang运行环境下任然可以运行,实际生产中一般使用go build编译成可执行文件。 go run是一条编译运行一体化的执行语句,所以运行速度没有直接运行go build所编译...阅读全文

博文 2020-05-26 11:35:07 Zzceaon

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 听砜

ClojureScript 的 Go 编译器 Cljs2go

Cljs2go 是 ClojureScript 转换为 Go 的编译器。 ClojureScript 转换到 Go,不是分支出来,而是直接覆盖到 ClojureScript 上。Go 是从 cljs.go.compiler 上发行出去,而 cljs.go.compiler 是 cljs.compiler 的一个补丁版本。在运行时,会提供简单的 JS 兼容以避免接触 cljs.core,这些 js 和 goog 包不打算对用户开放使用。 一旦编译器开始工作,该计划将提供第二个猴子补丁(monkey patch),这回是提供 Java 依赖,像 java.io.File 和其他 Clojure 副本,clojure.java.io。此补丁可以将编译器本身编译成 Go。这既不会改变运...阅读全文

开源项目 2016-09-07 16:07:08 hraberg

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-09-03 16:00:07 htyu_0203_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

golang 生成 shared object 供其他语言使用

golang 生成 shared object 供其他语言使用 LINUX so 文件基本概念和命名规则 libxmns.so.1.2.3 1 major 2 minor 3 release major 增加,原有函数接口已经不能使用,minor和release 复归于0 minor 增加, 新增加了一些函数接口,但原有函数接口还能使用, release 复归于0 release 增加,修改一些bug, 函数接口不变 c-go 模板-供c、java等编译型语言或脚本语言使用 package main import "C" import "fmt" //export Sum func Sum(a int, b int) int { return a + b } //export GetName...阅读全文

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

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

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

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....阅读全文

[译] part 7: golang 包

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

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

关于编程语言的一些认知和思考

计算机本质上来讲就是可以运行一系列命令的机器,比如电灯拥有开和关的两个命令,计算机相比电灯要更加复杂一些罢了。 编程语言就是控制计算机的命令,好比电灯开我们就用数字1来表示,关我们就是用数字0来表示。可是对人类的自然语言来说01这样的命令实在太复杂了。如果我想让计算机进行加减乘除的计算可能就需要输入一串根本看不懂的01组合。好在后来发明了汇编语言。 汇编语言 汇编语言让我们可以使用字母符号来给计算机发送指令。比如: 操作:寄存器BX的内容送到AX中 1000100111011000 机器指令 mov ax,bx 汇编指令 汇编是直接面向CPU的程序设计语言,如果我们想要开发更高级的程序使用汇编语言可能就费劲了。这时候静态类型的语言就出现了。 静态语言 我们所谓的静态语言是什么?比如C语言这样...阅读全文

博文 2017-08-15 09:05:04 ppmoon

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...阅读全文

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-08-30 02:00:12 htyu_0203_39

(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

关于:=请教下

```go package main import ( "fmt" "net" ) func test() (int, int) { return 2, 3 } func main() { a, b := test() a, b := test()//编译报错 no new variables on left side of := add1 := "0.0.0.0:1234" add2 := "0.0.0.0:4321" server1, err := net.Listen("tcp", add1) defer server1.Close() server2, err := net.Listen("tcp", add2)/...阅读全文

golang交叉编译

win下不要用cmd 不好用 git好用的多 // 可以直接用的脚本 目录下 ./{脚本名} 即可 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o win64.exe CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -o win32.exe CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -o linux-arm CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o linux-arm64 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o linux-am...阅读全文

博文 2020-01-02 11:33:43 厄不是嫩草

BMIP002协议介绍

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

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

go语言接口和方法集问题笔记

注意: 此文章只是我的个人笔记,如有谬误,错误, 请一定指出! package main import "fmt" //IA test for methodset. type IA interface { Value() Pointer() } //A is a test type. type A int //Value receiver. func (a A) Value() { fmt.Printf("Value:%p, %d\n", &a, a) } //Pointer receiver. func (a *A) Pointer() { fmt.Printf("Pointer:%p, %d\n", a, *a) } func main() { //type A method set: ...阅读全文

博文 2016-08-30 04:00:02 htyu_0203_39

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 从火星来

Golang基础语法1

打开cmd命令窗口 保存,编译,执行: 1.保存到一个×××.go的文件(我这里保存到 E:\GoTest\hello.go 下) 2.编译,在命令提示符中执行命令: go build -o E:\GoTest\hello.exe E:\GoTest\hello.go 在指定目录下生成 .exe 文件 或者 go build E:\GoTest\hello.go 在当前目录下生成 .exe 文件 (注意:上面一条指定了输出的exe文件存在E:\GoTest, 而下面一条会在当前路径下生成hello.exe(可能会不是 E:\GoTest 的位置)) 3.执行,在命令提示符中执行命令: test.exe 就可以看到屏幕上显示的HelloWorld!字样...阅读全文