go 函数使用,闭包

函数类型也是一等的数据类型。这是什么意思呢? 这意味着函数不但可以用于封装代码、分割功能、解耦逻辑,还可以化身为普通的值,在其他函数间传递、赋予变量、做类型判断和转换等等,就像切片和字典的值那样。而更深层次的含义就是:函数值可以由此成为能够被随意传播的独立逻辑组件(或者说功能模块)。对于函数类型来说,它是一种对一组输入、输出进行模板化的重要工具,它比接口类型更加轻巧、灵活,它的值也借此变成了可被热替换的逻辑组件。 我先声明了一个函数类型,名叫Printer,注意这里的写法,在类型声明的名称右边的...阅读全文

51CTO博客 2019-12-10 09:50:22 1350368559

Golang expvar原理

前言 在学习go的metric的过程中,有些实现支持prometheus、expvar等,expvar是什么,竟然在sdk的库中?另外,发现jaeger(github.com/uber/jaeger-lib)也支持这种metric数据暴露方式。 分析 expvar提供将变量暴露出去的机制(暴露到http接口等),java中也有类似的机制。 原理 go默认创建一个全局并发安全的map,可以将key为string,val为实现Var的实例保存进去;同时,将所有的key保存到列表中。 http暴露原理...阅读全文

简书 2019-12-12 00:32:45 huiwq1990

Go 获取磁盘使用情况(跨平台)

最近在项目中需要根据磁盘使用情况来做一下处理,发现没有什么标准库可以获取磁盘当前使用情况,在网上找了一段代码在 Linux 下运行可以,但在 Windows 跑会抛异常。 后来在网上找到了这篇文章,文章分别给出了两个平台各自获取磁盘使用情况的方法,在此基础上使用golang 的条件编译就可以实现跨平台获取了。 解决这个问题花了大半天,现在项目快结束了有时间就传到 gitlab 上了方便以后使用。 使用示例 获取包 go get gitlab.com/tingshuo/go-diskstate/ ...阅读全文

简书 2019-12-12 00:32:45 tingshuo123

golang-nsq系列(四)--源码解析总结篇

1. 前言:为什么要使用 MQ 消息队列 随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有: 流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 本文将从 MQ 比较、NSQ 介绍、源代码逻...阅读全文

简书 2019-12-12 00:32:44 热爱coding的稻草

构建基于Git的知识管理体系

构建基于Git的知识管理体系 简介 基于“让你成长为一棵树而不是一地草”的理念,搭建自己的知识金字塔,构建持续发展、增值的技能树。 最终目标 GitMdNote 个人日志,Git仓库,个人知识,收集归纳的主战场 EverNote 云端存储同步工具,可以用来归档,整理,多终端查看 GitMdBlog 日志仓库预览工具,方便查看,友好界面,专注(golang) EverSynClient 印象笔记同步工具,同步笔记仓库到印象笔记(TypeScript) GitHubPage 定期发布文章,输出成功到...阅读全文

简书 2019-12-12 00:32:41 笑吧小鸟

golang-nsq系列(四)--源码解析总结篇

1. 前言:为什么要使用 MQ 消息队列 随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 本文将从 MQ 比较、NSQ 介绍、源代码逻辑...阅读全文

Segmentfault 2019-12-12 08:32:40 热爱coding的稻草

C/C++ Linux 后台服务器开发高级架构师学习知识路线总结

前言:小编也是从事c方面10多年的工作经验、今天跟大家分享一下我总结出来的一系列 C/C Linux后台服务器开发的学习路线。从Linux开发工程师-Linux后台开发工程师-Linux高级互联网架构师。想必大家都知道从事后台开发首先就是要选择一种语言,小编今天跟大家分享是用C/C++ 做的后台开发。所以想从事这方面的朋友得有C/C++的基础。 首先跟大家说的是从学习步骤:(Linux入门到精通篇)一、Linux开发环境1.了解Linux环境搭建,了解LinuxC编程2.了解Linux安装,命令...阅读全文

