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

高可用 Redis 服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

博文 2018-11-29 00:34:46 java成功之路

剖析nsq消息队列(一) 简介及去中心化实现原理

分布式消息队列nsq,简单易用,去中心化的设计使nsq更健壮,nsq充分利用了go语言的goroutine和channel来实现的消息处理,代码量也不大,读不了多久就没了。后期的文章我会把nsq的源码分析给大家看。 主要的分析路线如下 分析nsq的整体框架结构,分析如何做到的无中心化分布式拓扑结构,如何处理的单点故障。 分析nsq是如何保证消息的可靠性,如何保证消息的处理,对于消息的持久化是如何处理和扩展的。 分析nsq是如何做的消息的负载处理,即如何把合理的、不超过客户端消费能力的情况下,把消息分发到不同的客户端。 分析nsq提供的一些辅助组件。 这篇帖子,介绍nsq的主体结构,以及他是如何做到去中心化的分布式拓扑结构,如何处理的单点故障。 几个组件是需要先大概说一下 nsqd 消息队列的...阅读全文

博文 2019-08-30 15:34:33 li_peng

搭建高可用的Redis服务,需要注意这些方面!

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近在项目中也搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常的情况下,依然...阅读全文

博文 2018-07-25 17:35:08 Java填坑之路

免费分享阿里云负载均衡入门与产品使用指南

课程介绍 负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。 课时列表 • 课时1:负载均衡产品创建与使用限制 • 课时2:负载均衡产品结构 • 课时3:负载均衡管管理控制台基本操作 • 课时4:负载均衡产品优势与定义 • 课时5:负载均衡管理控制台监控指标的介绍 • 课时6:负载均衡管理控制台修改配置监听 • 课时7:负载均衡应用场景与名称解释 • 课时8:负载均衡证书管理常见问题 开始学习http://click.aliyu...阅读全文

高可用Redis服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。 不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。 首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现...阅读全文

博文 2019-04-15 22:34:43 java架构进阶

高可用Redis服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

博文 2019-01-04 18:34:45 JAVA高级架构开发

go语言的环境搭建,永远的HelloWorld

首先go语言作为一门编程语言,由美国贝尔实验室开发出来。但是在2008年谷歌发现了go语言的巨大潜力,从而全面的支持go语言的发展,基于谷歌对开源的一贯拥抱态度,所以go语言选择了开源方式发布,这就是对go语言一个简单的介绍。 其次学习go语言必须要安装go语言开发包,这是地址:http://pan.baidu.com/s/1skZfRy9 安装步骤,一直点下一步即可。 环境变量配置如下: (1)在系统变量框里面新添GOROOT变量名,变量值:是go开发包的安装路径,截图如下: (2)在系统变量框的Path后面追加go开发包的bin目录,截图如下: (3)在终端测试go环境变量是否配置好了,在dos里面输入go help,出现如下截图说明配置完毕: 接下来说一下go语言的开发环境(IDE),...阅读全文

博文 2018-08-13 14:31:02 rocky1996

软件开发是不是选择的框架越新越好?

软件开发是不是选择的框架越新越好?一般来说,架构越新越先进,越节省开发时间。所以如果开发新的项目,那一定要用比较新的技术,这样子会事半功倍。如果是对已有的产品进行功能的升级,就要看具体的情况。 如果新的架构与已有的架构相互兼容,那最好升级到最新的架构上去,然后再进行开发。如果新的架构与现有的业务架构不兼容,那就要看一下,这里面如果升级的话,需要多长的时间和多大的工作量?如果工作量太大,还不如重新开发的话,那就重新用最新的架构进行开发。 你比如说你在开发网页的程序,那最好是用single page application这样的技术来开发。但是,如果你以前的应用程序是multiple page application,那就可以做两种选择,一个是维护现有的项目,另一个是重新开发现有的功能,当然是用...阅读全文

博文 2019-06-05 15:34:04 Jet丁

