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

CentOS 7 安装Golang

下载Golang安装包 前往Golang官网下载安装包 选择相应版本下载,我选择的版本是go1.10.2.linux-amd64.tar.gz 解压安装包 进入放置压缩包的目录 将压缩包解压到/usr/local目录下 sudo tar -C /usr/local/ -xzvf go1.10.2.linux-amd64.tar.gz 配置环境变量 编辑profile文件 sudo vim /etc/profile 在最后一行加入 export GOROOT=/usr/local/go export GOPATH=/home/zhangboo/goProject export GOBIN=$GOPATH/bin export PATH=$PATH:$GOROOT/bin export PATH...阅读全文

博文 2018-11-30 17:34:48 zhangboo的程序猿之路

开始编写GO

预览 Go程序员通常让所有的Go代码在一个单独的工作空间(workspace). 一个工作空间包含很多版本控制仓库(比如,通过git管理) 每个仓库包含一个或者多个包(packages). 每个包由单独的目录下的Go源文件组成. 包的目录路径决定他的导入路径 注意这是和其他编程环境不同的地方:每个项目都有单独的工作空间,并且工作空间与版本控制仓库紧密绑定 工作空间 工作根目录有两个目录: src包含够源文件 bin包含可执行命令 go tool构建并安装binaries到bin目录 src子目录一般包含多个版本控制仓库(比如Git或者Mercurial)追踪一个或多个源包的开发。 下面展示工作空间的结构: bin/ hello # command executable outyet # co...阅读全文

博文 2018-10-18 20:34:39 竹天亮

一次golang deadlock的讨论

背景 在微信群一位同学抛出的一段代码, 各位看官猜想一下程序的执行结果 // 程序1 func main() { fmt.Println("running, not deadlock") server, err := net.Listen("tcp", "127.0.0.1:9001") if err != nil { fmt.Println(err) } waitQueue := make(chan int) for { connection, err := server.Accept() if err != nil { panic("server") } fmt.Printf("Received connection from %s.\n", connection.RemoteAddr(...阅读全文

博文 2019-07-11 13:02:39 haohongfan

Centos7 安装golang-1.12.7环境

本人也是今天正式开始步入Golang语言的学习,希望大家一起共同学习。官网地址:https://studygolang.com/dl 系统要求 Operating system Architectures Notes FreeBSD 10.3 or later amd64, 386 Debian GNU/kFreeBSD not supported Linux 2.6.23 or later with glibc amd64, 386, arm, arm64, s390x, ppc64le CentOS/RHEL 5.x not supported. Install from source for other libc. macOS 10.10 or later amd64 use the ...阅读全文

博文 2019-07-24 18:04:39 东666

【翻译】【Go】Go Modules的用法

简介 Go 1.11 和 1.12 都对模块有了初步的支持,使得对依赖的管理更加详细和容易。这个文章对模块的使用做一个基本的介绍。 模块是对Go包一个集合,以一个文件树的形式存储在根目录的go.mod文件中。go.mod文件定义了模块的路径,还有相关的依赖项。每一个依赖项都会被认为是一个模块路径和指定的版本规则,其实就是依赖项也是一个模块。 在Go 1.11的时候,Go命令行就有了对模块的支持,当当前的目录或者父目录有go.mod文件的时候,并且可以在GOPATH以外的地方使用,为了兼容性,即使在GOPATH中发现了go.mod文件,也会使用GOPATH的方式来加载文件。从Go 1.13开始,模块将被默认支持。 本文将介绍使用模块开发Go代码时出现的一系列常见操作: 创建模块 添加依赖 更新...阅读全文

博文 2019-10-01 00:04:19 yankewei

bitcount优化之路

问题: 使用Go实现bitcount函数,统计一个uint64型数值中被设置为 1 的比特位的数量。 方案一: 最容易想到的实现就是每次右移一位,检测最后一位是否是1,这样完成挨个比特检测后,就可以得出结果。 func bitCount1(n uint64)int8{ var count int8 var i uint for i < 64 { if ( (n >> i) & 1) != 0{ count += 1 } i += 1 } return count } var BitCount = bitCount1 实现一个测试函数和一个基准测试函数测试正确性和性能: 测试环境: 型号名称: MacBook Pro 处理器名称: Intel Core i7 处理器速度: 2.5 GHz 处理...阅读全文

博文 2019-06-30 00:02:39 李说的对

golang分布式存储 读书笔记(2)——流操作之PutStream封装

