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

【Go】slice的一些使用技巧

文链接:https://blog.thinkeridea.com/201901/go/slice_de_yi_xie_shi_yong_ji_qiao.html slice 是 Go 语言十分重要的数据类型,它承载着很多使命,从语言层面来看是 Go 语言的内置数据类型,从数据结构来看是动态长度的顺序链表,由于 Go 不能直接操作内存(通过系统调用可以实现,但是语言本身并不支持),往往 slice 也可以用来帮助开发者申请大块内存实现缓冲、缓存等功能。 在 Go 语言项目中大量的使用 slice, 我总结三年来对 slice 的一些操作技巧,以方便可以高效的使用 slice, 并使用 slice 解决一些棘手的问题。 slice 的基本操作 先熟悉一些 slice 的基本的操作, 对最常规的 ...阅读全文

博文 2019-01-24 23:34:41 thinkeridea

for-loop 与 json.Unmarshal 性能分析概要

for-loop 与 json.Unmarshal 性能分析概要 在项目中,常常会遇到循环交换赋值的数据处理场景,尤其是 RPC,数据交互格式要转为 Protobuf,赋值是无法避免的。一般会有如下几种做法: for for range json.Marshal/Unmarshal 这时候又面临 “选择困难症”,用哪个好?又想代码量少,又担心性能有没有影响啊... 为了弄清楚这个疑惑,接下来将分别编写三种使用场景。来简单看看它们的性能情况,看看谁更 “好” 功能代码 ... type Person struct { Name string `json:"name"` Age int `json:"age"` Avatar string `json:"avatar"` Type string ...阅读全文

博文 2019-06-15 10:52:36 EDDYCJY

golang[32]-区块链-base58

base58Base58是用于Bitcoin中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号。设计Base58主要的目的是:避免混淆。在某些字体下,数字0和字母大写O,以及字母大写I和字母小写l会非常相似。不使用"+“和”/"的原因是非字母或数字的字符串作为帐号较难被接受。没有标点符号,通常不会被从中间分行。大部分的软件支持双击选择整个字符串。base58编码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545...阅读全文

博文 2019-02-21 15:35:52 jonson_jackson

Golang MSC 约定

分层结构 Model (模型) 可以包含少量方法; 不引用外部资源; 功能: 数据传输; 持久话; 校验信息; json、xml转换格式定义; 如无必要,转换json、xml格式时无需改变字段大小写,减少无谓的工作量; Service (服务) 提供被多方使用的公共方法; 名称以Service结尾; 会被多个Ctrl或Service调用; 可创建、输入、输出Model; 可调用其他Service; 不可调用Ctrl; 主要的单元测试对象,覆盖率要足够高; 提供一个New方法创建服务,方法的参数是需要引用的其他服务; Ctrl (控制器) 对外提供交互服务; 名称以Ctrl结尾; 包含一个路由方法(Party),说明RESTful调用名称、路径、模式参数等; Ctrl不能被Model和Serv...阅读全文

博文 2019-08-29 11:32:53 安德徐

第二章 线程管理

简述 如何启动线程 因启动性程需要一个callable type,可以有函数指针,类重载(),lambda三种形式。 其中类重载(),lambda,有可能会拿到非运行程序的变量,要小心。 启动完成后,需要detach或join,否则程序运行会报错。引入一个thread_guard类。 给线程传参数,会进行拷贝操作。 如果是引用,则要小心变量的作用域。他只会进行拷贝操作,而不会进行转换操作。 如果是类,那么又不需要std::ref。 如果是moveonly的值,在传进去之前要std::move thread 是一个 moveonly的类型,这里介绍了scoped_thread (它是一个线程的'子类') 还有,当 thread t1(xxxx); thread t2(x); t2 = std:...阅读全文

博文 2019-03-30 12:34:40 传说中的水牛

一些不常见的Go命令参数详解

你是刚开始使用Go工具么?或者你想扩展知识?这篇文章将会描述每个人都需要知道的Go工具参数。免责声明:这篇文章可能会有些偏见。这篇文章描述了我个人会用到的Go工具参数,还有一些是我周围的人遇到的问题。如果你还有别的想法,在Twitter联系我。$ go build -x-x会列出来go build调用到的所有命令。如果你对Go的工具链好奇,或者使用了一个跨C编译器,并且想知道调用外部编译器用到的具体参数,或者怀疑链接器有bug;使用-x来查看所有调用。$ go build -x WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754 mkdir -p $WORK/hello/perf/_obj/ mkdi...阅读全文

博文 2019-03-17 14:05:26 erlib

go语言渐入佳境-网络[4]-port

端口port服务器运行在主机上。 IP地址将定位主机。但是在每台计算机上可能有很多服务,需要一种简单的方法来区分它们。 TCP,UDP,SCTP等使用的方法是使用端口号。有许多“标准”端口。 Telnet通常使用端口23,TCP协议。 DNS使用端口53,使用TCP或UDP。 FTP使用端口21和20,一个用于命令,另一个用于数据传输。HTTP通常使用端口80,但它通常使用端口8000,8080和8088,所有端口都使用TCP。在Unix系统上,常用端口列在文件/etc/services中。 Go具有查询此文件的功能测...阅读全文

博文 2020-01-14 22:33:14 jonson_jackson

Go Web 编程之 响应

概述 上一篇文章中,我们介绍了请求的结构与处理。本文将详细介绍如何响应客户端的请求。其实在前面几篇文章中,我们已经使用过响应的功能——通过http.ResponseWriter发送字符串给客户端。但是这种方式仅限于发送字符串。本文我们将介绍如何定制响应的参数。 ResponseWriter接口 如果你看了我前面几篇文章,应该对处理器和处理器函数都非常熟悉了。处理器函数即拥有以下签名的函数: func (w http.ResponseWriter, r *http.Request) 这里的ResponseWriter其实是定义在net/http包中的一个接口: // src/net/http/ type ReponseWriter interface { Header() Header Wri...阅读全文

博文 2019-12-23 00:32:42 darjun

2019-06-26

本文介绍了fabric中的一个示例应用balance-transfer,fabric版本是1.4.1。本文基于上一章hyperledger基础培训-创建第一个fabric网络的基础上,如果还未了解,请先了解上一章节内容。 balance-transfer是什么 balance-transfer是Hyperledger fabric Node SDK的一个示例应用,主要使用了SDK中fabric-client 和 fabric-ca-client 模块中的API,实现了与Fabric网络交互的各种操作。 1. 预装环境 预装环境在上一章节hyperledger基础培训-创建第一个fabric网络已有详细介绍,可跳转至该文章查看。 Docker - v1.12或更高版本 Docker Compo...阅读全文

博文 2019-06-27 21:02:39 青柠果嗄

Golang笔记-单元测试test初探

### 为什么需要单元测试 其实在很长一段时间,包括现在,我都很不喜欢写单元测试。因为维护单元测试的成本很高。只有接口做了一点变更,那么单元测试就必须做相同的变更,否则会导致测试不通过。 那么反过来,只要每次在提交代码都去运行一次单元测试。这样可以很快的检查到你对代码更改是否影响了正常的业务逻辑,当然很大一部分是可能是别人写的那部分代码。因为你不确定本次的修改是否会影响到别人的那部分。所以单元测试还是很有必要的。 ### 单元测试最基本的应用 go语言中单元测试是开箱即用的,官方提供了`test`包。不用像PHP中需要单独配置`unit`。 #### go test 最基本使用 `go test` 命令是`golang`单元测试的最基本使用 #### go test -v > `go tes...阅读全文

博文 2020-05-17 18:15:13 rundaisc

golang rabbitmq的使用(三)

在第二篇中讲到了fanout类型的exchange,fanout类型exchange会将消息发送到所有和其连接的queue中,不会去区分和过滤。但现实中我们往往需要有过滤条件将不同的消息区分开来发到不同的queue。举个简单的例子,系统的log。我们需要将收到的log根据info,debug,warn,error发送到不同的queue,由不同的consumer来处理这些不同的log。为了实现这个功能我们可以 ExchangeDeclare是指定type为direct err = ch.ExchangeDeclare( "syslog_direct", //exchange name "direct", //exchange type true, //durable false, //auto...阅读全文

博文 2019-11-19 11:02:53 麦穗儿

Golang学习笔记-条件语句,循环语句

Go的条件语句,循环语句和C很像,不同的是Go的条件表达式可以不用括号扩起来,除此之外还有这些不同: switch语句 switch分支中的代码执行完后会跳出switch代码块,如果我们需要执行后面的 case,可以使用fallthrough。 func main() { a:=1 switch a { case 0: fmt.Println("a is 0") case 1: fmt.Println("a is 1") fallthrough case 2: fmt.Println("a is 2") } } 结果: a is 1 a is 2 switch支持任何类型的判断,例如下面的string: func main() { var fruitName="apple" switch f...阅读全文

博文 2019-09-27 23:33:01 aside section ._1OhGeD

Android之高效率截图

本文来自网易云社区作者:孙圣翔在一张Android手机上截图有好多办法,为了能够高效率的截图,我几乎把所有的方法都尝试了一般。走了好多路,也遇到了好多的问题。只是想记录下这其中的不容易。下面所有的测试都是用的我的三星 S4.屏幕分辨率 1080x1920androidviewclient截图速度: 4.5s最开始截图用的是 google官方提供的纯python库androidviewclient,代码的地址在 https://github.com/dtmilano/AndroidViewClient基于adb协议,只能在电脑上用。最初被我用在的一个手游自动化测试工具airtest上面。使用它很简单,我写个简单的例子from com.dtmilano.android.viewclient im...阅读全文

博文 2018-09-26 18:34:42 yijian2595

深度性能测试:功能决定现在,性能决定未来!

摘要: 深度性能测试能协助测试人员发现APP中存在的深层次性能问题,直接定位多项性能问题及瓶颈的根本原因,方便开发者快速提升APP性能表现,使得APP运行得更加稳定。MQC深度性能测试能够帮助开发者发现深层次的性能问题,更精准地定位问题。 功能决定现在,性能决定未来! 一、 内存泄漏   内存泄漏是指由于代码编写不当导致不再使用的对象无法得到及时释放。内存泄漏产生的内存垃圾不仅浪费资源,拖慢运行效率,甚至还可能造成内存溢出,直接导致应用崩溃。    对于Android应用,比较容易发生泄漏的是Activity、Fragment对象,此类对象的共性是其都有一定的生命周期。以Activity为例,一个Activity实例的生命起始于onCreate(),终结于onDestroy()...阅读全文

Unit Test In Go With Docker

本篇文章主要讲解如何在 Docker 中进行 Go 单元测试,依赖 Docker 和 Go Modules。 为什么是 Docker 在 Docker 之前我们往往需要在 Jenkins 服务器上配置不同的 Go 版本以及针对每个项目配置 GOPATH,项目之间的隔离性差,经常出现基础库版本冲突的问题。 有了 Docker,我们可以在不同容器中运行单元测试,该测试不局限不同项目,甚至可以是同一项目不同分支。 所以在测试隔离性和项目测试并发度上都有很大提升,而且测试结束后,环境清理也简单许多。 为什么是 Go Modules Go Modules 作为官方默认的包管理工具,基本解决了 Go 长期存在的包管理问题,它为我们的项目管理带来很多好处: 自动解析和添加依赖 签名验证 依赖缓存 支持相对...阅读全文

博文 2019-09-23 12:33:26 xjtuhit

leetcode_91

Golang: 思路:DP这类的题一般都不简单,需要考虑的很全面,稍有不慎就翻车,这题挂了三次,全是最简单的测试用例上,成功的把自己通过率拉到了平均线上。 这题是常态DP,没啥难度,但这题需要注意几个点: 字符串第一个字符如果为0,可直接返回0 字符串中间出现了0,那么要查看0前一位是不是1或者是2,不是可以直接返回0 代码如下: func numDecodings(s string) int { if len(s)==0{ return len(s) } if s[0]=='0' { return 0 } if len(s)==1{ return 1 } arr:=make([]int,len(s)) arr[0]=1 if s[1]=='0' { if s[0]=='1'||s[0]==...阅读全文

博文 2020-02-21 09:32:46 淳属虚构

Go 笔记之如何测试你的 Go 代码

不论是开源项目,还是日常程序的开发,测试都是必不可少的一个环节。今天我们开始进入 Go 测试模块 testing 的介绍。 差不多两周没有更新 Go 文章了,最近状态不是太好。这篇文章本来准备写的内容非常丰富,结果有点力不从心,移除了好几个小节。思考下来,还是决定拆成几篇。 另外,参考资料中有几篇很精彩的文章,有兴趣也可以读一下。 简单概述 我们选择开源项目,通常会比较关注这个项目的测试用例编写的是否完善,一个优秀项目的测试一般写的不会差。为了日后自己能写出一个好的项目,测试这块还是要好好学习下。 常接触的测试主要是单元测试和性能测试。毫无意外,go 的 testing 也支持这两种测试。单元测试用于模块测试,而性能则是由基准测试完成,即 benchmark。 Go 测试模块除了上面提到的功...阅读全文

博文 2019-09-03 11:04:22 波罗学

【Zinx第三章-基础路由模块】Golang轻量级并发服务器框架

【Zinx教程目录】Zinx源代码https://github.com/aceld/zinx (请拷贝网址,在浏览器打开[简书不让自动跳转])完整教程电子版(在线高清)-下载Zinx框架视频教程(框架篇)(完整版下载)链接在下面正文 Zinx框架视频教程(应用篇)(完整版下载)链接在下面正文 Zinx开发API文档Zinx第一章-引言Zinx第二章-初识Zinx框架Zinx第三章-基础路由模块Zinx第四章-全局配置Zinx第五章-消息封装 Zinx第六章-多路由模式 Zinx第七章-读写分离模型 Zinx第八章-消息队列及多任务 Zinx第九章-链接管理 Zinx第十章-连接属性设置 【Zinx应用案例-MMO多人在线游戏】(1)案例介绍(2)AOI兴趣点算法(3)数据传输协议protoc...阅读全文

博文 2019-07-09 09:02:38 aceld

go测试

Go测试 gotest文件命名格式:xxx_test.gogotest文方法命名格式:Testxxx.go func TestLRU(t *testing.T) { // 测试内容 } 运行 go test -v 输出测试结果。 查看代码覆盖率 生成文件 go test -coverprofile='c.out' 查看 执行 go tool corver -html='c.out'会在浏览器中显示覆盖率 执行go tool corver -func='c.out'打印每个方法的输出覆盖率 性能测试 func BenchAdd(b *testing.B) { // } 执行go test -bench . 会输出测试结果 生成文件 go test -bench . -cpuprofile cp...阅读全文

博文 2020-01-09 14:32:53 发条家的橙子

《Go 语言程序设计》读书笔记(十)反射

Go语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法和它们支持的操作,但是在编译时并不知道这些变量的具体类型。这种机制被称为反射。反射也可以让我们将类型本身作为第一类的值类型处理。 在本章,我们将探讨Go语言的反射特性,看看它可以给语言增加哪些表达力,以及在两个至关重要的API是如何用反射机制的:一个是fmt包提供的字符串格式功能,另一个是类似encoding/json和encoding/xml提供的针对特定协议的编解码功能。反射是一个复杂的内省技术,不应该随意使用,因此,尽管上面这些包内部都是用反射技术实现的,但是它们自己的API都没有公开反射相关的接口。 为何需要反射 有时候我们需要编写一个函数能够处理任何类型,一个大家熟悉的例子是fmt.Fprintf函数提供的字符串格...阅读全文

博文 2020-01-17 17:32:40 Kevin

聊聊在Go语言里使用继承的翻车经历

Go不是面向对象的语言,但是使用组合、嵌套和接口可以支持代码的复用和多态。关于结构体嵌套:外层结构体类型通过匿名嵌套一个已命名的结构体类型后就可以获得匿名成员类型的所有导出成员,而且也获得了该类型导出的全部的方法。比如下面这个例子: type ShapeInterface interface { GetName() string } type Shape struct { name string } func (s *Shape) GetName() string { return s.name } type Rectangle struct { Shape w, h float64 } 复制代码Shape类型上定义了GetName()方法,而在矩形Rectangle的定义中匿名嵌套了Sha...阅读全文

博文 2020-04-20 13:34:22 kevinyan

Go 笔记之如何测试你的 Go 代码

不论是开源项目,还是日常程序的开发,测试都是必不可少的一个环节。今天我们开始进入 Go 测试模块 testing 的介绍。 差不多两周没有更新 Go 文章了,最近状态不是太好。这篇文章本来准备写的内容非常丰富,结果有点力不从心,移除了好几个小节。思考下来,还是决定拆成几篇。 另外,参考资料中有几篇很精彩的文章,有兴趣也可以读一下。 简单概述 我们选择开源项目,通常会比较关注这个项目的测试用例编写的是否完善,一个优秀项目的测试一般写的不会差。为了日后自己能写出一个好的项目,测试这块还是要好好学习下。 常接触的测试主要是单元测试和性能测试。毫无意外,go 的 testing 也支持这两种测试。单元测试用于模块测试,而性能则是由基准测试完成,即 benchmark。 Go 测试模块除了上面提到的功...阅读全文

博文 2019-09-03 22:32:46 波罗学

[10月12日][全国在线]让it更精简,让项目更敏捷-如何成功运用敏捷方法进行项目管理与实施

项目管理在中国10多年的发展历程中,越来越体现它的价值与作用,随着社会在不断进步,IT技术和管理的发展也逐渐从单纯的引入过渡到创新的阶段,更多的组织或团队会发现: 客户的需求在不停的变化,如何应对; 小型团队用项目管理的流程会力不从心; 上线时间越来越短,如何能快速了解市场推出的新产品; 团队文化构建难,庞大研发团队的协作管理问题; 交付客户满意度低; 技术快速发展,流程停滞不前版本迭代质量低; 针对上述问题,敏捷思想可以很好的加以应对,光环国际结合软件开发与互联网企业特点,通过分析当前企业所存在的普遍问题,详细阐述如何成功运用敏捷方法进行项目管理与实施,加强团队有效沟通,准确捕获客户需求,高质量进行产品交付。逐一阐述敏捷思维与原则、特征、过程与角...阅读全文

leetcode_355

Golang: 思路:设计推特,搬运我的题解 这里的代码依旧有着很大优化的空间,比如按时间排序上,可以维护一个堆;对于每一个用户,我们可以只保存他/她的最近十条推特 但是不太想写了,因为比较麻烦。。。 globalId:类似timestamp时间标记 follower:记录每个用户关注的用户列表 checkFollowed表示关注关系,用户A是否关注了用户B,key为“id id”的形式,应该是可以保证唯一性的 twitter存储每个用户发过的推,但是value存的是globalId,方便以后取出来 findtwitter存储的是所有用户发的推 注意,这套代码是不满足并行与分布式的要求的。。。 代码如下: type Twitter struct { globalId int follower...阅读全文

博文 2020-04-13 11:32:46 淳属虚构

Go 语言单元测试实践

文链接:Go 语言单元测试实践 什么是软件测试? 软件测试是一个过程,该过程对软件(计算机程序)进行各种操作来发现软件错误。 为什么要进行软件测试? 进行软件测试可以帮助我们验证软件的各种功能正常,保证软件的正常工作从而提高软件质量。并且在实践中已被证明是颇有成效的。 测试驱动开发的由来: 一个从大量实践中得出的结论:人们发现在软件开发周期中,软件错误每进入到下一个阶段要修正它所付出的时间和人力会出人意表的翻上十倍。所以更早地进行软件测试可以更早地发现软件错误,从而大大减少后期修正的成本。后来又有人提出了测试驱动开发(TDD: Test-driven development),主体思想就是先编写测试程序,再实现程序功能。 下面就来介绍如何在 Go 语言中进行软件测试中较为重要的一环:单元测试...阅读全文

博文 2020-05-31 21:34:51 sulinehk

1.go安装

本小结介绍如何安装和使用golang 开始之前 开始之前先介绍几个概念1.go语言的环境变量我们只介绍GOROOT和GOPATH GOROOT golang 的安装路径,当你安装好golang之后其实这个就已经有了 GOPATH go命令依赖的一个重要环境变量:$GOPATH 可以把这个目录理解为工作目录 -- bin // golang编译可执行文件存放路径 -- pkg // golang编译包时,生成的.a文件存放路径 -- src // 源码路径。按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。 2.go语言的常用命令这里只介绍三个我们用到的命令 go run 编译并直接运行程序,它会产生一个临时文件(但不会生成 .exe...阅读全文

博文 2019-02-21 15:36:22 wz669

使用 Go 进行单元测试

简介 单元测试 性能测试 性能分析 测试覆盖率 总结 当前部分的代码 简介 日常开发中, 测试是不能缺少的. Go 标准库中有一个叫做 testing 的测试框架, 可以用于单元测试和性能测试. 它是和命令 go test 集成使用的. 测试文件是以后缀 _test.go 命名的, 通常和被测试的文件放在同一个包中. 单元测试 单元测试的格式形如: func TestAbs(t *testing.T) { got := Abs(-1) if got != 1 { t.Errorf("Abs(-1) = %d; want 1", got) } } 复制代码在 util 目录下创建一个文件 util_test.go, 添加一个单元测试: package util import "testing"...阅读全文

博文 2019-11-07 14:04:20 帅气猫咪

Golang学习——interface接口学习(二)

Golang接口断言学习 一.类型断言 二.接口断言 1.if else结构 接口断言2.switch结构 接口断言 在Golang中,空接口 interface{}没有定义任何函数,因此Golang 中所有类型都实现了空接口。当一个函数的形参是interface{},那么在函数中,需要对形参进行断言,从而得到它的真实类型。 一.类型断言 在学习接口断言之前,先了解一下类型断言,其实接口断言也是在判断类型。 类型断言,通过它可以做到以下几件事情: 检查 i 是否为 nil检查 i 存储的值是否为某个类型 通常有两种方式: 第一种: t := i.(T) 复制代码 这个表达式可以断言一个接口对象i里不是 nil,并且接口对象i存储的值的类型是 T,如果断言成功,就会返回值给t,如果断言失败,就...阅读全文

博文 2020-05-07 11:36:19 相守之路

Kubernetes准入控制简单实践

1. 准入控制 一般我们操作Kubernetes资源的流程是如下这样的: API Server认证; API Server鉴权; APT Server实际处理请求并持久化到ETCD; 而准入控制则具有一种能力,它可以在认证、鉴权之后对象被持久化之前对请求进行拦截,只有这些准入控制都通过之后才允许放行请求。截止Kubernetes v1.17版本,它自身已经内置支持很多admission插件,详情可移步Kubernetes内置准入控制器列表,但这些不是笔者在此述说的重点,今天主要谈谈admission插件在实际环境的动态扩展实现:admission webhook。 2. Admission Webhook Admission webhook 是一种用于接收准入请求并对其进行处理的 HTTP ...阅读全文

博文 2020-04-09 18:32:53 VienFu

Golang Failpoint 的设计与实现

作者:龙恒 对于一个大型复杂的系统来说,通常包含多个模块或多个组件构成,模拟各个子系统的故障是测试中必不可少的环节,并且这些故障模拟必须做到无侵入地集成到自动化测试系统中,通过在自动化测试中自动激活这些故障点来模拟故障,并观测最终结果是否符合预期结果来判断系统的正确性和稳定性。如果在一个分布式系统中需要专门请一位同事来插拔网线来模拟网络异常,一个存储系统中需要通过破坏硬盘来模拟磁盘损坏,昂贵的测试成本会让测试成为一场灾难,并且难以模拟一些需要精细化控制的的测试。所以我们需要一些自动化的方式来进行确定性的故障测试。 Failpoint 项目 就是为此而生,它是 FreeBSD failpoints 的 Golang 实现,允许在代码中注入错误或异常行为, 并由环境变量或代码动态激活来触发这些异...阅读全文

博文 2019-05-05 18:35:00 PingCAP

两个链表的第一个公共结点

题目描述 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 思路 假设两个链表的第一个公共结点为c。 链表1可以表示为a+c,链表2可以表示为b+c。 可以通过a+c+b+c = b+c+a+c来快速求出c的值,若没有公共结点,那c便是null。 可以根据下图,简单理解下这个过程。 Java代码实现 public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { ListNode p1 = pHead1; ListNode p2 = pHead2; while(p1 != p2){ p...阅读全文

博文 2020-02-27 12:32:41 youzhihua

像 Awesome-Go 一样提升企业 Go 项目代码质量

1. Awesome-Go 项目 参与过awesome-go项目的gopher都知道,每个MR都必须满足它以下的要求: Make sure that you've checked the boxes below before you submit PR: [ ] I have added my package in alphabetical order. [ ] I have an appropriate description with correct grammar. [ ] I know that this package was not listed before. [ ] I have added godoc link to the repo and to my pull requ...阅读全文

博文 2019-06-14 09:32:38 JayL

Go 模块--开始使用 Go Modules

Go的1.11和1.12版本包括对模块--新的Go依赖管理系统的初步支持,使依赖版本信息变得明确且更易于管理。这篇博客文章介绍了开始使用模块所需的基本操作。模块是存储在根目录有一个 go.mod文件的文件树中的 Go 包(package)的集合。go.mod文件定义了模块的module path(也是模块根目录的导入路径)以及模块依赖的其他模块的要求,满足了依赖要求模块才能被成功构建起来。每个依赖模块的要求被写为一个模块路径和相应的模块版本。下面展示了一个简单的go.mod文件 module example.com/hello go 1.12 require rsc.io/quote v1.5.2 从Go 1.11开始,当当前目录或任何父目录有go.mod时,只要该目录位于$GOPATH/s...阅读全文

博文 2020-02-22 15:32:45 Java天天

【Go】使用压缩文件优化io (一)

文连接:blog.thinkeridea.com/201906/go/c… 最近遇到一个日志备份 io 过高的问题,业务日志每十分钟备份一次,本来是用 Python 写一个根据规则扫描备份日志问题不大,但是随着业务越来越多,单机上的日志文件越来越大,文件数量也越来越多,导致每每备份的瞬间 io 阻塞严重, CPU 和 load 异常的高,好在备份速度很快,对业务影响不是很大,这个问题会随着业务增长,越来越明显,这段时间抽空对备份方式做了优化,效果十分显著,整理篇文章记录一下。 背景说明 服务器配置:4 核 8G; 磁盘:500G 每十分钟需要上传:18 个文件,高峰时期约 10 G 左右 业务日志为了保证可靠性,会先写入磁盘文件,每10分钟切分日志文件,然后在下十分钟第一分时备份日志到 OS...阅读全文

博文 2019-07-01 11:34:21 thinkeridea

维基链WICC | 项目进展周报第27期(3.18~3.24)

技术&产品周报应用建设维基时代APP v1.2.0发布:①维基时代国际版上线。(100%)②维基时代钱包更换新节点。(100%)③维基时代:任意第三方应用可调起维基时代统一签名接口,进一步提升开发者友好性。④维基时代“发现”版块上线。⑤用户行为数据统计计划上线。T2D2建设CTO陈晓东在CSDN平台直播分享《区块链技术架构与应用架构》,共119人参与直播答疑环节。完成Baas平台智能合约链上数据查询接口。 (100%)为海外开发者团队提供智能合约开发技术支持。(80%)为提升开发者开发效率的智能合约IDE工具 前端开发中。(50%)WRC20标准的智能合约demo持续优化。 (50%)区块链浏览器原型设计。(50%)公链建设解决golang钱包库投票接口相关问题。(100%)升级签名算法以提...阅读全文

博文 2019-03-26 13:34:41 维基区块链

[译] Go 语言概览

文地址:A bird's eye view of Go 原文作者:Axel Wagner 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:JackEggie 校对者:40m41h42t, JalanJiang Go 语言概览 本文摘要:本文非常笼统地总结了 Go 语言的定义、生态系统和实现方式,也尽力给出了与不同的需求所对应的参考文档,详情参见本文末尾。 每当我们说起“Go 语言”的时候,可能会因为场景的不同聊到很多完全不同的东西。因此,我尝试着对 Go 语言和其生态系统做一个概述,并在各部分内容中都列出相关的文档(这可能有点像是大杂烩,其中还包含了我最近实际遇到的许多问题)。让我们开始吧: Go 编程语言 Go 语言是一种编程语言。作为一种权威,...阅读全文

博文 2019-07-25 02:04:28 JackEggie

go 学习笔记之工作空间

搭建好 Go 的基本环境后,现在可以正式开始 Go 语言的学习之旅,初学时建议在默认的 GOPATH 工作空间规范编写代码,基本目录结构大概是这个样子. . |-- bin | `-- hello.exe |-- pkg | `-- windows_amd64 | `-- github.com | `-- snowdreams1006 | `-- learn-go | `-- strings.a `-- src `-- github.com `-- snowdreams1006 `-- learn-go |-- README.md |-- hello | `-- hello.go `-- strings |-- reverse.go `-- reverse_test.go Go 相关的代码保...阅读全文

博文 2019-08-02 21:32:41 雪之梦技术驿站

【译】Go 语言项目源码贡献官方指导文档

以前给 Go 语言项目源码提交过一些 commits,期间阅读他们的官方指导文档的时候觉得这篇指导文档可以作为绝佳的关于大型软件项目的规范管理的参考,因为最近又提交了几个 commits,就又把这篇文档再看了一遍,有感于 Go 团队在项目管理和工程实践上的一些宝贵经验,就把文档翻译成了中文;一来为了更加深入地理解 Go 语言团队的项目工程最佳实践,二来则是为了给其他有意给 Go 语言源码提交贡献的开发者提供一点参考。 导言 Go 语言项目欢迎所有的代码贡献者。 这是一份指导你完成向 Go 语言项目贡献代码整个流程的文档,会略微跟其他开源项目所使用的指导文档有所不同。我们假设阅读者已经对 Git 和 Go 有基本的理解以及具备相关的基础知识。 除了这里所介绍的信息,Go 语言社区也维护了一份关...阅读全文

博文 2020-04-07 10:32:42 panjf2000

01Go命令介绍

Go 命令介绍 go 提供了一套强大好用的命令系统 go build 编译包和依赖项 go clean 删除目标文件 go env 打印Go环境信息 go fix 在包上运行go tool修复,用来修复老版本到新版本的问题 go fmt 在包源上运行gofmt go generate 通过处理源生成Go文件 go get 下载并安装包和依赖项 go install 编译和安装包和依赖项 go list 列出包 go run 编译并运行go程序 go test 测试包,运行以 _test.go结尾的文件 go tool 运行指定的go工具 go version 打印go版本 go vet 在包上运行工具go vet,它可以在编译阶段和运行阶段发现bug 详细的官网地址为:中文https://g...阅读全文

博文 2019-04-16 08:31:00 weixin_33978016

在递归生成json路径时所遇到的Slice append操作的问题

我们的需求是为根据json每一个value生成从root到key的path (为了方便说明我们暂时不考虑数组的情况,只考虑object/number/bool/string) 举个例子,对于以下json字符串 { "a": { "b":{ "c":{ "d0": "d0", "d1": "d1", "d2": "d2" } } } } 我们希望最终生成以下形式 a.b.c.d0 = d0 a.b.c.d1 = d1 a.b.c.d2 = d2 为此我们我们定义了以下结构 type Entry struct{ path []string val interface{} } 然后我们通过定义一个递归的函数来执行以下 func RecurseJson(jsonObj interface{}, pa...阅读全文

博文 2019-08-12 11:32:43 Destiny池鱼

学习单元测试,告别祈祷式编程

祈祷式编程 祈祷式编程 如果代码中包含以下代码 或者上线后进行这种活动 那么这种编程方式就是祈祷式编程。 用流程图表示基本就是这个样子。 祈祷式编程有什么危害呢? 累,每次写完代码还需要再祈祷 不受控,代码运行结果主要看运气,大仙忙的时候可能保佑不了 解决这个问题有好多种方法,单元测试是其中之一。 单元测试 什么是单元测试 单元测试是由开发人员编写的,用于对软件基本单元进行测试的可执行的程序。单元(unit)是一个应用程序中最小的课测试部分。(比如一个函数,一个类 google 把测试分成小型测试、中型测试和大型测试。单元测试基本和小型测试的作用类似,但是通常也会使用mock或者stub 的方式模拟外部服务。 理想情况下,单元测试应该是相互独立、可自动化运行的。 目的: 通常用单元测试来验证...阅读全文

博文 2019-10-07 15:02:38 goodspeed

如何通过Dataworks禁止MaxCompute 子账号跨Project访问

摘要: 之前有很多DataWorks用户问MaxCompute访问权限问题,比如子账号为什么可以增删查别人在别的项目创建的表,即使这个子账号并没有加入那个项目 。 今天手把手教大家实现子账号授权并关闭跨Project的数据访问权限。 **原文链接:http://click.aliyun.com/m/43802/** 之前有很多DataWorks用户问MaxCompute访问权限问题,比如子账号为什么可以增删查别人在别的项目创建的表,即使这个子账号并没有加入那个项目 。 今天手把手教大家实现子账号授权并关闭跨Project的数据访问权限。 1、访问RAM控制,https://ram.console.aliyun.com/ ![图片描述](http:...阅读全文

go 学习笔记之工作空间

搭建好 Go 的基本环境后,现在可以正式开始 Go 语言的学习之旅,初学时建议在默认的 GOPATH 工作空间规范编写代码,基本目录结构大概是这个样子. . |-- bin | `-- hello.exe |-- pkg | `-- windows_amd64 | `-- github.com | `-- snowdreams1006 | `-- learn-go | `-- strings.a `-- src `-- github.com `-- snowdreams1006 `-- learn-go |-- README.md |-- hello | `-- hello.go `-- strings |-- reverse.go `-- reverse_test.go Go 相关的代码保...阅读全文

博文 2019-08-02 17:32:39 雪之梦技术驿站

leetcode_9

Golang: 思路:因为题意希望不将整数转变为字符串,所以这里的步骤变成:先实现整数反转,然后再将反转后的整数与原先的整数对比 注意:其实这里应该注意反转后的整数会不会出现溢出,比如:2147483647反转为7463847412,但这里我测试了下,go好像不会出现溢出,所以我没有做这样的处理 func isPalindrome(x int) bool { target:=x temp:=0 if x<0 { return false } for{ if x!=0 { temp=temp*10+x%10 x=x/10 }else{ break } } if temp==target { return true }else { return false } ...阅读全文

博文 2020-01-11 06:32:51 淳属虚构

Golang笔记-基准测试

上一篇写了些简单的单元测试,这一篇来看看go中的基准测试。在go中基准测试也是开箱即用的。使用testing.B结构对象。 需要测试的代码 我们依然用上一篇的代码结构 │ main.go │ main_test.go main.go func JoinStrUseSprint(a,b string) string { return fmt.Sprintf("%s%s",a,b) } func JoinStrUseNor(a,b string) string { return a+b } 创建一个基准测试 创建普通单元测试我们使用TestFunc来定义。创建基准测试我们需要使用BenchmarkFunc来定义。 func TestJoinStrUseNor(t *testing.T) { s ...阅读全文

博文 2020-05-21 22:32:42 旧梦发癫

如何0成本在github上构建CI

image 现代软件的研发流程基本上均会配备一定程度的CI/CD(这篇文章解释了为何需要在企业里实施CI/CD),整个流程主要分为CI和CD部分,这篇文章将围绕CI部分展开,并通过一个具体的例子解释如何0成本在github上构建CI。构建CI的最佳实践离不开Trunk Based Development的分支策略,感兴趣的读者可以通过这篇文章来了解什么是Trunk Based Development。在github上构建CI有2个好处:无需任何费用和有大量可以用于构建CI的模块,借助这2个好处,小规模团队可以快速地搭建还不错的CI流程。接下来,让我们结合一个使用Go编写的Hello World例子以及基于Trunk-Based Development模式来构建这个CI流程。 这篇文章将分为以...阅读全文

博文 2020-06-06 11:32:44 云端漫步_2cloudlab

GO学习笔记 - 命令行解析

本文主题:基于os.Args与flag实现Golang命令行解析。 小慢哥的原创文章,欢迎转载 目录 ▪ 一. os.Args▪ 二. flag▪ 三. 结合os.Args与flag实现子命令▪ 附. 参考文档 一. os.Args os.Args用于获取通过命令行传入的参数 ▷ os.Args[0]:程序执行路径▷ os.Args[1]:第1个参数▷ os.Args[2]:第2个参数▷ len(os.Args):参数数量 示例如下 package main import ( "fmt" "os" ) func main() { fmt.Println("Program:", os.Args[0]) for i, v := range os.Args[1:] { fmt.Printf("Ar...阅读全文

博文 2019-07-22 04:03:10 小慢哥

leetcode_52

Golang: 思路:和51是一个问题 注意:这里需要注意下:因为不想使用list去存储所有出现的结果(会导致空间复杂度变高),所以我使用了一个全局变量totalRes来表示单次测试的结果,但因为平台运行测试用例的机制,是会使用一段代码一次性跑多个测试用例。所以,每次运行totalNQueens这个方法时,都需要将totalRes置零,否则会报错。 不通过示例如上图 var totalRes int func main() { fmt.Println(totalNQueens(1)) } func totalNQueens(n int) int { totalRes=0 //这里每次使用都需要置零,否则会不通过 chessboard:=make([]int,n) placeQueen(che...阅读全文

博文 2020-01-26 20:32:40 淳属虚构

使用shuttle实现bytom上跨链资产交换

最近基于比原链上的不同资产交换工具shuttle非常抢眼,因为该工具不仅可以实现同一条链上的不同资产进行交换,还可以实现不同区块链平台上的多种资产进行交换。该工具奠定了资产在交易的过程中完全去中心化,无第三方介入,保证了资产在交换过程中的安全性和原子性。那我们来看一下这个工具到底如何使用! 该工具主要的功能是实现不同资产在比原链上交换,首先是在比原链上不同资产进行交换。这个主要使用币币交换合约来进行资产的交换。如果是在比原的主侧链上进行跨链资产交换,则使用的是哈希时间锁合约来完成两条不同链上的资产交换。 下面我们来看一下操作的具体步骤: 第一步: 首先搭建节点环境 1.1 golang的版本高于1.12,同时设置好的$GOPATH环境目录 1.2 启动并配置好bytom节点,参考:bytom...阅读全文

博文 2019-09-26 21:32:56 aside section ._1OhGeD

Golang学习笔记-测试

Go的标准库提供了几个与测试有关的库,其中最主要的是testing包,testing包需要与go test命令以及源代码中所有以_test.go后缀结尾的测试文件一同使用,一般测试文件的名字都会与被测试源码文件的名字相对应,例如main.go的测试文件名为mian_test.go。 功能测试 为了测试源代码,我们需要在测试文件中创建具有以下格式的测试函数,其中Xxx首字符必须是大写的英文字母,在测试函数的内部,我们可以使用Error,Fail等一系列方法表示测试失败。 func TestXxx(t *testing.T){...} testing.T结构有几个非常有用的方法: Log():将给定的文本记录到日志。 Logf():根据给定的格式,将给定的文本记录到日志。 Fail():将测试函...阅读全文

博文 2019-12-29 14:32:39 土豆吞噬者