go任务调度3(etcd协调服务、raft协议)

etcd是将数据存储在集群中的高可用k-v存储。允许应用实时监听存储中的k-v变化。能容忍单点故障,能够应对网络分区。 (raft是一个分布式协议,管理的是日志;etcd管理的是k-v,把k-v放到日志里,kv就编程分布式集群了)(调用者写入请求发给leader请求写入k-v,leader会将日志实时向follower们复制,leader不会立即返回给调用者,会马上往集群follower做日志拷贝。当日志被复制给N+1个节点后(即大多数),本地提交(也就是告诉客户端提交成功),返回给调用者(客户端),为什么复制给N+1,而不是2N+1后就告诉客户端成功了呢?这就是大多数协议,也就是抽屉理论的重要表现)(一旦完成提交,leader会周期性把自己的提交信息告诉所有follower,这样,其他fo...阅读全文

博文 2019-04-19 20:35:11 梁十八

正则表达式优化

正则表达式优化 ——《精通正则表达式》阅读笔记 [TOC] 第4章:表达式的匹配原理 引擎 DFA (Deterministic Finite Automaton 确定有穷自动机): 常见的只有MySQL,文本主导,不支持反向引用和捕获括号,但快 传统型 NFA(Non-非): 大多数语言,表达式主导,编译快,内存少,写法不同有性能差异 标准 POSIX NFA: leftmost-longest,尝试所有确保最长 golang leftmost-first和leftmost-first都支持 混合:Tcl 等 规则 最左优先,尽可能多(匹配优先) 回溯 NFA 有两个可能时会根据 匹配优先* 还是 忽略优先*? 走其中一个分支,并保存备用状态 如果不成功再回溯尝试另一个分支 第5章:正则表...阅读全文

博文 2019-08-04 19:02:40 林万程

ubuntu /elementary os下sublime text3 配置go开发环境

安装go开发包 参考 http://blog.csdn.net/wdy_yx/article/details/52803773 安装sumlime text3 下载安装包 sudo dpkg -i **** 配置开发环境 安装Package Control 参见该教程 ctrl + `输入: import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' + '1e3d39e33b79698005270310898eea76'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.requ...阅读全文

博文 2016-11-18 14:00:02 KingEasternSun

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

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

高可用 Redis 服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

博文 2018-10-07 21:34:39 Java填坑之路

Golang strconv包使用

开发十年,就只剩下这套Java开发体系了 >>> // 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(...阅读全文

博文 2018-09-23 00:33:08 路人甲777

高可用Redis服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

习惯不同语言以太坊开发者可选择客户端

## 为什么会有多种类型的客户端? 在以太坊早期的工程中,已经在多种不同的操作系统上实现了多个不同的客户端,这对整个以太坊的生态系统来说是巨大的胜利。它让我们验证了协议的明确性(在以太坊 [黄皮书](https://github.com/ethereum/yellowpaper) 中指明),向新的革新敞开大门,也让我们都保持诚实。然而,这也让很多新用户倍感困扰,因为自始至终也没有一个“以太坊安装包”让他们直接使用。 截止到2016年9月,最受欢迎的两个客户端分别是: [Go客户端(go-ethereum)](http://ethdoc.cn/ethereum-clients/go-ethereum/index.html#go-ethereum) 和 [Rust客户端(Parity)](htt...阅读全文

博文 2018-06-09 12:19:57 hubwiz

Go语言单链表

package main import "fmt" type Node struct { data int next *Node } func Shownode(p *Node){ //遍历 for p != nil{ fmt.Println(*p) p=p.next //移动指针 } } func main() { var head = new(Node) head.data = 0 var tail *Node tail = head //tail用于记录最末尾的结点的地址,刚开始tail的的指针指向头结点 for i :=1 ;i<10;i++{ var node = Node{data:i} (*tail).next = &node tail = &node } Shownode(h...阅读全文

博文 2019-12-25 21:33:13 huang_he_87

golang 简单web server

package main import ( "encoding/json" "html/template" "log" "net/http" ) func main() { // render template http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { tpl, err := template.ParseFiles("index.html") if err != nil { log.Println("parse template err->", err) return } var name string = "hello" var users []string = []string{"zhangsa...阅读全文

博文 2019-12-10 17:33:15 就超棒

Golang实现简单爬虫框架(3)——简单并发版

在上篇文章Golang实现简单爬虫框架(2)——单任务版爬虫中我们实现了一个简单的单任务版爬虫,对于单任务版爬虫,每次都要请求页面,然后解析数据,然后才能请求下一个页面。整个过程中,获取网页数据速度比较慢,那么我们就把获取数据模块做成并发执行。在项目的基础上,实现多任务并发版爬虫。 项目github地址:https://github.com/NovemberChopin/golang-crawler, 回滚到相应记录食用,效果更佳。 1、项目架构 首先我们把但任务版爬虫架构中的Fetcher模块和Parser模块合并成一个Worker模块,然后并发执行Worker模块 批注 2019-05-22 090404.png 然后得到并发版的架构图: 批注 2019-05-22 091229.png...阅读全文

博文 2019-05-22 17:34:52 盐的甜

高可用Redis服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

Golang实现简单爬虫框架(2)——单任务版爬虫

上一篇博客《Golang实现简单爬虫框架(1)——项目介绍与环境准备》中我们介绍了go语言的开发环境搭建,以及爬虫项目介绍。 本次爬虫爬取的是珍爱网的用户信息数据,爬取步骤为: 1.进入珍爱网城市页面爬取所有的城市信息 2.进入城市详情页爬取用户URL地址信息 3.进入用户详情页爬取所需要的用户信息 注意:在本此爬虫项目中,只会实现一个简单的爬虫架构,包括单机版实现、简单并发版以及使用队列进行任务调度的并发版实现,以及数据存储和展示功能。不涉及模拟登录、动态IP等技术,如果你是GO语言新手想找练习项目或者对爬虫感兴趣的读者,请放心食用。 1、单任务版爬虫架构 首先我们实现一个单任务版的爬虫,且不考虑数据存储与展示模块,首先把基本功能实现。下面是单任务版爬虫的整体框架 下面是具体流程说明: 1...阅读全文

博文 2019-05-22 09:34:39 jsfantasy

时序数据库 InfluxDB(七)

相关文章:时序数据库 InfluxDB(一)时序数据库 InfluxDB(二)时序数据库 InfluxDB(三)时序数据库 InfluxDB(四)时序数据库 InfluxDB(五)时序数据库 InfluxDB(六) 单点故障和容灾备份 InfluxDB 开源的社区版本面临的最大的问题就是单点故障和容灾备份,有没有一个简单的方案去解决这个问题呢? 既然有单点故障的可能,那么索性写入多个节点,同时也解决了容灾备份的问题: 1、在不同的机器上配置多个 InfluxDB 实例,写入数据时,直接由客户端并发写入多个实例。(为什么不用代理,因为代理自身就是个单点)。 2、当某个 InfluxDB 实例故障而导致写入失败时,记录失败的数据和节点,这些失败的数据可以临时存储在数据库、消息中间件、日志文件等等...阅读全文

MySQL基本操作

golang调用MySQL数据库:使用MySQL数据库 go语言中文网 Golang Mysql笔记(二)--- CURD基础 操作 语句 创建数据库 create database dbname; 删除数据库 drop database dbname; 选择数据库 use dbname; 创建数据表 create table table_name(column_name column_type); 删除数据表 drop table table_name; 删除表全部数据,保留表结构 truncate table table_name; 删除带条件的删除,表结构不变 delete from table_name where xxx(条件); 插入数据 insert into table_na...阅读全文

博文 2018-11-04 12:34:45 喵喵小阳

好程序员大数据培训之ZooKeeper应用-解决分布式系统单点故障

好程序员大数据培训技术ZooKeeper应用-解决分布式系统单点故障,大数据课程涵盖Java、spark、Hadoop等内容,而不是Java中涵盖大数据,现在是大数据的时代,学习大数据课程之前必须先了解大数据课程大纲,否则很容易学到假的大数据课程。 今天小编给大家分享一下:ZooKeeper应用--解决分布式系统单点故障 1.单点故障问题 什么是分布式系统中的单点故障:通常分布式系统采用主从模式,就是一个主控机连接多个处理节点。主节点负责分发任务,从节点负责处理任务,当我们的主节点发生故障时,那么整个系统就都瘫痪了,那么我们把这种故障叫作单点故障。如下图​​ 传统方式是采用一个备用节点,这个备用节点定期给当前主节点发送ping包,主节点收到ping包以后向备用节点发送回复Ack,当备用节点收...阅读全文

博文 2019-04-01 14:13:44 hcxy

高可用Redis服务架构分析与搭建

基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用。不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经常出问题,导致我这边的业务跟着遭殃。最近我所在的项目中也自己搭了一套小型的“高可用”Redis服务,在此做一下自己的总结和思考。首先我们要定义一下对于Redis服务来说怎样才算是高可用,即在各种出现异常...阅读全文

从零学习 Go 语言(03):数据类型之整型与浮点型

Hi,大家好呀,我是一个刚学习 Go 语言不久的新手,在入门 Golang 的这段时间里,我写了很多详细的学习笔记,很适合新手学习噢。这些文章已经发布在我的个人微信公众号里:《Go编程时光》里,今天开始将文章内容搬运到这里,希望有更多的人看到,给更的人带来帮助,但是这里文章会相对滞后,想获取最新文章,可以前往关注《Go编程时光》,请放心关注,这是一个纯分享的号,完全没有广告。 **系列导读 ** [从零学习 Go 语言(01):一文搞定开发环境的搭建](https://studygolang.com/articles/27365) [从零学习 Go 语言(02):学习五种变量创建的方法](https://studygolang.com/articles/27432) --- ## 1. 整型...阅读全文

博文 2020-03-24 19:39:27 hello_wbm

Golang的单引号、双引号与反引号的用法解析

Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String、C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用UTF-8编码的变宽字符序列,它的每一个字符都用一个或多个字节表示 即:一个Go语言字符串是一个任意字节的常量序列。 Golang的双引号和反引号都可用于表示一个常量字符串,不同在于: 双引号用来创建可解析的字符串字面量(支持转义,但不能用来引用多行) 反引号用来创建原生的字符串字面量,这些字符串可能由多行组成(不支持任何转义序列),原生的字符串字面量多用于书写多行消息、HTML以及正则表达式 而单引号则用于表示Golang的一个特殊类型:rune,类似其他语言的byte但又不完全一样,是指:码...阅读全文

博文 2019-03-22 05:34:39 Lateautumn_Lin

windows下配置Go+Eclipse开发环境

最近开始学习研究Go语言,工欲善其事,必先利其器,想要实现第一个 Hello World,咱们就得先把开发环境配置好! 我是windows下使用Eclipse开发,在安装配置开发环境时遇到一些问题,记录下来,以便遇到相同问题的朋友能参考 一、下载安装开发包 1.第一步,安装Go语言的开发包,下载地址:https://studygolang.com/dl 选择合适的安装包,我的系统是64位的win7,因此选择了windows-amd64.msi,下载完后双击安装程序,我是默认安装到C:\Go下。 2.第二步,安装完成后默认在系统环境变量Path后添加了Go安装目录下的bin目录C:\Go\bin,并添加了环境变量GOROOT,值为Go的安装根目录C:\Go; 此时再在环境变量中添加Go的工作空...阅读全文

博文 2018-06-02 16:30:00 yefeng654321

2.1 golang变量使用报错

package main import ( "fmt" ) func main() { var a = 1 } 会报错,因为变量定义了一定要用,golang内部规定的,可能是担心浪费内存吧 package main import ( "fmt" ) func main() { var a = 'a' fmt.Print(a) } 输入单个字符会自动转换成asc2的二进制码 ,结果是97 image.png package main import ( "fmt" ) func main() { var a = 'a' var b = 'bbbb' fmt.Print(a) } 单引号是单字符,如果在单引号放多字符会报错,如果需要放多字符,需要放双引...阅读全文

博文 2018-07-17 10:34:46 梁大路

Golang实现简单爬虫框架(3)——简单并发版

在上篇文章Golang实现简单爬虫框架(2)——单任务版爬虫中我们实现了一个简单的单任务版爬虫,对于单任务版爬虫,每次都要请求页面,然后解析数据,然后才能请求下一个页面。整个过程中,获取网页数据速度比较慢,那么我们就把获取数据模块做成并发执行。在项目的基础上,实现多任务并发版爬虫。 项目github地址:https://github.com/NovemberCh..., 回滚到相应记录食用,效果更佳。 1、项目架构 首先我们把但任务版爬虫架构中的Fetcher模块和Parser模块合并成一个Worker模块,然后并发执行Worker模块 然后得到并发版的架构图: 在并发版爬虫中,会同时执行多个Worker,每个Worker任务接受一个Request请求,然后请求页面解析数据,输出解析出的Re...阅读全文

博文 2019-05-22 11:34:41 jsfantasy

手摸手教你用go写爬虫之三(单任务版爬虫1.0)

> 本文介绍爬虫相关流程和搭建 ### 1. 项目需求 > 我们的需求分三步: 1. 从租房网站上获取到杭州市的所有区的链接和名称 2. 根据每个区的链接抓取第一页列表内容,找到房屋的链接和名称 3. 根据第2步中获取的链接,抓取对应的房屋的具体信息 ### 2. 项目流程 > step 1 从项目需求中可以分解出俩个信息 三步中均需要抓取 那么就要提供 url 三步中均需要解析 那么需要提供解析函数 func > 每一步解析到的结果我们需要暂存下来,如果含有链接需要继续抓取 这里我们抽象出两个结构体 ```go //请求结构体 type Request struct { Url string ParserFunc func(string) RequestResult } //结果解析结构体...阅读全文

博文 2019-02-20 20:13:19 wujiangwei

Golang简单的pipline

package main import ( "fmt" ) func main() { multiply := func(values []int, multiplier int) []int { multipliedValues := make([]int, len(values)) for i, v := range values { multipliedValues[i] = v * multiplier } return multipliedValues } add := func(values []int, additive int) []int { addedValues := make([]int, len(values)) for i, v := range values {...阅读全文

博文 2019-06-16 21:02:39 FredricZhu

【go源码分析】strings.go 里的那些骚操作

go version go1.11 darwin/amd64/src/strings/strings.go strings.go 文件中定义了近40个常用的字符串操作函数(公共函数)。以下是主要的几个函数。 函数 简介 Index(s, substr string) int 返回 substr 在 s 中第一次出现的位置,不存在返回 -1;采用RabinKarp算法 Split(s, sep string) []string 根据 sep 把字符串 s 进行切分,返回切分后的数组 Join(a []string, sep string) string 跟 Split 功能刚好相反 Repeat(s string, count int) string 返回字符串 s 重复 count 次得到的...阅读全文

详解SLB、EIP、NAT网关之间区别, 合理选择云上公网入口

摘要: 概述 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? **点此查看原文:http://click.aliyun.com/m/41840/** **开始** 阿里云的公网入口产品共有三个,SLB、EIP、NAT网关,这几个产品都可以作为云上资源的公网入口,他们之间有何区别,又分别应该在什么场景下使用呢? 概念 -- **负载均衡SLB** **对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。** 可见云计算中的负载均衡除了通过流量分发让后端的服务器负载均衡,还有两个重...阅读全文

Golang单例模式(非线程安全)

singleton.go // singleton.go package singleton type singleton struct { count int } var instance *singleton func GetInstance() *singleton { if instance == nil { instance = new(singleton) } return instance } func (s *singleton) AddOne() int { s.count++ return s.count } func (s *singleton) GetCount() int { return s.count } singleton_test.go // singlet...阅读全文

博文 2019-06-18 19:32:44 FredricZhu

Golang实现简单爬虫框架(2)——单任务版爬虫

Golang实现简单爬虫框架(2)——单任务版爬虫 上一篇博客Golang实现简单爬虫框架(1)——项目介绍与环境准备 )中我们介绍了go语言的开发环境搭建,以及爬虫项目介绍。 本次爬虫爬取的是珍爱网的用户信息数据,爬取步骤为: 1.进入珍爱网城市页面爬取所有的城市信息 2.进入城市详情页爬取用户URL地址信息 3.进入用户详情页爬取所需要的用户信息 注意:在本此爬虫项目中,只会实现一个简单的爬虫架构,包括单机版实现、简单并发版以及使用队列进行任务调度的并发版实现,以及数据存储和展示功能。不涉及模拟登录、动态IP等技术,如果你是GO语言新手想找练习项目或者对爬虫感兴趣的读者,请放心食用。 1、单任务版爬虫架构 首先我们实现一个单任务版的爬虫,且不考虑数据存储与展示模块,首先把基本功能实现。下...阅读全文

博文 2019-05-22 01:34:40 盐的甜

构建生产环境可用的高可用kubernetes集群

kubernetes集群三步安装 构建生产环境可用的高可用kubernetes集群 | sealos项目地址 特性 [x] 支持任意节点的etcd集群自动构建,且etcd集群使用安全证书,通过static pod方式启动,这样可以通过监控pod来监控etcd集群健康状态 [x] 支持多master节点,允许任意一台master宕机集群功能不受影响 [x] calico使用etcd集群,配置安全证书,网络管控数据无单点故障 [x] 包含dashboard, heapster coreDNS addons, coreDNS双副本,无单点故障 [x] 使用haproxy负载master节点,同样是用static pod,这样可通过统一监控pod状态来监控haproxy是否健康 [x] haprox...阅读全文

剖析nsq消息队列(一) 简介及去中心化实现原理

分布式消息队列nsq,简单易用,去中心化的设计使nsq更健壮,nsq充分利用了go语言的goroutine和channel来实现的消息处理,代码量也不大,读不了多久就没了。后期的文章我会把nsq的源码分析给大家看。 主要的分析路线如下 分析nsq的整体框架结构,分析如何做到的无中心化分布式拓扑结构,如何处理的单点故障。 分析nsq是如何保证消息的可靠性,如何保证消息的处理,对于消息的持久化是如何处理和扩展的。 分析nsq是如何做的消息的负载处理,即如何把合理的、不超过客户端消费能力的情况下,把消息分发到不同的客户端。 分析nsq提供的一些辅助组件。 这篇帖子,介绍nsq的主体结构,以及他是如何做到去中心化的分布式拓扑结构,如何处理的单点故障。 几个组件是需要先大概说一下 nsqd 消息队列的...阅读全文

博文 2019-08-30 15:52:43 li-peng

golang学习笔记一(go语言环境搭建)

Go环境搭建 1 下载安装包 go语言的官方下载地址是:官方网站 ,如果打不开,可以使用这个地址:镜像网站。因为我是linux系统,所以选择go1.9.linux-amd64.tar.gz 2 我安装的目录是/usr/local/go,所以使用命令 tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz,这个一般需要root身份或者sudo权限,解包之后,/usr/local/就会有一个go目录,go目录下应该是有bin,src,doc等目录。 3 配置环境变量,要是想要机器上的所有用户都生效,那么需要在/etc/profile中配置,如果只要当前用户生效,那么就只需要在~/.profile文件中配置下边两行即可 export GOROOT=/usr/...阅读全文

博文 2017-10-11 03:03:16 成长中的小白

Golang学习 - unicode/utf8 包

// 编码所需的基本数字 const ( RuneError = '\uFFFD' // 错误的 Rune 或 Unicode 代理字符 RuneSelf = 0x80 // ASCII 字符范围 MaxRune = '\U0010FFFF' // Unicode 码点的最大值 UTFMax = 4 // 一个字符编码的最大长度 ) // 将 r 转换为 UTF-8 编码写入 p 中(p 必须足够长,通常为 4 个字节) // 如果 r 是无效的 Unicode 字符,则写入 RuneError // 返回写入的字节数 func EncodeRune(p []byte, r rune) int // 解码 p 中的第一个字符,返回解码后的字符和 p 中被解码的字节数 // 如果 p 为空,则...阅读全文

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

Golang面试之Shell

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。 引用 Shell 教程 Shell 变量 定义变量 定义变量变量名不加美元符号,如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头; 中间不能有空格,可以使用下划线...阅读全文

博文 2020-05-12 01:32:52 网管同学

3. Go语言中的整型与浮点型

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 系列导读 1. 一文搞定Go语言开发环境的搭建 2. Go 语言中五种变量创建的方法 1. 整型 Go 语言中,整数类型可以再细分成10个类型,为了方便大家学习,我将这些类型整理成一张表格。 int 和 uint 的区别就在于一个 u,有 u 说明是无符号,没有 u 代表有符号。 解释这个符号的区别 以 int8 和 uint8 举例,8 代表 8个bit,能表示的数值个数有 2^8 = 256。 uint8 是无符号,能表示的都是正数,0-255,刚好256个数。 int8 是有符号,既可以正数,也可以负数,那怎么...阅读全文

博文 2020-03-27 14:34:36 王一白

「Go」搭建开发环境

不积跬步,无以至千里;不积小流,无以成江海。 码字不易,点赞再看。 万里长征第一步,搭建go的开发环境,本文基于1.14.2 Go语言1.14版本之后推荐使用go modules管理依赖,也不再需要把代码写在GOPATH目录下了。是不是很赞 image.png 下载 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 根据自己系统,自行选择安装。推荐下载可执行文件版,一路 Next image.png 检查 安装完后,打开终端 输入 go version 查看安装Go的版本 image.png GOROOT 和 GOPATH GOROOT 和 GOPATH 都是环境变量,其中GOROOT是我们安装g...阅读全文

博文 2020-04-15 11:33:08 不住隔壁的王老师

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...阅读全文

博文 2019-01-28 15:34:50 小马哥_Magical

撮合引擎开发:解密黑箱流程

撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 业务流程 前面的几篇文章已经陆续讲到了黑箱内部的一些设计,包括核心的软件结构、数据结构、目录结构等。而从本小节开始,我们将会更加深入,来解密黑箱内部的更多设计和实现细节。 解密黑箱的第一步就是要清楚其内部对数据的处理流程是怎样的。当我们要设计一个新系统的时候,也是一样的,第一步要梳理清楚业务流程和数据流向。对撮合引擎来说,就是要了解:从输入到输出,中间都经过了哪些处理流程。 前面的文章已经讲过,本撮合引擎定义了三种输入:开启撮合、处理订单、关闭撮合。后面就分别来看看这三种输入背后的流程。 开启撮合 开启撮合即是开启某个交易标的(交易对)的撮合引擎,未开启撮合的交易标的...阅读全文

博文 2019-11-28 12:34:13 Keegan小钢

golang快速入门[2.3]-go语言开发环境配置-linux

golang快速入门[2.3]-go语言开发环境配置-linuxlinux安装Go语言开发包默认读者会使用linux的基本操作配置go语言的开发环境的第一步是要在go官网下载页面下载开发包linux需要下载tar.gz压缩文件这里我们下载的是 64 位的开发包,如果读者的电脑是 32 位系统或者有特殊的需求,则需要下载 32 位的开发包在上图所示页面中向下滚动即可找到 32 位开发包的下载地址,如下图所示注意,如果在ubuntu这样有图形化界面的linux操作系统,我们可以直接下载没有图形化界面时,我们需要在命令行中操作第一步:下载开发包>> wget https://dl.google.com/go/go1.13.7.linux-amd64.tar.gz --2020-02-06 14:1...阅读全文

博文 2020-02-07 19:33:11 jonson_jackson

golang快速入门[2.3]-go语言开发环境配置-linux

golang快速入门[2.3]-go语言开发环境配置-linuxlinux安装Go语言开发包默认读者会使用linux的基本操作配置go语言的开发环境的第一步是要在go官网下载页面下载开发包linux需要下载tar.gz压缩文件这里我们下载的是 64 位的开发包,如果读者的电脑是 32 位系统或者有特殊的需求,则需要下载 32 位的开发包在上图所示页面中向下滚动即可找到 32 位开发包的下载地址,如下图所示注意,如果在ubuntu这样有图形化界面的linux操作系统,我们可以直接下载没有图形化界面时,我们需要在命令行中操作第一步:下载开发包>> wget https://dl.google.com/go/go1.13.7.linux-amd64.tar.gz --2020-02-06 14:1...阅读全文

博文 2020-02-07 19:33:10 jonson_jackson

Go语言中其他数据与字符串类型的转换

1 概述 Go语言是强类型语言,因此总会需要将字符串转成需要的类型。比如整型和字符串转换,字符串和布尔型的转换等。本文就介绍如何完成这些转换,以下是Go语言关于字符串转换的整理说明,主要是与切片类型的转换,和 strconv 包的使用。 2 与切片的转换 切片类型可以和字符串类型相互转换。 fmt.Println([]rune("Hello小韩说课")) // [72 101 108 108 111 23567 38889 35828 35838] fmt.Println(string([]rune{72, 101, 108, 108, 111, 23567, 38889, 35828, 35838})) // Hello小韩说课 fmt.Println([]byte("Hello")) /...阅读全文

博文 2018-10-28 07:35:09 小韩说课

爬虫性能分析及优化

前两天我们写了单任务版爬虫爬取了珍爱网用户信息,那么它的性能如何呢? 我们可以通过网络利用率看一下,我们用任务管理器中的性能分析窗口可以看到下载速率大概是保持在了200kbps左右,这可以说是相当慢了。 我们针对来通过分析单任务版爬虫的设计来看下: 从上图我们可以看出,engine将request从任务队列取出来,送到Fetcher取获取资源,等待数据返回,然后将返回的数据送到Parser去解析,等待其返回,把返回的request再加到任务队列里,同时把item打印出来。 慢就慢在了没有充分利用网络资源,其实我们可以同时发送多个Fetcher和Pareser,等待其返回的同时,可以去做其他的处理。这一点利用go的并发语法糖很容易实现。 上图中,Worker是Fetcher和Parser的合并...阅读全文

golang-nsq系列(一)--初识

nsq 最初是由 bitly 公司开源出来的一款简单易用的分布式消息中间件,它可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息。 它具有以下特性: 分布式。它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。 易于扩展。它支持水平扩展,没有中心化的消息代理(Broker),内置的发现服务让集群中增加节点非常容易。 运维方便。它非常容易配置和部署,灵活性高。 高度集成。现在已经有官方的Golang、Python和JavaScript客户端,社区也有了其他各个语言的客户端库方便接入,自定义客户端也非常容易。 1. 首先到官方文档看用法: https://nsq.io/overview/quick... 下载对应的二进制可执行文件...阅读全文

博文 2019-08-18 21:02:38 热爱coding的稻草