接着上一篇的golang分布式存储 读书笔记(1)——流操作之GetStream封装,这次要讲的是上传文件并保存,使用restful的PUT方法,书中封装了PutStream结构。 接口设计 客户端上传数据时向接口服务器发送PUT请求,请求的url为/objects/。 同样接口服务器向数据服务器转发PUT请求,请求的url为/objects/。数据服务器在本地指定文件夹(D:/objects/)下创建文件,将PUT的内容写入文件中。 目录结构 在GOPATH/src目录下,目录结构为: go-storage apiServer objects get.go put.go apiServer.go dataServ...阅读全文

博文 2019-02-08 21:34:42 StormZhu

Knative Service 之流量灰度和版本管理

本篇主要介绍 Knative Serving 的流量灰度,通过一个 rest-api 的例子演示如何创建不同的 Revision、如何在不同的 Revision 之间按照流量比例灰度。 部署 rest-api v1 代码 测试之前我们需要写一段 rest-api 的代码,并且还要能够区分不同的版本。下面我基于官方的例子进行了修改,为了使用方便去掉了 github.com/gorilla/mux 依赖,直接使用 Golang 系统包 net/http 替代。这段代码可以通过 RESOURCE 环境变量来区分不同的版本。 package main import ( "fmt" "io/ioutil" "log" "net/http" "net/url" "os" "flag" ) var res...阅读全文

博文 2019-07-22 19:32:40 阿里云云栖社区

GoLang 学习笔记 - 条件语句

条件语句通过指定一个或多个条件,并检测条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况下执行另外的语句。   GoLang 提供了以下几种条件判断语句: 语句 描述 if if 语句由一个布尔表达式后紧跟一个或多个语句组成。 if...else if 语句后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。 if 嵌套 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 switch switch 语句用于基于不同条件执行不同动作。 select select 语句类似于 switch 语句,但是 select 会随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞...阅读全文

博文 2019-07-21 07:32:38 凉丶心园

vagrant在最小化DevOps中的作用

故事背景: 通常我们在项目的开发期,都是使用本地设备进行开发. 开发动作过程一般是: 安装配置相应语言的基础环境; 确认本地环境系统版本; 找到相应的环境版本下载; 安装本地环境; 建立项目结构,组织运行环境; 开发完成,部署调整生产环境; 勤快人的故事 不管对于新手还是老手来说,从开发的第一步开始,配置开发环境就是一个在坑里摸爬滚打的过程。好不容易从坑里爬出来,可以开始集中精力写代码了。等到程序一发布到生产环境,就又要重复第一步坑里滚的过程;因为开发期本地机器环境与生产环境的不同造成的各种变数,导致了一大堆与项目本身并没有多大关系的事情发生。这些问题有时候是致命的,特别是项目时间紧,待到交付日准备给客户演示的时候,服务器配置出现问题搞不定,往往会出现悲剧性的结果!但是!项目在本地机器测试一...阅读全文

博文 2018-11-19 02:34:39 拼命三郎OL

【Golang 基础】Go 语言简介

Go 语言简介   Go 是一门开源、支持并发、垃圾回收的编译型系统编程语言,从 2007 年末由 Robert Griesemer,Rob Pike,Ken Thompson 主持开发,后来还加入了 lan Lance Taylor,Russ Cox 等人,并最终在 2009 年 11 月 开源,在 2012 年早些时候发布了 Go 1 稳定版本。 Go 语言的主要特点 类型安全 和 内存安全; 以非常直观和极低代价的方案实现高并发; 高效的垃圾回收机制(内置 runtime); 快速编译(同时解决 C 语言中头文件太多的问题); 为多核计算机提供性能提升的方案; UTF-8 编码支持; Go 语言的应用 服务器编程:处理日志、数据打包、文件系统等; 分布式系统:数据库处理器,中间件等; ...阅读全文

博文 2019-03-15 11:35:43 龙泷VK

Jenkins X--(3)具备什么样的加速能力

JENKINS X Jenkins X 重新构思了云原生时代下的 CI/CD 实现,这些想法受到了 DevOps 状态报告和近来大热的《Accelerate》一书的深刻影响,这本书的三位合著者分别是:Nicole Forsgren、Jez Humble以及Gene Kim。经年累月基于真实世界中的团队和组织收集上来的数据被 DevOps 领域的思想领袖和数据科学家们进行了深入的分析。《Accelerate》一书总结了一组有助于实施 DevOps 的能力,这些能力被 Jenkins X 实现以帮助用户以开箱即用的方式获取到科学证明过的收益。我们会从已经实现的能力项入手,并不断整合更多的能力进来。 1、对所有构件进行版本控制来自 Weaveworks 的天才们创造了 GitOps 的概念,这一点...阅读全文

