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

藏在正则表达式里的陷阱

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。为了弄清楚复现问题,我们将其中的关键代码摘抄出来,做了个简单的单元测试。public static void main(String[] args) { String badRegex = "^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]:...阅读全文

博文 2018-06-22 22:34:38 远方的梦Java

兄弟连区块链技术培训分享Go语言笔记-控制流

Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。 兄弟连Go语言+区块链培训课程共计22周学习时长,划分为9个学习阶段,即区块链主流语言-Go语言开发实战、区块链后端技术体系-Go语言高并发和服务器开发、Go开发区块链公链(区块链密码学、分布式编程、共识算法、基本概念,Golan公链开发)、eth与智能合约与DAPP开发、区块链分布式应用开发、区块链系统框架开发-超级账本与区块链3.0EOS、Go与区块链面试强化和高级企业级项目实战。控制语句条件语句条件语句不需要使用括号将条件包含起来(...阅读全文

博文 2018-08-28 14:35:30 兄弟连区块链培训

HDU 1824 Let's go home(2-sat)

HDU 1824 Let's go home 题目链接 思路:把表达式拆分掉,一队拆成a^b & a^c, 然后建图跑2-sat即可 代码: #include #include #include #include #include using namespace std; const int MAXNODE = 3005; struct TwoSet { int n; vector g[MAXNODE * 2]; bool mark[MAXNODE * 2]; int S[MAXNODE * 2], sn; void init(int tot) { n = tot * 2; for ...阅读全文

博文 2016-01-30 06:00:00 u011217342

go任务调度4(etcd安装和基本使用)

下载,解压,进入目录,运行: [root@bogon etcd-v3.3.12-linux-amd64]# ./etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'(本地etcd的端口) etcd控制工具: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl (前面需要一个环境变量ETCDCTL_API=3)put、get、del、--prefix: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl put "n...阅读全文

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

浅谈分布式计算的开发与实现(一)

## 介绍 分布式计算简单来说,是把一个大计算任务拆分成多个小计算任务分布到若干台机器上去计算,然后再进行结果汇总。 目的在于分析计算海量的数据,从雷达监测的海量历史信号中分析异常信号(外星文明),淘宝双十一实时计算各地区的消费习惯等。 海量计算最开始的方案是提高单机计算性能,如大型机,后来由于数据的爆发式增长、单机性能却跟不上,才有分布式计算这种妥协方案。 因为计算一旦拆分,问题会变得非常复杂,像一致性、数据完整、通信、容灾、任务调度等问题也都来了。 举个例子,产品要求从数据库中100G的用户购买数据,分析出各地域的消费习惯金额等。 如果没什么时间要求,程序员小明就写个对应的业务处理服务程序,部署到服务器上,让它慢慢跑就是了,小明预计10个小时能处理完。 后面产品嫌太慢,让小明想办法加快到...阅读全文

博文 2019-09-05 15:46:22 Java_the_one

Golang 的跨平台交叉编译浅析

什么是跨平台交叉编译 交叉编译 通俗地讲就是在一种平台上编译出其他几个平台能够运行的程序(通常指系统和CPU架构的不同) 交叉编译通常使用在分发时,编译出多个平台可用的二进制程序,比如在Linux下编译出可以在Win下可以使用的EXE程序。 本地编译 本地编译是指当前系统所配置编译器根据当前系统配置编译出在当前系统所适用的执行程序(部分其他语言本地编译时可能会由于扩展包含的问题,无法在同平台其他机器运行)。 所以如果要生成在非本机的其他平台和系统的程序,就需要用到交叉编译(交叉编译工具链)。 交叉编译工具链 > 交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。 > 有时出于减小 libc 库大小的考虑,也...阅读全文

博文 2017-12-02 05:03:06 dingdayu

golang 基础 strings 包(36)

square-gopher.png 对于字符串操作是 web 开发再常见不过操作,可能我们通过对字符串拼接,截取以及拆分来展示数据呈现给用户。 Split rec := "zidea,angularjs,javascript" for _, info := range strings.Split(rec,","){ fmt.Printf("%s|",info) } 通过 Split 按按指定的分隔符(,)将字符串进行拆分为集合形式,可以使用 SplitN() 指定此处 rec := "zidea,angularjs,javascript" for _, info := range strings.SplitN(rec,",",2){ fmt.Printf("%s|",info) } zide...阅读全文

博文 2019-04-26 01:34:40 zidea

Golang实现简单爬虫框架(5)——项目重构与数据存储

前言 在上一篇文章《Golang实现简单爬虫框架(4)——队列实现并发任务调度》中,我们使用用队列实现了任务调度,接下来首先对两种并发方式做一个同构,使代码统一。然后添加数据存储模块。 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目重构 (1)并发引擎 通过分析我们发现,两种不同调度的区别是每个worker一个channel还是 所有worker共用一个channel,所以我们在接口中定义一个函数WorkerChan(),用来决定这件事,即worker一个channel还是 所有worker共用一个channel。此时ConfigMasterWorkerCh...阅读全文

博文 2019-05-30 21:34:51 盐的甜

Golang实现简单爬虫框架(4)——队列实现并发任务调度

前言 在上一篇文章《Golang实现简单爬虫框架(3)——简单并发版》中我们实现了一个最简单并发爬虫,调度器为每一个Request创建一个goroutine,每个goroutine往Worker队列中分发任务,发完就结束。所有的Worker都在抢一个channel中的任务。但是这样做还是有些许不足之处,比如控制力弱:所有的Worker在抢同一个channel中的任务,我们没有办法控制给哪一个worker任务。 其实我们可以自己做一个任务分发的机制,我们来决定分发给哪一个Worker 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目架构 在上一篇文章实现简单并发...阅读全文

博文 2019-05-27 12:34:37 jsfantasy

Golang learning 控制语句

和其他编程语句一样的控制语句 我们一起来看 if else b := 1 if b > 0{ fmt.Println(b) }else { fmt.Println(b) } if x := 7;x > 0{ 支持表达式运算,顺序执行,必须用;作为结束语句,这个还是很新颖的 fmt.Println(x) } switch a := 1 b : = 2 switch b { 支持单个匹配,多个匹配,变量匹配,不能出现重复常量 case 1:fmt.Println(b) case 2,4:fmt.Println(b) case b:fmt.Println(b) default: fmt.Println(b) } for for i := 0; i < 10 ; i ++ { fmt.Println...阅读全文

博文 2019-05-10 19:35:11 wangyongyue

进程、线程和协程

姓名:张志文 学号:19021210649 链接:https://www.jianshu.com/p/80bde972196d [嵌牛导读] 计算机中的线程,进程和协程之间存在着许多的联系和区别 [嵌牛鼻子] 线程;进程;协程 [嵌牛提问] 什么是线程、进程和协程? 进程 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程一般由程序、数据集合和进程控制块三部分...阅读全文

博文 2019-10-28 23:32:59 aside section._1OhGeD

33.蛤蟆笔记go语言——switch关键字

33.蛤蟆笔记go语言——switch关键字 Go的switch非常灵活。表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项,而如果switch没有表达式,它会匹配true。这产生一种可能——使用switch编写if-else-if-else判断序列。 它不会匹配失败后自动向下尝试,但是可以使用 fallthrough 使其这样做。 用default可以指定当其他所有分支都不匹配的时候的行为。 代码示例: package main import "fmt" import "time" func main() { i := 2 fmt.Print("write", i, " as ") switchi { case 1: fmt.Println("one") case 2: fmt.P...阅读全文

博文 2016-07-09 11:00:07 notbaron

Go For It ,一个灵活的待办事项列表程序

Go For It,是我们开源工具系列中的第十个工具,它将使你在 2019 年更高效,它在 Todo.txt 系统的基础上构建,以帮助你完成更多工作。每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然,“抛弃旧的,拥抱新的”的态度促成了这一切。通常这时的建议严重偏向闭源和专有软件,但事实上并不用这样。 这是我挑选出的 19 个新的(或者对你而言新的)开源工具中的第 10 个工具来帮助你在 2019 年更有效率。 Go For It有时,人们要高效率需要的不是一个花哨的看板或一组笔记,而是一个简单、直接的待办事项清单。像“将项目添加到列表中,在完成后检查”一样基本的东西。为此,纯文本 Todo.txt 系统可能是最容易使用的系统之一,几乎所有系统都支持它。 Go Fo...阅读全文

博文 2019-03-16 00:35:18 wx5c61773e59d70

Js、Golang正则匹配指定规则里的内容

1、 JS let content = '烟花易冷人事易分 而你在问我是否还认真 千年后累世情深还有谁在等 ――《${name}》${time}' var reg = /\$\{(\w+)\}/g let variableArrey = content.match(reg) console.log(variableArrey) VM456:7 (2) ["${name}", "${time}"] 结果 ["${name}", "${time}"] 规则里的内容,重点:.replace(reg,'$1') let content = '烟花易冷人事易分 而你在问我是否还认真 千年后累世情深还有谁在等 ――《${name}》${time}' var reg = /\$\{(\w+)\}/g le...阅读全文

博文 2020-04-02 09:32:58 承诺一时的华丽

正则表达式

菜鸟教程正则表达式教程 RE2正则表达式(golang执行的是RE2标准的正则表达式) go语言中单行模式的用法可以查询golang官方文档 单行模式:?s: (.?) s表示单行模式,因为"."用来匹配所有字符但不包含换行符,使用单行模式可以全匹配;".?"表示执行最少的匹...阅读全文

博文 2019-07-28 13:32:38 七八个星天

0. Go Introduce

Go 是一种开源的编程语言,它试图使编写简单、可靠、高效软件变得更加容易。 fiveyears.jpg 官方站点为 https://go.googlesource.com/go, 也可以访问 GitHub 镜像 。国内有 Go语言中文网、Golang中国 等不错的学习交流平台。 Golang 安装可以从 https://studygolang.com/dl 选择自己对应的平台或系统下载安装任何版本。 Golang 开发环境可以自行Google or Bing,参照热心网友教程搭建,鉴于 Go 官方站点在墙外,可以从 Golang中国第三方包 获取需要Go插件包,具体请阅读链接说明。 Golang 可参考书籍很多,推荐阅读《Go程序设计语言》,zmazon 购买 此处留痕,希望自己走的更远,2...阅读全文

(转载)反应式编程在微服务下的重生

反应式编程在好几年前就已经出现了,它原理是基于反应式编****宣言。但是,由于反应式编程推广速度比较缓慢,导致很多人现在对其不是很了解。 反应式编宣言:** https://www.reactivemanifesto.org 本文将从微服务角度阐述反应式编程,在深入解读之前,先为大家简单地介绍一些反应式编程的基本概念。 反应式编程概念简化版 1. 设计思想 反应式编程的提出,是在分布式编程刚兴起不久。当时没有各种 PaaS 平台,而分布式系统中,常常出现一个节点出问题,导致整个系统瘫痪的情况。所以,反应式编程的思想是:不等不靠,即当有一个节点慢下来的时候,整个系统都放慢,以此来避免灾难性的后果。 这样的想法,当然是有局限性的。一方面,虽然整个系统得到保全,但是系统的处理能力却大大降低,作为这...阅读全文

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 梁十八

看了一定会收藏的海量数据实时在线分析Quick BI

课程介绍 Quick BI 专为云上用户量身打造的新一代智能BI服务平台,本课程主要介绍Quick BI的基础用法。 产品优势如下: • 无缝集成云上数据:支持多种数据源:RDS、ADS、MaxCompute;ECS自建Mysql、SqlServer;本地文件等。 • 快速搭建数据门户:拖拽式操作、强大的数据建模、丰富的可视化图表、快速搭建数据门户。 • 灵活嵌入第三方系统:仪表板可嵌入到自有系统,直接在自有系统访问报表, 并实现免登。 • 安全管控数据权限:内置组织成员管理,支持行级数据权限,满足同一份报表,不同人看不同的数据。 课程目标 • 学习阿里云Quick BI的用法 适合人群 • 大数据分析师 课时列表 ...阅读全文

兄弟连Go语言培训带你实战GO案例(7)Go Defer

兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌名师团队精心打造,历时半年时间共同研发而出。 GoDefer Defer用来保证一个函数调用会在程序执行的最后被调用。通常用于资源清理工作。packagemain import"fmt" import"os" //假设我们想创建一个文件,然后写入数据,最后关闭文件 funcmain(){ //在使用createFile得到一个文件对象之后,我们使用defer //来调用关闭文件的方法closeFile,这个方法将在main函数 //最后被执行,也就是writeFile完成之后 f:=createFile("/tmp...阅读全文

一种基于AliOS Things的uData感知设备软件框架

摘要:   uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。 **点此查看原文**:http://click.aliyun.com/m/40592/ **uData诞生背景**   uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。uData的主要目的是为了解决IoT端侧设备传感器开发的周期长、应用算法缺少和无云端数据一体化等痛点问题。 **uData概要介绍**   uData设计之初是遵循分层解耦...阅读全文

Fabric高级架构师/ 技术总监,待遇丰厚!坐标北京

**岗位职责**: 1. 主流区块链底层(Fabric、Ethereum 等)技术研究及转化; 2. Fabric 底层研究及开发; 3. HyperLedger 中国工作组相关工作; 4. 对外技术输出。 **职位要求**: 1. 本科及五年以上研发经验; 2. 扎实的基本功,如算法、网络、软件工程、数据结构等; 3. 熟悉分布式计算、大数据分析、高可用集群等技术架构; 4. 大型项目设计经验; 5. 思路清晰,很好的团队凝聚能力; 6. 熟悉去中心化设计,分布式账本技术等优先。 7. 35 周岁以下应聘者优先考虑。 **招聘邮箱**: **zengjb@hehuomao.com** 欢迎勾搭...阅读全文

涂鸦智能分布式定时调度系统Sigmax设计与实践

1.导读 Sigmax是涂鸦智能中间件团队基于Golang开发的一款高性能,分布式的定时任务调度引擎。针对IoT领域特有的复杂多样的定时任务场景,Sigmax提供了一套统一,稳定,精准的定时调度平台,来协助公司内各业务线方便的实现定时场景。 目前Sigmax已经在公司内部稳定运行了1年时间,单集群的日任务调度、日均任务触发数达千万次。 2.背景 涂鸦智能作为全球领先的AI+IoT平台,连接着海量的智能设备,每天会有大量的用户控制自己的智能设备以实现一些智能化的场景,比如: 用户A,每天早上7点自动打开窗帘; 用户B,当访客通过智能门禁之后,定时移除访客的权限; 用户C,日出或者日落之后,延时执行一个联动的场景,等等; 除此之外,我们的内部服务之间也存在大量的定时任务,比如: BI同学每天定时...阅读全文

博文 2020-05-30 08:32:42 涂鸦智能技术团队

go 学习笔记之学习函数式编程前不要忘了函数基础

在编程世界中向来就没有一家独大的编程风格,至少目前还是百家争鸣的春秋战国,除了众所周知的面向对象编程还有日渐流行的函数式编程,当然这也是本系列文章的重点. 越来越多的主流语言在设计的时候几乎无一例外都会参考函数式特性( lambda 表达式,原生支持 map,reduce...),就连面向对象语言的 Java8 也慢慢开始支持函数式编程,所以再不学习函数式编程可能就晚了! 但是在正式学习函数式编程之前,不妨和早已熟悉的面向对象编程心底里做下对比,通过对比学习的方式,相信你一定会收获满满,因此特地整理出来关于 Go 语言的面向对象系列文章,邀君共赏. 猜猜看go是不是面向对象语言?能不能面向对象编程? go 学习笔记之详细说一说封装是怎么回事 go 学习笔记之是否支持以及如何实现继承 go 学...阅读全文

博文 2019-09-17 12:34:24 雪之梦技术驿站

im-cloud <> goim 分布式中间件并发压测对比

github:http://github.com/brewlin/im-... im-cloud 基于swoole 原生协程构建分布式推送中间件 im-cloud 分布式中间件的安装部署 im-cloud <> goim 分布式中间件并发压测对比 im-cloud分布式中间件分析(一)-通讯协议 im-cloud分布式中间件分析(二)-cloud节点实现 im-cloud分布式中间件分析(三)-job节点实现 im-cloud分布式中间件分析(四)-logic节点实现 系统环境 此次测试环境为 window8.1 启动 virtualbox虚拟机部署的ubuntu14 goim无需担心进程配置,im-cloud测试时候需要根据机器配置做更改worker进程和task进程最好和cpu核心数保持...阅读全文

博文 2019-08-11 12:02:38 brewlin

Kotlin语言深入解析

课程介绍:在2017年的Google I/O大会上,Google正式宣布Kotlin将成为Android开发的官方支持语言。一时间,关于Kotlin的相关介绍如雨后春笋般涌现出来,Kotlin也很快成为近几个月来最为火热的开发语言之一。但值得一提的是,Kotlin出现至今已经有了几年的时间,甚至有不少公司的Android App已经部分或是全部采用Kotlin进行了开发,这得益于Kotlin精巧的设计、优雅的语法以及与Java 100%的互操作性。与Java相比,Kotlin是一门年轻的语言,但是发展和迭代速度却非常之快。Kotlin是由知名的工具公司JetBrains公司所推出。对于JetBrains公司的介绍无需多言,这家位于捷克的公司开发出了多款优秀的IDE工具,如IntelliJ I...阅读全文

博文 2020-01-14 23:01:00 lijm1266

go任务调度8(op取代get,put,delete方法)

package main import ( "go.etcd.io/etcd/clientv3" "time" "fmt" "context" ) func main() { var ( config clientv3.Config client *clientv3.Client err error kv clientv3.KV putOp clientv3.Op getOp clientv3.Op opResp clientv3.OpResponse ) // 客户端配置 config = clientv3.Config{ Endpoints: []string{"0.0.0.0:2379"}, DialTimeout: 5 * time.Second, } // 建立连接 if clie...阅读全文

博文 2019-04-21 03:35:09 梁十八

2019-06-01

Tags: channel [单选题]关于无缓冲和有缓冲的channel,下面说法正确的是() A 无缓冲的channel是默认的缓冲为1的channel B 无缓冲的channel和有缓冲的channel都是同步的 C 无缓冲的channel和有缓冲的channel都是非同步的 D 无缓冲的channel是同步的,而有缓冲的channel是非同步的 回答错误!正确答案是 D [试题解析] golang channel 有缓冲 与 无缓冲 是有重要区别的 之前认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式 其实是彻底错误的,无缓冲的与有缓冲channel有着重大差别 那就是一个是同步的 一个是非同步的 怎么说?比如 c1:=make(chan int) 无缓冲 c...阅读全文

Golang实现简单爬虫框架(4)——队列实现并发任务调度

前言 在上一篇文章《Golang实现简单爬虫框架(3)——简单并发版》中我们实现了一个最简单并发爬虫,调度器为每一个Request创建一个goroutine,每个goroutine往Worker队列中分发任务,发完就结束。所有的Worker都在抢一个channel中的任务。但是这样做还是有些许不足之处,比如控制力弱:所有的Worker在抢同一个channel中的任务,我们没有办法控制给哪一个worker任务。 其实我们可以自己做一个任务分发的机制,我们来决定分发给哪一个Worker 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目架构 在上一篇文章实现简单并发...阅读全文

博文 2019-05-27 21:34:41 盐的甜

golang

GO并发,采用CSP模型(Communication Sequantial Process) 1,csp模型 2,不需要锁、不需要callback 3,并发编程 1,性能保障,可以做系统开发 2,垃圾回收机制 3,灵活的类型、支持函数式编程、异步IO 4,并发处理 package main import "net/http" import "fmt" func main() { http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { fmt.Fprintln(writer, "

Hello world

") }) http.ListenAndServe(":8888", nil...阅读全文

博文 2019-05-05 04:31:42 strideahead

Go 译文之如何使用反射 Part 2

作者:Jon Bodner | 地址:Learning to Use Go Reflection — Part 2 译者前言 这篇博文介绍的内容比较实在,主要是关于两方面的内容。一是介绍 reflection 在 encoding/json 中的应用,另一个是利用反射开发了一个 Cacher 工厂函数,实现函数式编程中的记忆功能,其实就是根据输入对输出进行一定限期的缓存。 这篇文章的翻译没有上一篇那么轻松,因为涉及了一些函数式编程的术语,之前也并没有接触过。为了翻译这篇文章,简单阅读了网上的一篇关于函数式编程的文章,文章地址。望没有知识性错误。 译文如下: 上一篇文章,(阅读英文原版),我们介绍了 Go 的反射包 reflection。并通过一些示例介绍了它的特性。但是,我们还不清楚它究竟有...阅读全文

博文 2019-06-19 10:34:17 波罗学

golang 函数

在golang中,函数不仅可以用于封装代码、分割功能、解耦逻辑,还可以化身为普通的值,在其他函数间传递、赋予变量、做类型判断和转换等等,就像切片和字典的值那样。 函数值可以由此成为能够被随意传播的独立逻辑组件(或者说功能模块)。 demo: package main import "fmt" type Printer func(content string) (n int, err error) func printToStd(content string) (byteNum int, err error) { return fmt.Println(content) } func main() { var p Printer p = printToStd p("something") }  ...阅读全文

分布式从ACID、CAP、BASE的理论推进

创声明作者: 刘丹冰Aceld,微信公众号同名 作为当今互联网后端技术栈工程师、无论Golang、Java或者其他系,分布式的理论概念都逐步成为必备理论基础知识之一, 本文主要讨论分布式的CAP理论的推进,这是你走进分布式大门的第一块敲门砖。 提纲:一、从本地事务到分布式理论二、ACID理论三、CAP理论四、CAP理论“3选2”论证五、BASE理论 附加:分布式概念 分布式实际上就是单一的本地一体解决方案,在硬件或者资源上不够业务需求,而采取的一种分散式多节点,可以扩容资源的一种解决思路。它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。 那么在了解分布式之前,我们应该从一体式的构造开始说明...阅读全文

博文 2020-03-27 10:32:48 aceld

阿里高级专家应答:各种数据在一个统一计算平台上的融合,才能产生更大的价值

摘要: 阿里巴巴这种超大数据体量上才会遇到的独特挑战,让应答在技术上有了更清晰的认识,一定要夯实分布式系统的基础。“只有把基础夯实了,才能支持上层各种计算场景在大体量上的实现,让各种新的算法在‘阿里体量’上真正发挥潜力。” 《沉淀》是云栖社区展示专家风采的人物栏目。它呈现每个专家独一无二的人生经历、认识和感悟的同时,也能帮助你沉淀技术,收获对技术和人生的判断。我们的想法是:“若你想精进为一个很厉害的人,不妨细细品味这些技术牛人背后的沉淀。”如果你想了解这些云栖专家更多分享时,请点击云栖专家频道,当然我们也欢迎你往前走一步,成为我们的云栖专家(https://yq.aliyun.com/expert),与技术大牛一起“煮酒论英雄”。 “这个没啥好讲的,找XX和XX技术Leader吧...阅读全文

Go gRPC教程-客户端流式RPC(四)

前言 上一篇介绍了服务端流式RPC,客户端发送请求到服务器,拿到一个流去读取返回的消息序列。 客户端读取返回的流的数据。本篇将介绍客户端流式RPC。 客户端流式RPC:与服务端流式RPC相反,客户端不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。 情景模拟:客户端大量数据上传到服务端。 新建proto文件 新建client_stream.proto文件 1.定义发送信息 // 定义流式请求信息 message StreamRequest{ //流式请求参数 string stream_data = 1; } 2.定义接收信息 // 定义响应信息 message SimpleResponse{ //响应码 int32 code = 1; //响应值 string value =...阅读全文

博文 2020-04-26 10:25:53 FireworksEasyCool

2019-08-05

分布式任务调度平台 前言 在企业系统开发过程中难免少不了一些定时任务来进行定时触发执行任务,对于非分布式环境系统中,我们只需要在对应系统中内部集成一些调度库进行配置定时触发即可。 比如:使用Spring框架集成quartz,只需要进行一些简单的配置就能定时执行任务了。但是随着企业的系统越来越多、逐步从单一应用慢慢演变为微服务集群。 在分布式集群系统中主要面临出如:任务的重复执行、没有统一定时任务配置、任务节点故障转移、任务监控&报警等一些列的功能都是要在分布式系统中进行解决。 此分布式的定时任务调度平台,它非常轻量小巧,使用简单,后端以中心服务器为调度核心,负责集群中各种任务的动态分配和调度执行。 在平台前端支持Web界面可视化管理,我们可以创建、暂停/启动任务、删除未执行的任务快照、或者查...阅读全文

博文 2019-08-05 22:32:44 busgo

Go实现海量日志收集系统(一)

项目背景 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机器规模不大,一个系统通常也会涉及到多种语言的开发,拿我们公司来说,底层是通过c++开发的,而也业务应用层是通过Python开发的,并且即使是C++也分了很多级别应用,python这边同样也是有多个应用,那么问题来了,每次系统出问题了,如何能够迅速查问题? 好一点的情况可能是python应用层查日志发现是系统底层处理异常了,于是又叫C++同事来查,如果C++这边能够迅速定位出错误告知python层这边还好,如果错误好排查,可能就是各个开发层的都在一起查到底是哪里引起的。当然可能这样说比较笼统,但是却引发了一个问题: 当系...阅读全文

golang:goroutinue原理笔记

G M P模型 G —— goroutinue对象,经go语句创建 M —— 系统线程,和P关联后运行G,上限10000 P —— 调度器,和M关联后运行G,数量由 runtime.MAXGOPROCS 设置,默认为CPU核数,上限256 此外还有一个系统调度器(runtime.sched),负责维护一些全局队列。M的状态 自旋中:M正在从运行队列获取G, 这时候M会拥有一个P 执行中:M正在执行go代码, 这时候M会拥有一个P 挂起中:M正在执行阻塞的syscall, 这时M并不拥有P 休眠中:M发现无待运行的G时会进入休眠,并添加到空闲M链表中, 这时M并不拥有PP的状态 Pidel:当前P未和任何M关联 Prunning:当前P已经和某个M关联,M在执行某个G Psyscall:当前P...阅读全文

博文 2020-03-08 12:32:44 RaymondW

go任务调度1(go的操作系统命令调用)

package main import ( "fmt" "os/exec" ) func main() { var ( cmd *exec.Cmd err error ) cmd = exec.Command("/bin/bash", "-c", "echo 1") err = cmd.Run() fmt.Println(err) } package main import ( "fmt" "os/exec" ) func main() { var ( cmd *exec.Cmd output []byte err error ) // 生成Cmd cmd = exec.Command("/bin/bash", "-c", "ls -la /") // 执行了命令, 捕获了子进程的输出( p...阅读全文

博文 2019-04-19 16:35:13 梁十八

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 盐的甜

Golang 修饰器编程

导读 之前写过一篇《Python修饰器的函数式编程》,这种模式很容易的可以把一些函数装配到另外一些函数上,可以让你的代码更为的简单,也可以让一些“小功能型”的代码复用性更高,让代码中的函数可以像乐高玩具那样自由地拼装。所以,一直以来,我对修饰器decoration这种编程模式情有独钟,这里写一篇Go语言相关的文章。 看过Python修饰器那篇文章的同学,一定知道这是一种函数式编程的玩法——用一个高阶函数来包装一下。多唠叨一句,关于函数式编程,可以参看我之前写过一篇文章《函数式编程》,这篇文章主要是,想通过从过程式编程的思维方式过渡到函数式编程的思维方式,从而带动更多的人玩函数式编程,所以,如果你想了解一下函数式编程,那么可以移步先阅读一下。所以,Go语言的修饰器编程模式,其实也就是函数式编程...阅读全文

博文 2017-12-11 05:03:10 问题终结者

cmdr 03 - 用流式接口定义命令行参数处理选项

cmdr 03 - 用流式接口定义命令行参数处理选项基于 v0.2.17 转眼已经来到了 cmdr v0.2.17 了,为了解决此前版本中关于子命令和选项定义语句的太多嵌套的问题,我们实现了流式调用接口(Fluent APIs)。 cmdr 是我发布的一个开源的 golang 命令行参数处理器。它是 golang flags 的替代品。之所以发布它,是因为已有的 command line UI 三方包无法满足我的日常要求,迫不得己自己造一个。如果尚未有了解 cmdr 怎么使用的,不妨抽空浏览我的早前文章,以求获得一些基本概念: 另一个go命令行参数处理器 - cmdr cmdr 02 - 复刻一个 wget 稍后我会继续针对 cmdr 的用法做介绍文章。 至于本文呢 ,只是简单讲述一下如何使...阅读全文

博文 2019-06-01 15:34:38 hedzr

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

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

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

Go语言的浮点型比较大小及其函数式编程魅力

我们在编程中经常需要对两个浮点型比较大小,下面我就来分享一段这样的代码,同时也展示了Go语言函数式编程的独特魅力: import ( "fmt" "math" ) func main() { // 设置精确度为0.00001 var a Accuracy = func() float64 { return 0.00001 } fmt.Println(a.Equal(0.11111222, 0.11111222233333)) //打印结果为:true } type Accuracy func() float64 func (this Accuracy) Equal(a, b float64) bool { return math.Abs(a-b) < this() } func (this ...阅读全文

博文 2016-09-12 12:00:29 henrylee2cn

分布式爬虫对新站的协助

为了保障搜索引擎优化的质量一般在搭建新站的时候,前期会对内容一点点的进行填充,但是到了后期填充量会变得越来越大,所消耗的时间和精力也会逐步的增加,因此很多站长在做新的网站的时候首选分布式爬虫抓取信息进行填充,来保障网站定期更新量。分布式爬虫,可以大体理解为集群爬虫,如果有蜘蛛抓取任务,可以试用多台机器同时运行,很大的提升了工作效率。但是分布式爬虫并不是没有缺陷,也就是说效率提升的越快,那么网站触发反爬虫的机会也就越大。为了保障分布式爬虫的顺利使用,建议站长可以使用代理IP,使用代理IP一定要保障http代理IP的资源充足和http代理ip的上网安全和高匿性...阅读全文

博文 2019-02-27 16:39:39 xiniuxiaoniu

利用zookeeper实现分布式服务故障自动剔除/服务自动注册的思路

目前常见的web常规的负载均衡大多数是通过nginx的upstream配置将流量转发到内部的服务机上,来分担流量过多的情况,但是这里往往出现的一个问题是,nginx上配置服务器的ip是固定的,如果某台机器出现了服务故障,那么流量有概率会打到这台机器导致出现服务不可访问的故障,这时候往往需要人工介入将故障的节点ip剔除掉,那么有没有好的办法发现故障Ip剔除?可以利用zookeeper的特性来干这个事情的 zookeeper是什么? Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,目前是基于这个思路去考虑的。大体的结构图: 具体思路 看到上面的树状结构大家应该想到了点上面东西了吧!那么服务自动发现具体可以这么做呢,这么利用zookeeper的这个特性去实现服...阅读全文