简书 2019-12-11 21:32:45 半夏花开_a3f7

去除slice中重复的元素,认识空struct

golang标准库本身没有提供一个去除slice中重复元素的函数,需要自己去实现。今天读源码时发现了一个,算是比较优秀的技巧了,如果你有更好的办法,欢迎讨论! 另外让我们看一下空struct的作用,他之前一直没有被我重视,看来以后要多审视自己的coding了! func main() { s := []string{"hello", "world", "hello", "golang", "hello", "ruby", "php", "java"} fmt.Println(removeDupl...阅读全文

简书 2019-12-11 21:32:43 taj3991

go初学者易错点

1,slice append [0 0 0 0 0 1 2 3][1 2 3 4]append一定是在长度后追加 type MyInt1 int 新类型 type MyInt2 = int int别名slice [i:j:k] 长度=j-i 容量=k-i 起始索引 i 到 索引j-1只有slice和chanel可以用cap函数go打印 %+d 表示打印十进制的符号 比如fmt.Printf("%+d %+d",-5,+5) 输出为-5 +5闭包引用的外部变量的地址,外部变量地址变了,闭包内引用的...阅读全文

简书 2019-12-11 21:32:43 明明就_c565

4.2 Hyperledger Fabric - 应用程序开发 - 分析

应用程序开发 - 分析 让我们更详细地分析商业票据。诸如 MagnetoCorp 和 DigiBank 之类的 PaperNet 参与者使用商业票据交易来实现其业务目标 – 让我们研究一下商业票据的结构以及随着时间的推移会影响商业票据的交易。我们还将基于网络中各组织之间的信任关系,考虑 PaperNet 中的哪些组织需要在交易上签名。稍后,我们将集中讨论买卖双方之间的资金流动方式。现在,让我们集中讨论 MagnetoCorp 发行的第一份票据。 1. 商业票据生命周期 MagnetoCorp 在...阅读全文

简书 2019-12-11 21:32:41 furnace

[Go - Note] http.Response.Body 多次读取处理

问题 在使用gin框架时(其他框架或原生request也类似)遇到需要先读取body再把body作为参数传给其他函数或方法处理的情况,但用 c.ShouldBindJSON() 读取body后,再次读取body为空或出错。 解决方案 利用 ioutil包提供的以下函数 // ReadAll reads from r until an error or EOF and returns the data it read. // A successful call returns err == nil...阅读全文

Segmentfault 2019-12-12 08:32:39 Arboat

Go语言之反射

来自本人公众号:灰子学技术 原文链接:https://mp.weixin.qq.com/s/SBqx0theCm-GWzV6CPIAYA 笔者原本是C++开发人员,之前对于反射没太大概念,学了GO之后,才开始接触,在研究了一段时间之后,有了些认识,便整理一个帖子,希望对大家有所帮助。在学习反射的时候,笔者一直在问自己,反射是什么?为什么要用到反射?它是怎么实现的?笔者觉得,在知道这些问题的答案之后,才算是真正了解反射。下面笔者便从这些问题来着手整理反射。一、反射是什么?维基百科上的定义:在计算机...阅读全文

简书 2019-12-11 18:32:46 灰常出色

kinesis概念介绍 golang/python3/命令行 使用教程

Kinesis 的整体架构如下: image.png Kinesis 的基本术语 Kinesis Data Stream Kinesis Data Stream 实时吸收大量数据、持久存储数据并使这些数据可供使用。其由多个分片组成,每个分片里面包含一系列数据记录,每个数据记录有一个由 Kinesis Data Stream 分配的序列号。 数据记录 数据记录是存储在 Kinesis data stream 中的数据单位。数据记录由序列号、分区键和数据 Blob 组成,数据 Blob 可以是 最多...阅读全文

简书 2019-12-11 18:32:44 SailSea

记录一次线上k8s域名解析超时问题

前言 近期线上 k8s 时不时就会出现一些内部服务间的调用超时问题,通过日志可以得知超时的原因都是出现在域名解析上,并且都是 k8s 内部的域名解析超时,于是直接先将内部域名替换成 k8s service 的 IP,观察一段时间发现没有超时的情况发生了,但是由于使用 service IP 不是长久之计,所以还要去找解决办法。 复现 一开始运维同事在调用方 pod 中使用ab工具对目标服务进行了多次压测,并没有发现有超时的请求,我介入之后分析ab这类 http 压测工具应该都会有 dns 缓存,而...阅读全文

Segmentfault 2019-12-12 08:32:39 mokeyWie

如何选择一门编程语言

> 我应该学习哪种编程语言? ![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/how-to-choose-a-programming-language/1.jpg) 如果你看到这篇文章,很有可能,在你的职业生涯中,你至少有一次在思考应该选择哪种语言。或者你甚至在编程生涯开始之前就已经考虑了。很高兴你能看到这篇文章。 我本人经常地(甚至可能过多地)去思考这个问题。不仅如此,我还会在实践中尝...阅读全文

Go语言中文网 2019-12-11 18:12:57 polaris

我是如何在 Go 中组织包的

构建项目跟写代码一样具有挑战性。而且有很多种方法。使用错误的方法可能会让人很痛苦,但若要重构则又会非常耗时。另外,要想在一开始就设计出完美的程序几乎是不可能的。更重要的是,有些解决方法只适用于某特定大小的程序,但是程序的大小又是随着时间变化和增长的。所以我们的软件应该跟着出现过解决过的问题一起成长。 我主要从事微服务的开发,这种架构非常适合我。其他领域或其他基础架构的项目可能需要不同的方法。请在下面的评论中告诉我您的设计和最有意义的地方。 ## 包及其依赖 在开发微服务时,按组...阅读全文

Go语言中文网 2019-12-11 17:46:14 ShadowStorm97

C/C++ Linux 后台服务器开发高级架构师学习知识路线总结

前言:小编也是从事c方面10多年的工作经验、今天跟大家分享一下我总结出来的一系列 C/C Linux后台服务器开发的学习路线。从Linux开发工程师-Linux后台开发工程师-Linux高级互联网架构师。想必大家都知道从事后台开发首先就是要选择一种语言,小编今天跟大家分享是用C/C++ 做的后台开发。所以想从事这方面的朋友得有C/C++的基础。​首先跟大家说的是从学习步骤:(Linux入门到精通篇)一、Linux开发环境1.了解Linux环境搭建,了解LinuxC编程2.了解Linux安装,命令...阅读全文

Go语言中文网 2019-12-11 17:42:17 yttsam

通过 sync.Once 学习到 Go 的内存模型

通过 Once学习 Go 的内存模型 Once 官方描述 Once is an object that will perform exactly one action,即 Once 是一个对象,它提供了保证某个动作只被执行一次功能,最典型的场景就是单例模式。 单例模式 package main import ( "fmt" "sync" ) type Instance struct { name string } func (i Instance) print() { fmt.Println(i...阅读全文

掘金 2019年12月11日 _西门吹牛

在 5 分钟之内部署一个 Go 应用

在有些程序人写完了他们的 Go 应用之后,这总会成为一个大问题——“我刚写的这个 Go 应用,当它崩溃的时候我要怎么重启?”,因为你没法用 `go run main.go` 或者 `./main` 这样的命令让它持续运行,并且当程序崩溃的时候能够重启。 一个普通使用的好办法是使用 Docker。但是,设置 Docker 以及为容器配置你的应用需要花费时间,当你的程序需要和 MySQL、Redis 这样的服务器/进程交互时更是如此。对于一个大型或长期项目来说,毋庸置疑这是一个正确的选择。但是...阅读全文

Go语言中文网 2019-12-11 17:23:10 polaris