Golang高并发工作池

go程序开发过程中,通过简单的调用go func 函数来开启协程,容易导致程序死锁,并且会无限制的开启groutine,groutine数量激增的情况下并发性能会明显下降,所以需要考虑使用工作池来控制协程数量,以达到高并发的效果. 直接上代码(JobPool.go) package utils import ( "fmt" ) // 定义任务接口,所有实现该接口的均实现工作池 type Task interface { DoTask() error } // 定义工作结构体 type Job s...阅读全文

简书 2019.02.20 09:51* imsgy

新年出发,和Cobo一起搭上区块链的快车

「熊市」、「裁员」,是过去一段时间区块链行业绕不过去的两个词。经历了17年的爆火和18年的寒冬,相信人们在看待这个行业时有了更多的冷静和理性。新年新气象,我们寻找和我们一样同样热爱区块链,并想实实在在做事的同路人,就像神鱼所说:“区块链是一辆高速行驶的列车,我希望你我刚好都在车上”。Cobo致力于打造一站式数字资产存储和管理平台,旨在为用户提供安全、可靠的存储与支付环境。目前公司旗下业务模块包括支持PoS(Proof of Stake即权益证明机制)挖矿的数字资产增益安全钱包--Cobo钱包,全...阅读全文

简书 2019.02.20 10:45 Cobo钱包

藏在正则表达式里的陷阱

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样...阅读全文

简书 2019.02.20 11:42 Java高级架构师

持续集成之理论篇

本文作者:CODING 用户 - 何健 持续集成 ?——? 大概数周前,突然有学长问我有没有接触过“持续集成”。 在我脑海中,这是一个陌生的词汇,于是百度了解了一番。实际上有开发和部署经验的小伙伴对持续集成不会非常陌生的,特别是那些喜欢自己写 webhook 的小伙伴。这篇文章来聊聊持续集成。 互联网软件从开发到上线,后续迭代更新,已经有一套近乎标准的流程。其中 持续集成(Continuous integration,简称 CI)则是核心流程。像「CODING 持续集成」也直接支持自定义配置流程...阅读全文

简书 2019.02.20 11:52 CodingNet

用go实现聊天室(WebSocket方式)

前言 刚入门go语言和beego框架,通过一个简单聊天室的实现,来趁热练习。 详细代码见github。 一、WebSocket协议 在实现之前,我们需要解决一个底层问题。 总所周知,HTTP协议是单向传输协议,只能由客户端主动向服务端发送信息,反之则不行。而在聊天室中,一个用户发送一条消息,服务器则需要将该条消息广播到聊天室中的所有用户,这想通过HTTP协议实现是不可能的。 除非,让每个用户每隔一段时间便请求一次服务器获取新消息。这种方式称为长轮询。但其缺点十分明显,非常消耗资源。 为了解决这个...阅读全文

go的卸载与重装(linux系统)

前言 我在安装配置(非本人操作)了go的linux虚拟机上,尝试用 $ go get github.com/astaxie/beego 获取beego框架。但是,却出现了一个奇怪的错误: go: cannot find main module; see 'go help modules' ,怎么查询都没有找到问题原因。这对于一个刚接触go和linux的新手来说,是手足无措的。于是,心生一计,卸载重装。 一、卸载 1.删除GOROOT目录 用 $ go env 找到GOROOT目录,在我的linu...阅读全文

闭包,sync使用细节