博文 2019-10-18 19:32:47 aside section ._1OhGeD

[LeetCode By Go 29]492. Construct the Rectangle

马上写了30道题目了,使用golang写起题目来代码简洁明了,还可以非常方便的写测试用例,加上Goland可以进行调试,有如神助。 但无论如何,写了测试就会依赖测试判断对错,用了debug就会依赖debug来寻找出错的地方,这些其实都是自己大脑偷懒把压力推到了测试和工具上,在日常开发上可以这样提高代码质量和工作效率,但是在笔试面试时基本上不会用编译器调试代码,更别说写测试用例了。 因此,之后如果能直接把题目解出来,就不写测试用例了,我也省(写)时(烦)间(啦)嘛。 题目 For a web developer, it is very important to know how to design a web page's size. So, given a specific rectangu...阅读全文

博文 2017-08-20 10:05:06 miltonsun

求助呀!! mongo 怎么从外部插入数据呢

求助呀!! mongo 怎么从外部插入数据呢, 我写好了插入操作 怎么进行测试操作呢 怎么把测试内容插入到集合内 ![image.png](https://static.studygolang.com/180915/1342b21283355b10b39fd4566f4174a8.png) ![image.png](https://static.studygolang.com/180915/67026850d0308c7944cd627b2c2226a2.png) ![image.png](https://static.studygolang.com/180915/eda1924cee087154fef7be5c193048f4.png...阅读全文

博文 2018-09-15 10:49:33 261809340

Golang语法

变量定义 变量定义语法 使用var关键字,可放在函数内,也可放在包内 // var + 变量名 + 数据类型(有默认值) var a int var b string = "string" // 通过赋值自动判断类型 var c = true // 集中定义 var ( x = 1 y = 2 ) 使用:=定义变量,只能在函数内使用 // := 用于赋初值 a, b := 1, 2 内建变量类型(builtin) bool, string (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr byte, rune float32, float64, complex64, complex128 强制类型转换 Golang要求强制类型转换,...阅读全文

博文 2018-10-03 23:34:38 wch853

golang 单元测试 (https://github.com/stayfoo/stayfoo-hub)

> 我的 golang 开发笔记:https://github.com/stayfoo/stayfoo-hub ## 单元测试 一般有三类测试:功能测试(test)、性能测试(benchmark,也叫基准测试)、示例测试(example)。 ### 编写规则 测试源码文件名称要求:`被测试源码文件的名称_test.go`, eg:要对 `demo.go` 进行测试,测试文件就是 `demo_test.go` 。 测试函数的名称和签名规定: - `test` 测试函数,名称必须以 `Test` 为前缀; 只能有一个参数, 且参数类型:`*testing.T` 。 - `benchmark` 测试函数,名称必须以 `Benchmark` 为前缀; 只能有一个参数,且类型为:`*testing.B...阅读全文

博文 2019-08-18 22:26:26 stayfoo

HyperLedger安装与测试(MAC PRO)

HyperLedger安装与测试(MAC PRO) 环境准备 Dccker golang Node.js python 2.7 (MacOS 自带) Fabric下载与安装 参考链接: Hyperledger Fabric v1.1.0 macOS部署开发者环境并创建第一个Fabric网络 测试 注意实际安装时使用的是1.2版本,对应测试也要参考: Building Your First Network 其中的可能遇到的问题: https://stackoverflow.com/questions/52158412/got-an-error-while-running-first-network-example-fabric-version-1-...阅读全文

博文 2018-09-07 00:34:40 向水一生

微服务开发注意事项

认识到微服务开发的复杂性 本地开发要有一个好的开发机器,糟糕的开发机器将会导致糟糕的开发实践 确保所有服务都使用构建工具,能在一台新机器上构建整个应用程序,而不需要进行太多配置,让开发人员能轻松地在本地运行应用程序的各个部分 使用Kubernetes,利用Telepresence以便轻松调试 Kubernetes 集群中的应用程序 如果对微服务开发的复杂性缺乏理解,那么团队速度将会随着时间的推移而下降 及时将库和工具更新到最新版 所有服务的依赖项版本保持同步,为依赖升级创建技术债务项,并应作为会议的一部分加以讨论,并定期予以解决,将所有依赖项更新到最新版本 不止包括升级依赖包的版本,还包括架构修正,如当引入一个新工具时,可能可以替换掉原先多个工具,有助于降低复杂性 几年前,许多团队开始将 S...阅读全文

博文 2020-04-26 21:32:48 wmtcore

ubuntu安裝jdk

ubuntu 安装jdk 的两种方式:1:通过ppa(源) 方式安装.2:通过官网下载安装包安装.这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级使用ppa/源方式安装1.添加ppasudo add-apt-repository ppa:webupd8team/java sudo apt-get update2.安装oracle-java-installer jdk8sudo apt-get install oracle-java8-installer安装器会提示你同意 oracle 的服务条款,选择 ok然后选择yes 即可如果你懒,不想自己手动点击.也可以加入下面的这条命令,默认同意条款:JDK8 默认选择条款echo oracle-java8-in...阅读全文

博文 2019-04-12 11:11:03 Dende

附录C Golang开发相关

版权声明:本文出自www.54manong.com,转载请注明原地址,谢谢! https://blog.csdn.net/xiaohuanglv/article/details/89033240 Golang是一门年轻的语言。它在设计上借鉴了传统C语言的高性能特性,又借鉴了多种现代语言的优点,被认为具有很大的潜力。要用好Golang,首先要掌握好相关的开发工具。这里介绍如何快速安装和配置Golang环境,选用合适的编辑器和IDE,以及如何配合使用Golang的配套开发工具来提高开发效率。安装与配置Golang环境Golang环境安装十分简单,可以通过包管理器或自行下载方式进行,为了使用最新版本的Golang环境,推荐大家通过下载环境包方式进行安装。首先,从http://golang.org/...阅读全文

博文 2019-04-08 01:32:04 xiaohuanglv

Golang语言社区 课程2018年11月16日 更新说明

Golang语言社区 课程2018年11月16日 更新说明1 从零搭建游戏服务器-第二期:服务器模拟玩家行走测试1https://study.163.com/course/introduction.htm?courseId=1005743022&share=2&shareId=4000000005380372 Go语言实现贪吃蛇:联网开发说明https://study.163.com/course/introduction.htm?courseId=1006192062&share=2&shareId=4000000005380373 社区福利赠送:https://github.com/Golangltd/codeclass/blob/master/%E5%BD%AC%E5%93%A5%E6...阅读全文

博文 2018-11-16 19:34:46 Golang语言社区

{区块链教程}以太坊源码分析fast sync算法二

兄弟连区块链教程以太坊源码分析fast sync算法二:上面的表格应该这样解释:如果我们每隔K个区块头验证一次区块头,在N个区块头之后,伪造的概率小于攻击者产生SHA3冲突的概率。这也意味着,如果确实发现了伪造,那么最后的N个头部应该被丢弃,因为不够安全。可以从上表中选择任何{N,K}对,为了选择一个看起来好看点的数字,我们选择N = 2048,K = 100。后续可能会根据网络带宽/延迟影响以及可能在一些CPU性能比较受限的设备上运行的情况来进行调整。 Using this caveat however would mean, that the pivot point can be considered secure only after N headers have been impor...阅读全文

博文 2018-10-26 16:34:48 兄弟连区块链培训

DockOne微信分享(一零八):基于Jenkins和Kubernetes的CI工作流

【编者的话】Jenkins作为最为流行的持续集成工具,在结合使用容器技术,Kubernetes集群的基础上,该如何发挥出新的能力,在应用微服务化的基础上,提供更好的CI方式,值得我们每一个开发人员去持续不断的摸索。本次分享主要介绍我司如何使用Jenkins Pipeline、Container和 Kubernetes Deployment的能力, 通过增加使用文本模版引擎, 扩展Kubernetes Config能力,完成公司产品开发CI工作流的建立。 Jenkins和KubernetesJenkins作为最流行的持续集成工具,有着丰富的用户群、强大的扩展能力、丰富的插件,是开发人员最为常见的CI工具。在Jenkins 加强其Pipeline功能后,更是可以通过丰富的step库,实现各种复杂...阅读全文

博文 2017-06-25 16:25:32 若菱

编写测试友好的 Golang 代码

目前我们有大量的应用采用了 Golang 程序进行构建,但是在执行研发流程里我们会发现一些来自于静态编译程序的不便:相对于我们之前使用的 Python 语言程序而言,我们无法在程序功能的单元测试里大量的使用 Mock 方式来进行高效测试。 而这些东西往往可以在开发人员编写单元测试用例时有效的节省时间和一些额外的环境准备成本。因此,这也给我们的程序的单元覆盖率带来了很多麻烦的地方:一些依赖于额外验证和表现的情况或者小几率出现的情况需要复杂的模拟步骤,对开发进度和效率带来了一些额外的影响。如何编写一个测试友好的 Golang 程序成为一个无法绕开的问题。 从动态语言到静态语言动态语言有良好的运行时修改属性,在运行时的动态修改函数,可以进行有效的 Mock。比如在 3 为例,内置了 unittes...阅读全文

博文 2020-02-21 20:10:57 ipfans's Blog

2019-01-20

最小堆和最大堆 golang实现 二叉堆是一种特殊的堆,它满足两个性质:结构性和堆序性 结构性:二叉堆是一颗完全二叉树,完全二叉树可以用一个数组表示,不需要指针,所以效率更高。当用数组表示时,数组中任一位置i上的元素,其左儿子在位置2i上,右儿子在位置(2i+ 1)上,其父节点在位置(i/2)上。 堆序性质:堆的最小值或最大值在根节点上,所以可以快速找到最大值或最小值。 最大堆和最小堆是二叉堆的两种形式。 -最大堆:根结点的键值是所有堆结点键值中最大者的堆。 -最小堆:根结点的键值是所有堆结点键值中最小者的堆。 1. 最小堆实现,不使用container/heap type MinHeap struct { Element []int } 定义构造方法 数组中第一个元素不使用,存放一个小于堆...阅读全文

博文 2019-01-20 18:34:44 一线曙光_

为容器化的 Go 程序搭建 CI

本文介绍如何使用 Jenkins 的声明式 pipeline 为一个简单的 Golang web 应用搭建 CI 环境。如果你还不太了解 Jenkins 及其声明式 pipeline,请先参考笔者的 Jenkins 系列文章,或者直接到 Jenkins 官网进行学习。说明:本文的演示环境为 ubuntu 16.04。 准备 Jenkins 环境 鉴于篇幅原因,本文不再介绍 Jenkins 环境的搭建。本文演示的 demo 只要求 Jenkins server 连接了一个带有 go 标签的 agent,该 agent 上安装了 docker:如果你希望可以收到 CI 中的邮件通知,请配置 Jenkins 邮件通知中的 SMTP server。 demo 程序 笔者创建了一个简单的 Golang...阅读全文

博文 2019-01-19 08:35:19 xjtuhit

ngrok实现内网穿透

系统:centos6.81、安装git .略2、安装依赖yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++ golang3、添加域名解析ngrok.snsprj.cn是ngrok服务绑定的域名;*.ngrok.snsprj.cn是域名泛解析,ngrok的客户端在连接时可以自己指定子域名前缀。 4、安装ngrokgit clone https://github.com/inconshreveable/ngrok.gitcd ngrokNGROK_DOMAIN="ngrok...阅读全文

博文 2019-07-25 02:32:44 景岳_xo

记一次Kafka集群线上扩容

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 前段时间收到某个 Kafka 集群的生产客户端反馈发送消息耗时很高,于是花了一段时间去排查这个问题,最后该集群进行扩容,由于某些主题的当前数据量实在太大,在对这些主题迁移过程中话费了很长一段时间,不过这个过程还算顺利,因为在迁移过程中也做足了各方面的调研,包括分区重平衡过程中对客户端的影响,以及对整个集群的性能影响等,特此将这个过程总结一下,也为双十一打了一剂强心剂。 排查问题与分析 接到用户的反馈后,我用脚本测试了一遍,并对比了另外一个正常的 Kafka 集群,发现耗时确实很高,接下来 经过排查,发现有客户端在频繁断开与集群节点的连接,发现日志频繁打印如下内容: Attempting...阅读全文

博文 2019-10-27 14:32:44 aside section._1OhGeD

golang使用redis(二)

redis连接池使用连接池的目的就是复用之前建立的连接,不用每次都重建TCP连接,提高吞吐率。有几个参数说明一下MaxIdle: pool中最大Idle连接数量MaxActive: pool中最大分配的连接数量,设为0无限制IdleTimeout: idle的时间,超过idle时间连接关闭。设为0 idle的连接不closeWait: 设为true,当请求时如果达到MaxActive会等待有连接被close。设为false,当请求时如果达到MaxActive会返回error package main import ( "fmt" "os" "sync" "time" redis "github.com/gomodule/redigo/redis" ) const ( MAXIDLE = 50...阅读全文

博文 2019-11-14 15:02:43 麦穗儿

为容器化的 Go 程序搭建 CI

本文介绍如何使用 Jenkins 的声明式 pipeline 为一个简单的 Golang web 应用搭建 CI 环境。如果你还不太了解 Jenkins 及其声明式 pipeline,请先参考笔者的 Jenkins 系列文章,或者直接到 Jenkins 官网进行学习。说明:本文的演示环境为 ubuntu 16.04。 准备 Jenkins 环境 鉴于篇幅原因,本文不再介绍 Jenkins 环境的搭建。本文演示的 demo 只要求 Jenkins server 连接了一个带有 go 标签的 agent,该 agent 上安装了 docker: image 如果你希望可以收到 CI 中的邮件通知,请配置 Jenkins 邮件通知中的 SMTP server。 demo 程序 笔者创建了一个简单的...阅读全文

博文 2019-01-24 18:34:43 51reboot

《go语言圣经》练习题3.10

# 题目 **练习3.10:编写一个非递归版本的comma函数,使用bytes.Buffer代替字符串链接操作。** # 代码 ```go package main import ( "fmt" "bytes" "os" ) func comma (s string) string { //定义函数comma,对一个整数采用三位分节表示 var buf bytes.Buffer n := len(s)%3 //判断若三位一节,高位多出来的是一位,两位,还是三位 if n ==0 { n = 3 } buf.WriteString(s[:n]) for n < len(s) { buf.WriteByte(',') buf.WriteString(s[n:n+3]) n += 3 } retu...阅读全文

博文 2019-07-21 14:58:55 xiayanshangda

记一次websocket车祸

写在前面 最近在修改调试系统中的日志展示,日志展示用的是websocket,用curl不好测试,所以动手写了一个客户端来查看系统日志。 websocket client 代码如下(代码中有bug,不要复制粘贴) package main import ( "fmt" "log" "os" "os/signal" "syscall" "golang.org/x/net/websocket" ) func main() { url := os.Args[1] origin := os.Args[2] fmt.Printf("Dial url: %s ,origin: %s\n", url, origin) ws, err := websocket.Dial(url, "", origin) if...阅读全文

博文 2019-08-21 20:02:39 北二条

【每日笔记】【Go学习笔记】2019-01-02 Codis笔记

作者:施洪宝 一. go 基础 go通过锁或者原子操作解决协程之间的竞争问题, 本文主要介绍锁 go通过通道(有缓冲和无缓冲)解决协程之间的通信问题, 一个协程可能同时与多个其他协程通信, 此时可以通过select进行处理 1.1 锁 mutex mutex即是一般的互斥锁, 只有一个协程可以获取锁, 其他协程获取时会被阻塞 rwmutex rwmutex为读写锁, 某一时刻可能存在多个读锁或者一个写锁 lock可以获取写锁, 该调用会一直阻塞直到其他协程释放锁, 写锁的优先级高于读锁; unlock释放写锁 rlock获取读锁, 当只有读锁或者没有锁时可以成功获取锁, 否则被阻塞; runlock释放读锁 1.2 select select{ case communication clau...阅读全文

博文 2019-01-07 10:34:46 LNMPR源码研究

使用 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 10:32:47 帅气猫咪

彬哥笔记 --16 Go语言 游戏服务器缓存库举例

大家好,我是彬哥,本节给大家讲下go语言服务器游戏缓存处理相关,抛砖引玉了,主要是针对Go语言游戏服务器开发缓存如何处理。 首选我们来看下LollipopGo v1.0.20190104 版本的处理,缓存使用cache2go; github地址 官方代码例子如下: package main import ( "github.com/muesli/cache2go" "fmt" "time" ) // Keys & values in cache2go can be of arbitrary types, e.g. a struct. type myStruct struct { text string moreData []byte } func main() { // Accessing ...阅读全文

博文 2019-01-06 12:34:49 Golang语言社区

Spectrum链开发准备篇-Windows环境下调通测试代码,执行单元测试

系统环境 win10 注:不同windows发布版本安装过程可能略有不同 环境依赖:Go, GCCGo下载地址: https://golang.org/dl/笔者下载的是1.10.2. 64位版本:完整下载地址: https://dl.google.com/go/go1.10.2.windows-amd64.msi安装: 笔者安装的路径为 C:\Go目录下. 添加 C:\Go\bin到环境变量中. 任意目录下执行go version,显示版本号则安装配置成功. C:\Users\tangshua>go version go version go1.10.2 windows/amd64 MinGw下载地址 : https://sourceforge.net/projects/mingw-w64...阅读全文

博文 2018-09-08 13:34:48 lunhuimeng

golang 标准命令

go源码文件:命令源码文件:总是作为可执行的程序的入口库源码文件:一般用于集中放置各种待被使用的程序实体(全局常量、全局变量、接口、结构体、函数等等)go buildgo build: 用于编译指定的源码文件或者代码包以及它们的依赖包,默认不会编译目标代码包所依赖的那些代码包。当然如果依赖的代码包的归档文件不存在,后者源码文件有了变化,那它还是会被编译。go build 在编译只包含库源码文件的代码包时,只会检查性的编译,不会输出任何结果文件在编译命令源码文件时,生成可执行包go build 既不能编译包含多个命令源码文件的代码包,也不能同时编译多个命令源码文件。因为如果把多个命令源码文件作为一个整体看待,那么每个文件中的main函数都属于重名函数,在编译时会抛出重复定义错误。go buil...阅读全文

博文 2020-03-11 16:34:37 白也

一个 GO 语言性能问题的发现和解决

作者:UCloudTech首发公众号: UCloud技术公告牌链接:https://my.oschina.net/u/3675312/blog/2254090本文是大 U 同事的一篇实操性经验贴,是发现问题、分析问题到解决问题的完整案例,借此分享,希望对各位有所帮助。事件起因事情起因于公司一位同事在内部邮件组中 post 了一个问题,一个使用了 go1.8.3 写的业务程序跑了一段时间后出现部分 goroutine 卡在等待一个锁 ForkLock 的现象,同事认为这是 go1.8.3 的 bug,升级到 go1.10 后没有再重现。为了搞清楚这个事情,同事在 github 上发了 issue:https://github.com/golang/go/issues/26836,期间也做了很多...阅读全文

博文 2019-08-26 17:32:50 ehco_6f4c

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-02-27 12:34:41 杨旭

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-14 12:31:00 weixin_34259159

Go2 Error Inspection前瞻

这几年关于Go语言未来演化的讨论成为了Gopher世界的热点,Go team官方对于Go语言的演化(以Go2为标签)也是十分上心,但吸取了其他语言,比如:Python3割裂社区的、不兼容演化的教训,Go team最终选择了一条尽可能地兼容Go1、稳健、平滑的演化之路,并逐渐开始落地。Go 1.11的Go modules是Go team开启Go2演化进程的标志性事件。随着“Go 2 Draft Design”的发布,Go team正在努力着手解决Go社区反响较为强烈的Error handling、Error values和Generics(泛型)这三个问题。从目前的进展上来看,Go error value相关机制的改善近期率先在以Proposal形式出现,并给出了待社区反馈的参考实现(gola...阅读全文

博文 2019-03-24 08:18:40 bigwhite

Golang测试用例和cp程序制作基准测试注意事项

test测试用例 测试用例的文件名必须以XXX_test.go的格式. cp程序制作q<115.28.8.00.9.9> 文件名的XXX不必一定和被测试文件的名称一样,但是保持一致是一个很好的习惯. 测试用例中的测试函数名必须是TestXXX(t *testing.T)如此定义,否则不执行 每一个test文件必须要import一个testing包 go test或者go test -v命令测试当前包目录下的所有的tests 用t.Errorf来打印错误信息,会输出错误信息,并且跳过当前测试函数 t.SkipNow()跳过当前测试并且直接按PASS处理继续下一个test go的test不会保证多个TestXXX()是顺序执行的,但是通常会顺序执行 要保持顺序执行需要使用subTest,即在te...阅读全文

博文 2019-08-03 22:34:05 有我也有你

如何在基于Bytom开发过程中集成IPFS

本文介绍了基于Bytom开发过程中集成IPFS。 step1: 搭建bytom节点 比原相关资料:https://github.com/Bytom-Community/Bytom_Docs 搭建bytom节点有很多方式,然后开启RPC调用模式。这里推荐用docker搭建比原节点: docker搭建比原节点,同时开启RPC访问模式(即终端交互模式)。 我这里都是在本地操作,所以对应的端口是:9888。启动好以后我们在postman里请求测试一下,如下图: 说明我们已经搭建好了比原节点,并且可以进行远程调用。 step2: 搭建IPFS节点 IPFS中文社区官网:http://ipfser.org IPFS项目地址:https://github.com/ipfs 各种语言实现源码: GO:htt...阅读全文

博文 2019-01-18 09:34:43 比原链Bytom

golang实现快速排序

快速排序算法的算法逻辑如下: 选取数组中的一个元素,将所有的比该元素小的元素放到该元素的左侧,比它大元素放到它的右侧 对该元素的左侧进行快速排序 对该元素的右侧进行快速排序 对应的代码如下: package main import ( "fmt" "math/rand" "time" ) // quickSort 使用快速排序算法,排序整型数组 func quickSort(arr []int, a, b int) { if b-a <= 1 { return } // 使用随机数优化快速排序 rand.Seed(time.Now().Unix()) r := rand.Intn(b-a) + a c := b - 1 arr[c], arr[r] = arr[r], arr[c] j :=...阅读全文

博文 2019-03-29 06:34:39 IT孤独者

Go 单元测试和性能测试

测试对于互联网应用软件开发来说非常重要,它对软件可靠性保证具有重要意义,通过测试能够尽可能发现并改正软件中的错误,提高软件质量。 这里我们主要讲解Go语言如何实现单元测试和性能测试。 go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,你可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例,那么接下来让我们一一来看一下怎么写。 单元测试 创建目录test,在目录下创建add.go、add_test.go两个文件,add_test.go为单元测试文件。 add_test.go package test import "testing" func TestAdd(t *tes...阅读全文

博文 2019-03-12 11:34:42 guyan0319

如何用Pact进行微服务集成测试(二)

我们的例子: 我们会测试2个小服务的集成。 服务provider是我们在jenkins plugin例子里使用过的相同的服务。它叫’bringon‘,是用Go写的一个是用mongoDB的保存软件构建信息的注册表。 我们的consumer是一个很薄的python客户端,它只知道从bringon是用构建编号来获取构建信息的。 在CDC里consumer先开始 - 我们从这来。 consumer代码现在由一个带有2个函数的client.py文件组成。我们只关注叫’build‘的函数 - 它是我们要测试的函数。 import requests … def getbuild(host, port, buildnum): """Fetch a build by number .""" uri = 'ht...阅读全文

博文 2020-01-12 23:32:45 麦芽面包

Golang学习 - unicode 包

const ( MaxRune = '\U0010FFFF' // Unicode 码点的最大值 ReplacementChar = '\uFFFD' // 表示无效的码点 MaxASCII = '\u007F' // 最大 ASCII 值 MaxLatin1 = '\u00FF' // 最大 Latin-1 值 ) // 判断字符 r 是否在 rangtab 范围内。 // 可用的 RangeTable 参见 go/src/unicode/tables.go。 func Is(rangeTab *RangeTable, r rune) bool // RangeTable 定义一个 Unicode 码点集合,包含 16 位和 32 位两个范围列表。 // 这两个列表必须经过排序而且不能重叠...阅读全文

博文 2019-04-19 18:34:40 佛心看世界

Go语言基础(二)—— 基本常用语法

前言: 本专题用于记录自己(647)在Go语言方向的学习和积累。 系列内容比较偏基础,推荐给想要入门Go语言开发者们阅读。 目录如下: Go语言基础(一)—— 简介、环境配置、HelloWorld Go语言基础(二)—— 基本常用语法 Go语言基础(三)—— 面向对象编程 Go语言基础(四)—— 优质的容错处理 Go语言基础(五)—— 并发编程 Go语言基础(六)—— 测试、反射、Unsafe Go语言基础(七)—— 架构 & 常见任务 Go语言基础(八)—— 性能调优 本篇将介绍如下内容: 1.如何编写一个Go测试程序? 2.变量、常量的定义 3.基本数据类型 4.指针类型 5.运算符 6.条件与循环 7.数组与切片 8.Map 9.字符串 10.函数 (注:可根据数字快速定位本篇内容) ...阅读全文

博文 2020-01-29 18:34:15 奇舞647

go语言——测试

go语言测试 测试的目的是确认目标代码在给定的场景下,有没有按照期望工作 。一个场景是正向路经测试,就是在正常执行的情况下,保证代码不产生错误的测试。另外一些单元测试可能会测试负向路径的场景,保证代码不仅会产生错误,而且是预期的错误。总之,不管如何调用或者执行代码,所写的代码行为都是可预期的 go语言为我们提供了测试框架testing和自带go test命令来实现单元测试和性能测试。 1、单元测试 go语言自带的testing 框架使用: 测试文件名必须以 _test.go结尾。 比如 main_test.go 或者XXX_test.go 测试用例函数必须以Test开头,首字母大写。 TestXXX 比如TestAdd 测试用例函数的参数必须是 *testing.T 比如 func Test...阅读全文

博文 2019-06-26 09:32:42 杨旭

Go编程基础之一 Go开发环境搭建

学习路径:无闻的《Go编程基础》 Mac安装golang 官方介绍两种安装方法,同时也可以通过brew安装。 pkg安装 下载地址 一路下一步即可安装 tar包解压安装 下载地址 tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz 解压即可安装 brew安装 教程 brew install go PATH设置 以brew安装go为例。 export PATH=$PATH:/usr/local/opt/go/libexec/bin export GOROOT=/usr/local/opt/go/libexec export GOPATH=$HOME/.go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin 前以...阅读全文

博文 2018-08-13 14:31:33 killerpro