go语言中使用反射函数代替switch语法

近期在公司实习,参与了公司的一个分布式的应用服务系统。系统采用Golang语言作为系统的开发语言,在开发过程中采用了Go语言的反射函数的特性来取代了以前常使用的switch语法。 switch-case是一种多种选择的语法,其本质与if-else方法差不多,都是通过判断条件来执行不同的方法。而Go提供了一种机制在运行时更新变量和检查它们的值,调用它们的方法,和它们支持的内在操作,但是在编译时并不知道这些变量的类型。这种机制被称为反射,反射也可以让我们将类型本身作为第一类的值类型处理。 Web应用...阅读全文

GO语言defer延迟代码

GO语言defer延迟代码假设有一个函数,打开文件并且对其进行若干读写。在这样的函数中,经常有提前返回的地方。如果你这样做,就需要关闭正在工作的文件描述符。这经常导致产生下面的代码:func ReadWrite() bool { file.Open("file") // 做一些工作 if failureX { file.Close() return false } if failureY { file.Close() return false } file.Close() return true...阅读全文

CSDN博客 2017-06-30 16:07 sunansheng

[golang] Blowfish算法的go实现

最近由于工作的需要,需要的实现一个go的Blowfish算法。其实go本身有一个加密算法库crypto,其中有Blowfish。但是该算法在很多细节上跟我的需求不同,导致最终加密结果千差万别。 Blowfish算法 BlowFish是对称加密算法的其中一种。在很多场景下,作为DES的替代出现。BlowFish并不是直接用我们指定的密钥对数据加密,而是先对密钥进行预处理,然后用处理的结果再对数据加密。解密过程同理。 BlowFish算法内置两个源密钥:pbox和sbox,pbox18位数组,sbo...阅读全文

简书 2017.09.24 20:12* king_wang

Go语言:成长的十年

Go语言之父,Google大神Rob Pike代表Go语言的另外两位缔造者Robert Griesemer和Ken Thompson在自己的博客上发表了一篇名为《Go: Ten years and climbing》的文章,用以纪念Go语言从最初的设计idea起到目前的十年发展。笔者读完后,也是深有感触,因此在这里粗略翻译一下全文,希望能有更多的程序员加入到Gopher行列中来。 译文全文如下: Drawing Copyright ©2017 Renee French 本周是创建Go语言十周年的...阅读全文

Tony Bai 九月 24, 2017 bigwhite

go golang 判断base64数据 获取随机字符串 截取字符串

go golang 判断base64数据 获取随机字符串 截取字符串 先少写点,占个坑,以后接着加。 1,获取指定长度随机字符串 func RandomDigits(length int) string { return randomString(length, []byte(Digits)) } func randomString(length int, base []byte) string { bytes := make([]byte, length) maxIndex := len(ba...阅读全文

博客园 2017-09-24 00:33 mingbai

Go基础学习二

Go编程语言:支持并发、垃圾回收的编译型系统级编程语言! 一、go语言常用命令 go get 获取远程包(需提前安装git) go run 运行 go build 测试编译(package main 的文件) go fmt 格式化代码 go install 编译包文件和整个程序 go test 运行测试文件(**_test.go是测试文件,命名自己文件的时候需要注意) go doc 查看文档(本地官网 godoc -http=:8080 & 后台执行) 我们可以将go的官网放到本地: godoc...阅读全文

Segmentfault 2017-09-24 11:34:44 Corwien

用 Go 构建一个区块链 -- Part 1: 基本原型

引言 区块链是 21 世纪最具革命性的技术之一,它仍然处于不断成长的阶段,而且还有很多潜力尚未显现出来。 本质上,区块链只是一个分布式数据库而已。 不过,使它独一无二的是它是一个公开的数据库,而不是一个私人数据库,也就是说,每个使用它的人都有一个完整或部分的副本。 只有经过其他数据库管理员的同意,才能向数据库中添加新的记录。 此外,正是区块链,才使得加密货币和智能合约成为现实。 在本系列文章中,我们将基于一个简单的区块链实现,构建简化版的加密货币。 区块 让我们从 “区块链” 中的 “区块” 谈...阅读全文

简书 2017.09.23 22:00* simple_the_best

Python协程技术的演进

引言1.1. 存储器山存储器山是 Randal Bryant 在《深入理解计算机系统》一书中提出的概念。基于成本、效率的考量,计算机存储器被设计成多级金字塔结构,塔顶是速度最快、成本最高的 CPU 内部的寄存器(一般几 KB)与高速缓存,塔底是成本最低、速度最慢的广域网云存储(如百度云免费 2T ) 存储器山的指导意义在于揭示了良好设计程序的必要条件是需要有优秀的局部性:时间局部性:相同时间内,访问同一地址次数越多,则时间局部性表现越佳;空间局部性:下一次访问的存储器地址与上一次的访问过的存储器...阅读全文

简书 2017.09.23 22:05 CatherinePlans

关于Go语言

声明: 本文不是来吸引口水战的。仅仅是记录水平有限的本人的一些个人观点。Go死忠粉或者口水战爱好者勿入。 Go 是一个年轻,但是迅速蹿红的语言。我在Go刚出来的时候,出于对其创造者的崇拜,就开始关注了。然而真正使用却是这两年的事。Docker, kubernetes的出现大大加速了Go流行的速度。因为很多人是因为Go可以用来编写这样复杂度的程序开始关注它的。我相反,13年我是因为有人无意中用Go写了docker才开始关注并最终进入容器这个坑的。 先谈优点吧 简单(非常)的语法。 比Go语法还简单...阅读全文

Segmentfault 2017-09-23 17:34:48 西北那个峰

[译]使用 bcc/BPF 分析 go 程序

BCC 是基于 BPF 的 Linux IO 分析、监控、网络工具集合。BPF Compiler Collection (BCC) 是创建高效内核追踪和处理程序的工具包,包含几个有用的工具和用例。BCC 扩展了 BPF (Berkeley Packet Filters) 的用途,BPF 之前被称为 eBPF,是 Linux 3.15 新增的一个新特性。BCC 大部分的功能都要求 Linux 4.1+。 本文翻译自性能分析大牛Brendan Gregg的 2017年中旬的一篇文章: Golang ...阅读全文

鸟窝 2017年09月22日 smallnest

常用配置文件格式

配置文件是工程中常用的初始化参数的配置方式,而配置文件的格式有很多种,不同的操作系统、编程语言都会有不同的配置文件的格式,本文罗列了一些常见的配置文件的格式。 不同的配置文件格式有不同的用户友好性, 对于功能的支持也有简单和复杂之分,很难简单说那种配置文件是最好的,有时候需要从多个方面去考虑, 比如Windows较早的开发喜欢使用int、java喜欢使用properties、通用的编程喜欢yaml、json等格式,本文也不会对这些格式进行排名,而是简单介绍一下这些格式,用户可以根据自己的实际情况...阅读全文

鸟窝 2017年08月31日 smallnest

Go编译器的小修改

解决golang有未使用的变量和包时编译报错的问题 Go语言将variable declared but not used和package imported but not used设计成错误,正常使用无可厚非,但调试代码时会非常恼人。下面,就通过修改go源码将这两类错误改为警告。利益于golang的神奇编译速度,几分钟就可以轻松搞定。 首先看看效果吧: // 测试代码 package main import ( "time" "fmt" ) func main() { var i int fm...阅读全文

简书 2017.09.23 12:45* NeverLea

Kotlin极简教程:第9章 轻量级线程:协程

原文链接:https://github.com/EasyKotlin 在常用的并发模型中,多进程、多线程、分布式是最普遍的,不过近些年来逐渐有一些语言以first-class或者library的形式提供对基于协程的并发模型的支持。其中比较典型的有Scheme、Lua、Python、Perl、Go等以first-class的方式提供对协程的支持。 同样地,Kotlin也支持协程。 本章我们主要介绍: 什么是协程 协程的用法实例 挂起函数 通道与管道 协程的实现原理 coroutine库等 9.1 ...阅读全文

简书 2017.09.23 12:07 JackChan1999

GoLang中flag标签使用

正如其他语言一样,在 linux 系统上通过传入不同的参数来使得代码执行不同逻辑实现不同功能,这样的优点就是执行想要的既定逻辑而不需要修改代码重新编译与打包。在 Golang 语言中也为我们提供了相应的功能,直接上代码,在代码中会做详细的解释,当前运行环境为:Go-1.8.1 package main import ( "flag" "log" "os" ) func usage() { log.Fatalf("Usage: myProgram [-s server] [-t isShowTim...阅读全文

Golang 中三种读取文件发放性能对比

Golang 中读取文件大概有三种方法,分别为: 1. 通过原生态 io 包中的 read 方法进行读取 2. 通过 io/ioutil 包提供的 read 方法进行读取 3. 通过 bufio 包提供的 read 方法进行读取 下面通过代码来验证这三种方式的读取性能,并总结出我们平时应该使用的方案,以便我们可以写出最优代码: package main import ( "os" "io" "bufio" "io/ioutil" "time" "log" ) func readCommon(pa...阅读全文

在 Golang 中开发中使用 Makefile

使用 Golang 已经有一阵了,在 Golang 的开发过程中,我已经习惯于不断重复地手动执行 go build 和 go test 这两个命令. 不过,现在我已经摆脱了这个习惯。如果只用到了不带参数的简单命令,直接这么操作可能并不可怕。但是在一些复杂的任务中,如果依旧是手动执行 go build 和 go test ,就可能会成为一个让人头疼的事情。 我们可以通过其他方式解决这个问题。比如,可以用一个 bash 脚本来完成这些工作,或者一个更好的选择(至少对于我来说)是,写一个 makefi...阅读全文

简书 2017.09.23 10:42* simple_the_best

golang interface 接口介绍

[TOC] golang interface 接口介绍 interface 介绍 如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键。在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。 Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态...阅读全文

简书 2017.09.23 01:04* 吴德宝

Golang Context分析

[TOC] Golang Context分析 Context背景 和 适用场景 golang在1.6.2的时候还没有自己的context,在1.7的版本中就把golang.org/x/net/context包被加入到了官方的库中。golang 的 Context包,是专门用来简化对于处理单个请求的多个goroutine之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。 比如有一个网络请求Request,每个Request都需要开启一个goroutine做一些事...阅读全文

简书 2017.09.23 01:07 吴德宝

golang如何执行脚本并获取返回值

golang中如何执行脚本并获取返回值 调用脚本 在golang标准库中提供了两种方式可以用来启动进程调用脚本 第一种是在os库中的Process类型,Process类型包含一系列方法用来启动进程并对进程进行操作(参考: https://golang.org/pkg/os/#Process) 第二种是在os/exec库种通过Cmd类型的各个函数实现对脚本的调用,实际上Cmd是对Process中各种方法的高层次封装(参考: https://golang.org/pkg/os/exec/) 示例 使...阅读全文

开源中国博客 2017-09-22 22:03:22 RichardFan