代码 先看代码如下: func main() { var a []int for i := 0; i < 100; i++ { go func() { a = append(a, i) }() } time.Sleep(2 * time.Second) fmt.Println(a) } 这段测试代码是想要一个元素为0到100的切片,但是这一小段代码隐藏了很多的问题。 闭包函数 先看这段代码的执行结果: [10 12 13 13 13 13 21 24 25 28 28 28 28 28 28 2...阅读全文

Segmentfault 2019-02-20 11:34:42 estu

【Go 语言教程】Go 语言简介

1 Go 语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言,是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。 编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行。 2 Go语言特性 跨平台的编译型语言 语法接近C语言 管道(channel),切片(slice),并发(routine) 有垃圾回收的机制 支持面向对象和面向过程的编程模式 3 Go 语言特...阅读全文

简书 2019.02.19 21:34* 万能的华哥Dean

【Go 语言教程】Go 语言环境安装

学习一门语言除了对它有个简单的总体认识,接下来就需要对其编译安装环境进行搭建,那么Go语言的安装都包含什么内容呢,如下: Go 语言是跨平台的语言 目前支持的平台有:Windows,macOS,Unix,Linux 之后也会支持类似android系统等。 1 下载地址和系统情况 平台 下载地址 备注说明 Windows https://golang.org/doc/install?download=go1.11.5.windows-amd64.msi 安装完成注意配置Go的环境变量GOPATH,...阅读全文

简书 2019.02.19 21:49 万能的华哥Dean

数组Array

Golang Array和以往认知的数组有很大不同。 1. 数组:是同一种数据类型的固定长度的序列。 2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。 3. 长度是数组类型的一部分,因此,var a[5] int和var a[10]int是不同的类型。 4. 数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1 for i := 0; i < len(a); i++ { } for i...阅读全文

简书 2019.02.19 22:52 weifansym

类型转换

零值 变量在定义时没有明确的初始化时会赋值为 零值 。 零值是: 数值类型为 0 , 布尔类型为 false , 字符串为 "" (空字符串)。 Golang 不支持隐式类型转换,即便是从窄向宽转换也不行。 package main var b byte = 100 // var n int = b // ./main.go:5:5: cannot use b (type byte) as type int in assignment var n int = int(b) // 显式转换 fun...阅读全文

Golang 热更新研究笔记

基本概念1. Golang的热更新采用什么机制?使用go1.8提供的plugin包机制实现2. plugin包本身设计的目的是热更新么?plugin包其实只是支持将代码分别编译为多个动态库,动态加载后运行并不能完全支持类似C/C++的动态库方式处理代码3. 带状态的进程热更新的基本概念及范围是什么?数据部分(model)不更新,只更新逻辑部分(函数)4. 表格和配置更新算热更新么?算但不是本文描述范围5. 热更新能在windows上使用么?不支持代码结构1. 我能将原来一个exe的代码编译为so...阅读全文

简书 2019.02.19 18:12 赵志举

如何更优雅地切换Git分支

在日常开发中,我们经常需要在不同的 Git 分支之间来回切换,特别是业务需求比较多的开发人员。在分支较多的情况下,分支名的 tab 自动补全会比较糟糕,切换时我们不免需要复制或手打分支名,那么有没有更优雅的方式了呢? 为了提高切换 Git 分支的效率,我用 Golang 写了 git-checkout-branch 这个小工具,可以交互式的切换分支,并自带搜索功能,帮助你更优雅的进行分支切换。 概览 Github 地址:https://github.com/royeo/git-... ,欢迎 s...阅读全文

Segmentfault 2019-02-19 18:34:43 royeo

孔壹学院区块链技术课程限时5折-2019.2.22(本周五)-仅限一天

孔壹学院区块链技术课程限时5折,2019.2.22(本周五),仅限一天实战项目·专业讲师·系统课程·独家原创活动详情:Golang、共识算法、公链实战、Hyperledger Fabric、DAPP、源码解析、钱包、密码学、智能合约安全等官网课程全部5折!注:活动当天登录孔壹学院官网线上购买即可网址:http://edu.kongyixueyuan.com/?20190219meiti课程咨询请扫描下方二维码(ChainDesk小姐姐微信)区块链技术交流QQ群:263270946阅读全文

Golang经典面试题

1. 下面代码能运行吗?为什么运行结果:panic: assignment to entry in nil mapgoroutine 1 [running]:main.main()如上所示,运行过程中会发生异常,原因是因为字典Param的默认值为nil,当给字典nil增加键值对是就会发生运行时错误panic: assignment to entry in nil map。正确的修改方案如下:package mainimport "fmt"type Param map[string]interfa...阅读全文

关于浮点数精度再各个编程语言需要注意点

浮点数保留N位 (2位),为货币类场景常用选项。比较合理的做法是使用分来存储(int),然后前端在进行转换。否则你就需要关心浮点数自动 四拾伍入。分清自己使用场景选择自己的合适的方法。已知 (mysql(douboule10,2),golang "%.2f",python "%.2f" ) package main import ( "fmt" "math" ) func main() { //四拾伍入了 fmt.Printf("%.2f\n", 1.244444) fmt.Printf("%....阅读全文

简书 2019.02.19 15:02 数据小菜鸟

Go的包管理工具(一)

在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大。今天这篇文章,咱们一起聊聊Go的依赖包管理工具。 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使用Maven或者Gradle管理包依赖。早期的Go被很多开发者所诟病的一个问题就是依赖包的管理。Golang 1.5 release版本的发布之前,只能通过设置多个GOPATH的方式来解决这个问题,例如:我两个工程都依赖了Beego,但A工程依赖的是Beego 1.1,B工程依赖的是Beego 1....阅读全文

Golang项目部署

文章来源:https://goframe.org/deploymen... 一、独立部署 使用GF开发的应用程序可以独立地部署到服务器上,设置为后台守护进程运行即可。这种模式常用在简单的API服务项目中。 服务器我们推荐使用*nix服务器系列(包括:Linux, MacOS, *BSD),以下使用Ubuntu系统为例,介绍如何部署使用GF框架开发的项目。 1. nohup 我们可以使用简单的nohup命令来运行应用程序,使其作为后台守护进程运行,即使远程连接的SSH断开也不会影响程序的执行。在流...阅读全文

Segmentfault 2019-02-19 16:34:45 John