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

golang并发编程实践 -- 简单生产者消费者(with lock)

上一篇文章用golang中的channel实现了简单的消费者模型,下面的版本是用传统的锁技术实现的版本,相对比会发现golang提供的channel更好用。而且golang的channel可以完成很多在别的语言里需要很多代码才能实现的功能。以后陆续解答。 package main import ( "fmt" "sync" "time" ) type Queue struct { Elem []int Capacity int Front int Rear int Lock sync.Locker Cond *sync.Cond } func New() *Queue { theQueue := &Queue{} theQueue.Capacity = 10 theQueue.Elem = ...阅读全文

博文 2014-10-04 19:26:11 aura521521

阿里巴巴高级专家为你为你讲解分布式系统开发——调度技术

课程介绍 本章知识针对分步式系统中的调度技术进行阐述,比较Hadoop MR,Yarn等系统见的区别,并指出阿里Fuxi系统在任务调度和资源调度时的处理方法,并对未来发展进行展望。 讲师简介: 陶阳宇,阿里巴巴高级专家,主要从事大型分布式系统和高并发系统的开发,在系统架构设计,性能优化等方面有丰富积累,参与研 发了阿里云”飞天”分布式平台,支持5000节点大规模集群,主持研发了在线服务框架FuxiService、实时计算系统FuxiOnlinejob等多个线上产品,2015年带领团队在世界排序大赛SortBenchmark’2015中夺得冠军,打破两项世界纪录。曾在国际会议VLDB、CSDN等杂志发表过多篇技术文章,作为教师讲授清华大学大数据课程。 课程目标 ...阅读全文

开源消息系统 NSQ

NSQ 是无中心设计、节点自动注册和发现的开源消息系统。可作为内部通讯框架的基础,易于配置和发布。 架构: ![nsqd clients](http://static.oschina.net/uploads/img/201501/27073634_i5Ye.gif) 监控界面: ![nsqadmin](http://static.oschina.net/uploads/img/201501/27073635_MSMt.png) 无单点故障: ![nsq clients](http://static.oschina.net/uploads/img/201501/27073636_C0sa.png) 特点: * 追求简单部署 * 追求高可用、避免单点故障、无中心设计 * ...阅读全文

开源项目 2013-08-12 16:00:00 bitly

使用 Go 基于 RabbitMQ 实现的消息中间件wmq

WMQ是用golang基于RabbitMQ实现的消息中间件,在系统架构对解耦现有业务起到至关重要的作用,服务基于HTTP的API方式具有跨语言的特点,接入十分简单.能够很好的解决并发控制,异步任务,以及消息订阅与分发.工作原理架构图如下: ![image](https://static.oschina.net/uploads/space/2017/1017/110028_7bml_3703517.png) 特点: 跨语言,基于HTTP协议. 高性能,测试环境下消息生产速率达到3000个/s,而且性能毫无下降,瓶颈出现在后端RabbitMQ上. 提供了web-ui管理系统,对服务进行管理 跨平台,运行简单,直接运行一个二进制文件. 支持集群部署,避免单点故障. 完全实现了R...阅读全文

Golang 格式输出符号

%d int变量 %x, %o, %b 分别为16进制,8进制,2进制形式的int %f, %g, %e 浮点数: 3.141593 3.141592653589793 3.141593e+00 %t 布尔变量:true 或 false %c rune (Unicode码点),Go语言里特有的Unicode字符类型 %s string %q 带双引号的字符串 "abc" 或 带单引号的 rune 'c' %v 会将任意变量以易读的形式打印出来 %T 打印变量的类型 %% 字符型百分比标志(%符号本身,没有其他操作...阅读全文

博文 2019-05-05 04:31:50 zhengzizhi

Golang Walk 托盘菜单

最近在用Golang开发一个客户端。客户端打开之后,会打开系统浏览器然后弹出一个网页。 目前已经写的差不多了,但是有个问题疑惑着我,Golang有没有类似C# contextMenu的东西呢,我在 github.com 上看到了 walk. 一个非常不错的golang gui开发框架,这个实现了类似于C# ContextMenu的东西 下面是一个非常简单的小示例: package main import ( "github.com/lxn/walk" "log" ) func GuiInit() { mw, err := walk.NewMainWindow() if err != nil { log.Fatal(err) } //托盘图标文件 icon, err := walk.Resou...阅读全文

博文 2019-03-24 14:34:45 smoothcraft

【武汉】做贪吃蛇大作战的公司 武汉微派 急招golang服务器开发工程师

不知道微派是哪家公司,那你总知道贪吃蛇大作战、谁是卧底online、微派桌游助手吧,专注在游戏&社交两个领域;营收很好 ,数轮融资,比较低调。目前是B轮融资,巨人网络投资 公司简介: 公司16年的明星产品为贪吃蛇大作站和谁是卧底。贪吃蛇目前3亿多用户,16年77天在app store上霸榜,风靡全国,是现在休闲游戏的代表;谁是卧底也是一款十分经典的社交游戏。 1)贪吃蛇大作站,日活千万,于2016.8月-10月在app store免费榜连续70多天排名第一,是app store有史以来霸榜时间最长的APP。 目前用户3亿多,17年盈利8000W-1亿; 2)谁是卧底是top1的卧底游戏,多次进入app store免费榜单前30强,千万级用户,年收入千万; 因业务发展迅猛...阅读全文

浅谈滚服游戏如果实现一键合服

[原文链接](http://www.bugclosed.com/post/12) : http://www.bugclosed.com/post/12 ## 背景 近几年的游戏行业中,出现了各种各样的滚服游戏,包括页游,手游,H5游戏等等。滚服游戏和大服游戏的区别在于同时游戏人数,大服游戏是有很多用户在一起玩,甚至几十上百万玩家。而滚服游戏则一般会设计游戏在线上限,比如3000,达到上限则新开一组服务器,并引导用户进入新区。 滚服模式是游戏类型,技术架构和急功近利的坑钱策略等因素共同决定的,大服游戏包括绝大部分端游,以及类COC这样类型的游戏。另外,虽然像英雄联盟,王者荣耀这样的游戏也分服架构,但是这个并不是我理解中的“滚服游戏“,首先他们虽然分服,但是每个服的人数上限也是可以高达几十万,他...阅读全文

博文 2018-05-24 16:15:26 pert

分布式数据传输中间件DTLE

**DTLE是一个开源的数据传输中间件**,其针对的核心场景如下:  **跨数据中心的数据传输**:DTLE能在数据中心间进行可靠数据传输,并提供链路压缩以降低传输成本 **云间数据同步/迁移**:DTLE能提供在公有云间架设数据同步通道,以支持数据容灾等需求 **数据汇聚**:DTLE能将多个数据源汇聚到同一个数据源,以提供数据分析/数据转储的功能 **数据订阅**:DTLE能将数据源的变更消息发往Kafka等消息中间件,以支持数据订阅通知/缓存失效通知等需求 **跨数据中心的双向复制**:DTLE能在数据中心间提供双向复制通道,以配合业务实现数据双写   **分布式架构**:DTLE在数据传输这个基本场景上,使用了成熟的分布式任务调度架构,可以便捷地在集群中配置大量的数据传...阅读全文

golang 导出 csv文件

csv文件可以直接用Excel打开 csv方式导出,可以像导出txt一样,以文本流的方式进行流式处理,不但能导出海量信息,而且流式处理占用内存极低,服务器对浏览器的响应也是非常迅速的。 导出纯数字构成的字符串,在excel中打开csv时,容易被识别成数字,造成误解。一般加上"\t",也有人采用加" ' "单引号 等解决方式。 实现代码 package main import ( "encoding/csv" "fmt" "os" "sort" "time" ) func main() { // 不存在则创建;存在则清空;读写模式; file, err := os.Create("person_list.csv") if err != nil { fmt.Println("open file ...阅读全文

博文 2019-11-01 17:34:01 aside section._1OhGeD

消息中间件NSQ深入与实践

1. 介绍最近在研究一些消息中间件,常用的MQ如RabbitMQ,ActiveMQ,Kafka等。NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。官方和第三方还为NSQ开发了众多客户端功能库,如官方提供的基于HTTP的nsqd、Go客户端go-nsq、Python客户端pynsq、基于Node.js的JavaScript客户端nsqjs、异步C客户端libnsq、Java客户端nsq-java以及基于各种语言的众多第三方客户端功能库。 1.1 Features1). DistributedNSQ提供了分布式的,去中心化,且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和HA(高可用)特性。2). Sc...阅读全文

博文 2017-10-09 05:30:46 Aoho's Blog

谷歌 Go 语言迎来三岁生日

谷歌Go语言近日迎来了3周岁生日。谷歌在2009年11月首次宣布推出Go语言项目,截止到今天,已有数百个外部贡献者加入并参与贡献,也有大量的组织或机构开始转向Go语言,其中包括BBC Worldwide、 Canonical、CloudFlare、Heroku、Novartis、SoundCloud等。谷歌自己也使用该语言开发了一些Web应用程序以及Doodles等。 Go语言结合了动态语言易于编写的特性和静态语言的高效性,最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以帮助开发者创建并行任务。Go开发团队曾表示,编译完成的Go程序运行速度接近C语言实现的程序。 今年3月份,谷歌发布了Go语言的第1个稳定版本,在此之后,谷歌又为该项目增加了一个包管理系统goi...阅读全文

博文 2014-10-09 16:00:08 wangguo

Uber如何使用go语言创建高效的查询服务

在2015年初我们创建了一个微服务,它只做一件事(也确实做得很好)就是地理围栏查询。一年后它成了Uber高频查询(QPS)服务,本次要讲的故事就是我们为什么创建这个服务,以及编程语言新秀Go如何帮我们快速创建和扩展该服务。 背景 在Uber,一个地理围栏就是在地表人为定义的地理区域(或多边形几何区域)。地理围栏在Uber被广泛用于基于地理位置的设置。向用户展示给定区域有哪些产品可以使用,根据特殊需要(如机场)定义区域,并在乘车高峰时在相邻区域实施动态定价是我们产品的重要应用场景。 一个科罗拉多地理围栏示例。 第一步是通过用户手机获取地理位置信息如经纬度,进而确定用户所在地理围栏。这个功能分散在多个服务或模块中。因为我们从整体架构向微服务架构迁移,我们选择将这个功能做成一个新的微服务。 使用G...阅读全文

博文 2016-05-04 11:00:00 zengmingen

2017年8月编程语言排行榜:大数据时代,Python、Go依然强劲

2017年8月编程语言排行榜:大数据时代,Python、Go依然强劲 2017-08-06 10:00 来源:大数据技术 大数据 原标题:2017年8月编程语言排行榜:大数据时代,Python、Go依然强劲 程序猿(微信号:imkuqin) 猿妹 整编 TIOBE编程语言社区发布了 2017 年 8 月排行榜,和上个月相比,前五名没有变化,Java、C、C++、C# 和 Python 仍然稳定保持在前 5 的位置。不过比例都有不同程度的下降。 尽管 Java 仍然稳居第一,但最值得注意的是 Java 本月跌破13%,今年接下去是否还是能一如既往保住第一的宝座,我们拭目以待。 Go 语言和 7 月份相比从前 10 回落 第 16 名,但总体趋势还算平稳。自从谷歌宣布了安卓开发全面支持 Kotl...阅读全文

博文 2017-08-08 02:08:20 猿妹

go 链表反

链表操作是数据结构中基本的操作,下面用golang实现一下链表的基本操作,包括增、删、查以及单链表的反转操作。package linkimport ( "fmt" "github.com/pkg/errors")//链表结构type ListNode struct { data int next *ListNode}//初始化链表头,下面的所有操作都是基于带头链表func NewListNode() *ListNode { return &ListNode{next: nil}}//获取链表的长度func (l *ListNode)Length() int { len :=0 for l.next != nil { len++ l = l.next } return len}//插入节点fu...阅读全文

博文 2018-10-15 12:34:41 GoSnail

为物联网而生:高性能时间序列数据库HiTSDB商业化首发!

摘要: 近日,阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。 近日,阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。 先跟大家聊一下什么叫时序数据。简单的说,就是时间上分布的一系列数值,关键字是数值,我们一般认为的时序数据是什么时间发生了什么事情,但是在时序数据这个领域里定义的时序数据全都是跟数值有关的。也就是说,如果只是一个带有时间戳的一条数据并不能叫做时序数据。举个例子,比如像我早上8点半上楼吃了个饭这条记录,相当于一个日志,这个本身不构成一个时序数据,但是如果某个餐厅早上8点...阅读全文

TIOBE 发布 3 月编程语言榜单:Go 冲进前十,Delphi 没落

☞200页!分享珍藏很久的Python和Linux学习知识手册☜TIOBE 公布了2020年3月的编程语言排行榜TOP 20的榜单如下:C语言不愧是年度编程语言,以3.03%的年增长率继续大幅领先。年增长率较高的还有Java(2.90%)、C#(2.95%)和Python(1.85%)。整体上来看,排名前10的语言基本都稳定如常。本月冲出了Go 语言这匹黑马,一路挤进前十。去年同期,Go排在第18位,前两个月的榜单中,Go上升到第14位,然后持续爬升,终于在3月进入前十。本月最值得关注的语言比较令人意外:Delphi即将跌出TIOBE指数前20名。这大概是 Delphi最终没落的迹象。自2001年6月TIOBE指数存在以来,Delphi一直位居前20名,在2000年代初,它是最流行的语言和I...阅读全文

博文 2020-03-06 21:33:11 程序员SHZ

分享一个快速构建 RESTful API的Go 框架snake

snake snake 一款适合于快速开发业务的Go框架,主要是提供API服务。 技术栈 框架路由使用 gin 路由 中间件使用 gin 框架的中间件 数据库组件 gorm 文档使用 swagger 生成 配置文件解析库 viper 使用 JWT 进行身份鉴权认证 校验器 validator 也是 gin 框架默认的校验器,当前最新是v9版本 任务调度 cron 包管理工具 go module 测试框架 goConvey CI/CD Github Actions 特性 遵循 RESTful API 设计规范 基于 GIN WEB 框架,提供了丰富的中间件支持(用户认证、跨域、访问日志、请求频率限制、追踪 ID 等) 基于 GORM 的数据库存储 JWT 认证 支持 Swagger 文档(基于...阅读全文

博文 2020-04-11 14:32:42 如来神掌

浅谈滚服游戏如果实现一键合服

文地址-黑胡子Blog:http://www.bugclosed.com/post/12 背景 近几年的游戏行业中,出现了各种各样的滚服游戏,包括页游,手游,H5游戏等等。滚服游戏和大服游戏的区别在于同时游戏人数,大服游戏是有很多用户在一起玩,甚至几十上百万玩家。而滚服游戏则一般会设计游戏在线上限,比如3000,达到上限则新开一组服务器,并引导用户进入新区。 滚服模式是游戏类型,技术架构和急功近利的坑钱策略等因素共同决定的,大服游戏包括绝大部分端游,以及类COC这样类型的游戏。另外,虽然像英雄联盟,王者荣耀这样的游戏也分服架构,但是这个并不是我理解中的“滚服游戏“,首先他们虽然分服,但是每个服的人数上限也是可以高达几十万,他们并不会发生频繁的合服情况。而滚服游戏更多是通过游戏策略设计,鼓励玩...阅读全文

博文 2018-05-31 18:34:37 石匠

请教:如果设置让窗体不在任务栏里出现(测试设置窗体WS_EX_TOOLWINDOW属性无效果)

下面是测试代码,是我哪里弄错了,请高手指教,谢谢。 ```go package main import ( "github.com/lxn/walk" "github.com/lxn/walk/declarative" "github.com/lxn/win" ) func main() { form := new(walk.MainWindow) declarative.MainWindow{ AssignTo: &form, Title: "test", Size: declarative.Size{300, 300}, }.Create() setFormStyle(form) form.Run(...阅读全文

[以太坊] Mac install abigen 安装abigen

这篇文章本不该有,但是我安装abigen的经历实在是太艰辛了,还是记录下吧。 1. 正确姿势 先说正确姿势,希望你能顺利。 一般来说,安装abigen命令,只需要三步就可以搞定的,下载,编译,安装。 go get github.com/ethereum/go-ethereum cd $GOPATH/src/github.com/ethereum/go-ethereum/ make make devtools abigen --help 2. 坑一之科学上网 在执行make devtools时,需要下载相关依赖,有golang.org的,也有github的,可怜的我一会开一会关,仍然不行,原因是Makefile里是这么写的 Makefile (看到-u了吧?你一定看到了!) 我不想修改Make...阅读全文

博文 2018-10-23 20:35:01 ytxing

golang 使用 iota

iota是golang语言的常量计数器,只能在常量的表达式中使用。 iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。 举例如下: 1、iota只能在常量的表达式中使用。 fmt.Println(iota) 编译错误: undefined: iota 2、每次 const 出现时,都会让 iota 初始化为0.【自增长】 const a = iota // a=0const ( b = iota //b=0 c //c=1) 3、自定义类型 自增长常量经常包含一个自定义枚举类型,允许你依靠编译器完成自增设置。 type St...阅读全文

Goroutine协程池ants

ants是一个高性能的协程池,实现了对大规模goroutine的调度管理、goroutine复用,允许使用者在开发并发程序的时候限制协程数量,复用资源,达到更高效执行任务的效果。 功能: 1. 实现了自动调度并发的goroutine,复用goroutine 2. 提供了友好的接口:任务提交、获取运行中的协程数量、动态调整协程池大小 3. 资源复用,极大节省内存使用量;在大规模批量并发任务场景下比原生goroutine并发具有更高的性...阅读全文

一文读懂什么是进程、线程、协程

进程 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程一般由程序、数据集合和进程控制块三部分组成。 程序用于描述进程要完成的功能,是控制进程执行的指令集; 数据集合是程序在执行时所需要的数据和工作区; 程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。 进程具有的特征: 动态性:进程是程...阅读全文

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

待机任务调度与警报工具GoAlert

GoAlert 是一个待机任务调度与警报工具,支持自动上报与通知(通过 SMS 或语音通话),以在正确的时间以正确的方式自动通知到对应的负责人。 ![image](https://static.oschina.net/uploads/space/2019/0617/143154_NUY1_3820517.png) 特性: * 可以自定义 GoAlert 给他人发送通知,保证在你不方便的时候也不会错过任何警报 * 管理团队任务,控制待机人员并快速查看相关信息 * GoAlert 为现有监控和遥测系统的外部集成提供了便利的选项 * 可以通过适合移动设备的 Web UI 或简单的单字符 SMS 回复来确认和关闭警...阅读全文

开源项目 2019-07-05 12:30:01 target

golang runtime实现多核并行任务

首先我们需要明确一下并行跟并发的区别,并发一般是被内核通过时间片或者中断来控制的,遇到io阻塞或者时间片用完的时会转移线程的使用权。一个核的情况下不可能有并行的情况,因为同一时间只有一个任务在调度。 该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。 http://xiaorui.cc/2016/03/05/golang-runtime%E5%AE%9E%E7%8E%B0%E5%A4%9A%E6%A0%B8%E5%B9%B6%E8%A1%8C%E4%BB%BB%E5%8A%A1/ Golang默认所有的任务都在一个cpu核里,如果想使用多核来跑goroutine的任务,需要配置runtime.GOMAXPROCS。 GOMAXPROCS的数目根据自己任务量分配就可...阅读全文

博文 2017-04-04 19:21:47 rfyiamcool

go任务调度7(etcd的watch的用法)

监听etcd中的kv变化,常用来做集群中的配置下发、状态同步,非常有价值。 package main import ( "go.etcd.io/etcd/clientv3" "time" "fmt" "context" "go.etcd.io/etcd/mvcc/mvccpb" ) func main() { var ( config clientv3.Config client *clientv3.Client err error kv clientv3.KV watcher clientv3.Watcher getResp *clientv3.GetResponse watchStartRevision int64 watchRespChan <-chan clientv3.WatchR...阅读全文

博文 2019-04-20 18:35:10 梁十八

golang实现单链表

package main import ( "sync" "fmt" ) func main() { node := Instance() node.Name = "张三" node1 := &Node{Name: "李四"} node2 := &Node{Name: "赵武"} node3 := &Node{Name: "李刘"} InsertNode(node, node1) InsertNode(node, node2) InsertNode(node, node3) ListNode(node) } type Node struct { Name string NodePtr *Node } var node *Node var once sync.Once func Instanc...阅读全文

博文 2019-07-11 11:32:42 清晨的麦田

快递鸟单号查询自动识别接口,java对接调用示例

应用场景(1)PC端、移动端应用或网站应用集成运单物流信息查询功能时,只需要录入单号即可完成查询,无需用户输入快递公司。(2)电商网站要在快递鸟查询或者订阅运单时,可通过单号识别先行判断物流公司后,再订阅到快递鸟。API参数一、接口描述/说明(1)该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司。(2)接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询、订阅的动作。(3)接口识别会返回一家或者多家快递公司,返回的数据根据快递鸟大数据分析结果排序(4)若识别失败,快递鸟返回的匹配结果为空。(5)接口支持的消息接收方式为HTTP POST(6)请求地址:快递鸟请求系统级参数说明:​备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一...阅读全文

【面试题】从链表尾部算起,删除第n个节点

给定一个链表,从链表尾部算起,删除第n个节点,并返回链表头节点。 例如: > 给定列表:1->2->3->4->5,和 n = 2。 > 从尾部算起,删除第2个节点后,链表变为:1->2->3->5。 说明: 1. 给出的 n 总是有效的,比如不会出现负数。 2. 尽可能使用 O(n) 算法实现。 Go 示例定义: ```go /** * 定义一个单链表: * type ListNode struct { * Val int * Next *ListNode * } */ func removeNthFromEnd(head *ListNode, n int) *ListNode { } ...阅读全文

云主机与虚拟主机的区别是什么

普通虚拟主机:虚拟主机,也叫“网站空间”,就是把一台运行在互联网上的物理服务器划分成多个“虚拟”服务器,每个空间都给予相应的FTP权限和Web访问权限,以用于网站发布。 云虚拟主机:是普通虚拟主机的升级版。在云服务器基础上,使用云计算技术,更稳定、安全,可用性更强的虚拟主机。 虚拟主机的特点 1、 价格便宜。虚拟主机是标准的资源共享,性能虽然比不上VPS和服务器,但胜在价格,适合前期建设的网站。 2、 操作简便。虚拟主机的控制面板上有明确的在线解压、绑定域名、301重定向等设置,比较适合新手操作。 3、升级方便。如果在耐思尼克购买虚拟主机,主机升级只要用户在线提交申请,不用对网站进行更改,网站依然能正常运行,不够空间也不用担心。 云虚拟主机的特点 1、 通过...阅读全文

谷歌发布 Go 1.1 正式版本

谷歌Go语言开发团队今天发布了1.1正式版本。 Go是谷歌于2007年9月启动设计的编程语言,最初定位于web服务、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以帮助开发者创建并行任务。Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。 与1.0版本相比,该版本的主要改进如下: 1. 性能改进 与1.0版本相比,该版本对编译器和链接器、垃圾回收、goroutine(Go语言的并发机制)调度、map实现、部分标准库进行了优化,基于该版本构建的Go代码运行速度将会明显提升。 2. 语言本身的变化 语言本身有一些细微的变化,其中两个需要注意的变化是:放宽了return语句的限制(可以简化现有代码中多余的return语句,使程序更加简洁)、引入了方法...阅读全文

golang 实现单链表

package main //链表实现 import ( "fmt" "os" ) //定义错误常量 const ( ERROR = -1000000001 ) //定义元素类型 type Element int64 //定义节点 type LinkNode struct { Data Element //数据域 Nest *LinkNode //指针域,指向下一个节点 } //函数接口 type LinkNoder interface { Add(head *LinkNode, new *LinkNode) //后面添加 Delete(head *LinkNode, index int) //删除指定index位置元素 Insert(head *LinkNode, index int, d...阅读全文

博文 2017-02-10 10:29:25 赵雍

Go语言近况

Go语言是Google公司的实验性语言,以BSD协议开放源代码。Go语言在Inferno操作系统相关的研究工作基础上开发,最初由Rob Pike等Google工程师在2007年9月启动设计工作,在2009年11月正式对外发布。 Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。Go语言最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以方便的帮助开发者创建并行任务。Go语言具有效率极高的编译器,目前Go编译器能在Linux、FreeBSD以及Mac OS X平台下运行,但暂时没有对Windows环境提供编译支持。Go开发团队曾在博客中表示,编译完成的Go程序运行速度接近C语言实现的程序。 在今年五月份举办的Google I/O...阅读全文

博文 2014-12-08 02:00:03 aylixuan

Go语言近况

Go语言是Google公司的实验性语言,以BSD协议开放源代码。Go语言在Inferno操作系统相关的研究工作基础上开发,最初由Rob Pike等Google工程师在2007年9月启动设计工作,在2009年11月正式对外发布。 Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。Go语言最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以方便的帮助开发者创建并行任务。Go语言具有效率极高的编译器,目前Go编译器能在Linux、FreeBSD以及Mac OS X平台下运行,但暂时没有对Windows环境提供编译支持。Go开发团队曾在博客中表示,编译完成的Go程序运行速度接近C语言实现的程序。 在今年五月份举办的Google I/O...阅读全文

南京招聘Golang工程师

工作地点:南京市楚翘城,双休五险一金,10K-20K,物联网行业 核心技能: •Go, C++/C, Lua •高并发/并行处理/队列/任务调度相关工作经历 大型系统项目经验佳 还期望您可能具备: •集群, Docker部署; •Linux 基础; •JavaScript/Node.js; •内存库:Redis, mongo…; •关系数据库: Postgres, MySQL...; •MQ 相关: MQTT,CoAP...; •会 Java/C#, 有强烈学习意愿. 其他: •欢迎完美主义者/小偏执狂:-) 岗位职责: •各种姿势 Coding; •做好TDD驱动或开发者驱动测试; •任务/故障跟踪...阅读全文

数据结构——Golang实现单链表

载请注明出处:数据结构——Golang实现单链表 Golang 1. 单链表 1.1. 定义 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点; 列表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向nuLL的指针。 1.2. 优点 单个结点创建非常方便,普通的线性内存通常在创建的时候就需要设定数据的大小 结点的删除非常方便,不需要像线性结构那样移动剩下的数据 结点的访问方便,可以通过循环或者递归的方法访问到任意数据,但是平均的访问效率低于线性表。 2. Golang 实现 2.1. 相关结...阅读全文

博文 2019-01-19 18:34:44 ChainZhang

送你一份Redis书单,以后使用缓存的问题不用再问我啦!

经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程序员都可以通过使用框架很快速地搭建起一个Java Web应用,特别是近几年SpringBoot大热,干脆连配置都不需要了解了,直接一键式编译部署运行,让Java工程师的入门成本变得越来越低。 但于此同时,互联网公司对于Java的应用场景也在不断地升级换代,从单机部署再到分布式,从SOA再到微服务,Java后端技术栈变得更加庞大,对于工程师的要求也越来越高,特别是对于大公司来说更是如此,Java Web工程师已经不复存在,而取而代之的是Java后端工程师,也就是说,我们这些Java程序员不仅要写好业务代码,还要更多地掌握后端技术,除了数据库之外,像是缓存、消息队列、定时任务、微服务等技术也都是我们需要掌握的内容。 今天...阅读全文

博文 2020-05-08 23:32:48 程序员黄小斜

GC(垃圾回收)必须Stop-the-world?

GC(垃圾回收)必须Stop-the-world? 并发编程的许多困难都源于对象生存期问题,当对象在线程之间传递时,要确保它们安全地释放就变得很麻烦。因此GC可以使得并发编程变得容易。但是实GC也是一个挑战,但是一次实现,就可以解决人们手动管理内存的麻烦(C语言),大大提高的开发效率和避免了许多Bug。 但是GC也是有成本的,他会影响程序的效率,GC是一个非常挑战的工作,很多计算机科学家在上面耗费了数十年不断的提升效率。 GC算法设计时,会考虑几个重要指标: 程序吞吐量:GC对程序效率的影响,也就花费在GC的时间和程序处理正常业务的时间比; GC吞吐量:单位时间内垃圾回收的数量; 暂停时间:Stop-the-world 的时间; 并发:垃圾回收机制如何使用多核; 等等还有很多 很多人问为什么...阅读全文

博文 2019-10-30 14:04:17 _西门吹牛

GORM 关联查询

定义了一个 User 和 Company, User 中可以包含多个 Company, 如下: type User struct { ID int `gorm:"TYPE:int(11);NOT NULL;PRIMARY_KEY;INDEX"` Name string `gorm:"TYPE: VARCHAR(255); DEFAULT:'';INDEX"` Companies []Company `gorm:"FOREIGNKEY:UserId;ASSOCIATION_FOREIGNKEY:ID"` CreatedAt time.Time `gorm:"TYPE:DATETIME"` UpdatedAt time.Time `gorm:"TYPE:DATETIME"` DeletedAt ...阅读全文

博文 2019-04-14 14:34:38 jouyouyun

Golang strconv包使用

// atob.go ------------------------------------------------------------ // ParseBool 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true, True // 它接受假值:0, f, F, FALSE, false, False. // 其它任何值都返回一个错误 func ParseBool(str string) (value bool, err error) func main() { fmt.Println(strconv.ParseBool("1")) // true fmt.Println(strconv.ParseBool("t")) // true fmt.Println...阅读全文

Go语言开发分布式任务调度(更新到第三章)

微信号:new_video qq号码:2381392963资料来源网络,仅供学习使用,请勿传播。如有侵权,请联系删除。课程介绍:Golang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将.....阅读全文

博文 2019-07-15 04:02:40 天天向上学习

1.9 新特性预览:Logging, interfaces, and allocation

该文翻译自:http://commaok.xyz/post/interface-allocs/几个星期前,Peter Bourgon在golang-dev开了一个关于标准化日志记录的帖子。 日志很常用,因此性能很快提升。 go-kit日志包使用结构化日志,接口如下:type Logger interface { Log(keyvals ...interface{}) error}调用代码:logger.Log("transport", "HTTP", "addr", addr, "msg", "listening")请注意,进入日志调用的所有内容都将转换为interface{}。 这意味着它分配了不少内存。与另一个结构化日志库zap进行比较。 Zap为了避免内存分配和interface{}使...阅读全文

博文 2017-02-13 02:42:51 方圆

Golang_tag

Golang tag也就是go语言中的注解 比如 type PostBody struct { Ids []int `json:"Id__in__int"` }`json:"Id__in__int"` 这一段内容就是Ids这个属性的一个tag 我们可以通过反射来获取这个tag的值 如下所示 package main import ( "fmt" "reflect" ) type PostBody struct { Ids []int `json:"Id__in__int"` } func main() { // s := "{\"Id__in__int\":[101010,101009],\"text__in__string\":[\"开单\",\"测试页\"]}" // var pb st...阅读全文

博文 2015-06-17 20:03:52 u012807459

第一节 如何用Go实现单链表

一、概念介绍 下面这副图是我们单链表运煤车队。 每节运煤车就是单链表里的元素,每节车厢里的煤炭就是元素中保存的数据。前后车通过锁链相连,作为单链表运煤车,从1号车厢开始,每节车厢都知道后面拉着哪一节车厢,却不知道前面是哪节车厢拉的自己。第一节车厢没有任何车厢拉它,我们就叫它车头,第五节车厢后面拉其他车厢,我们称为车尾。 作为单链表它最大的特点就是能随意增加车队的长度,也能随意减少车队的长度。这是比数组公交车最大的优点。 二、Go语言实现讲解 1、节点每节车厢都由车体、绳索和煤炭构成。在Go语言中表示这种自定义组合体的类型就是结构,当然为了通用性,我们这里要把车厢转换成节点也就是元素,煤炭转换成数据,绳索转换成指针。 type Node struct { data Object next *N...阅读全文

博文 2017-10-27 07:04:53 懒人记

在Golang中对MySQL进行操作

Golang官方并没有提供数据库驱动,但通过database/sql/driver包来提供了实现驱动的标准接口。可以在Github上找到很多开源的驱动。 其中go-sql-driver/mysql是一个比较推荐的驱动,其完全支持database/sql接口。 使用这个驱动, 在项目里import进: import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) 在正式使用database/sql包之前,首先得明白sql.DB并不代表一个数据库连接,它并不会与数据库建立任何连接,也不会验证参数的合法性,要想知道DSN的合法性,需使用sql.DB实例(比如db)db.Ping() 方法, 如下: err = db.Ping() if e...阅读全文

博文 2019-03-09 14:34:39 灯风罩戟