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

兄弟连Go语言培训教程带你实战GO案例(6)Go Base64编码

兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌名师团队精心打造,历时半年时间共同研发而出。 GoBase64编码 Go提供了对base64编码和解码的内置支持 packagemain //这种导入包的语法将默认的base64起了一个别名b64,这样 //我们在下面就可以直接使用b64表示这个包,省点输入量 importb64"encoding/base64" import"fmt" funcmain(){ //这里是我们用来演示编码和解码的字符串 data:="abc123!?$*&()'-=@~" //Go支持标准的和兼容URL的base64编码。 //我们...阅读全文

Functional Go: 持久化数据结构简介

函数式编程模型因其天生对并发具备良好的支持,近些年来越来越受到重视。从这篇文章开始, 我将以一个系列的博客来记录函数式编程的一个重要组件:持久化数据结构在 Go 语言下的实现。 这篇文章是系列文章的一部分,如果还没有浏览过文章的其它部分请参考: 持久化数据结构简介 (本文) Vector Trie 的实现 Transient 及持久化 函数式编程不是新概念,像 Haskell、Clojure、Scala 等函数式/类函数式编程语言也已经出现和存在了很长时间, 很多函数式编程的概念现今已经被应用在很多其他领域,比如 Facebook 在 React 的基础上提出的 Flux 应用结构抽象就强调了引入持久化数据结构的好处。 事实上,Facebook 还开源了自己的 JavaScript 持久化数...阅读全文

一个实现 Twitter SnowFlake 算法 的 Go 分布式 UID 生成器

goSnowFlake 根据 Twitter SnowFlake 算法, 实现的分布式线程安全 UID 生成器 Feature 线程安全的 UID 生成器 绿色可插拔,无需依赖 Redis,Mysql,无状态 适合分布式系统 实现 Twitter SnowFlake 理论 Description 0 41 51 64 +---------------+----------------+-----------+ |timestamp(ms) | worker node id | sequence | +---------------+----------------+-----------+ id = timestamp | workerid | sequence (eg. 145106344...阅读全文

博文 2017-02-09 08:11:48 zheng_ji

Snow——简单易用的Go语言业务框架

项目地址 中文文档 changelog Snow Snow是一套简单易用的Go语言业务框架,整体逻辑设计简洁,支持HTTP服务、队列调度和任务调度等常用业务场景模式。 Goals 我们致力于让PHPer更方便地切入到Go语言开发,在业务框架选择上贴合PHP主流框架的设计思想,以更低的学习成本快速熟悉框架,致力于业务逻辑的开发。 Features HTTP服务:基于gin进行模块化设计,简单易用、核心足够轻量;支持平滑重启; 任务调度:基于cron进行模块化设计,简单易用; 队列调度:基于自研的队列调度服务worker,通过Queue接口化,解耦队列调度与底层队列驱动;支持平滑关闭; Cache: 通用的接口化设计,框架实现了redis作为缓存底层驱动,支持可扩展; Database: 使用成...阅读全文

博文 2019-07-09 01:34:21 Wilee

【Golang 基础】 Go 语言 函数式编程

Go 语言函数式编程   在 Go 语言中函数是一等公民,它作为一个变量、类型、参数、返回值,甚至可以去实现一个接口,但是 Go 语言中函数不支持重载、嵌套和默认参数。 通过使用 func 关键字来定义函数 package main func main(){ } 函数支持的特性 作为变量; func test(){ // 函数体 } funcTest := test fmt.Println(funcTest()) 匿名函数 test := func(){ // 函数体 } 作为类型; package main import "fmt" type iAdder func(int, int) int func main(){ var adder iAdder = func(a int, b in...阅读全文

博文 2019-03-29 06:34:40 爱写作的程序猿

Snow——简单易用的 Go 语言业务框架

## Snow Snow是一套简单易用的Go语言业务框架,整体逻辑设计简洁,支持HTTP服务、队列调度和任务调度等常用业务场景模式。 ## Goals 我们致力于让PHPer更方便地切入到Go语言开发,在业务框架选择上贴合PHP主流框架的设计思想,以更低的学习成本快速熟悉框架,致力于业务逻辑的开发。 ## Features - HTTP服务:基于[gin](https://github.com/gin-gonic/gin)进行模块化设计,简单易用、核心足够轻量;支持平滑重启; - 任务调度:基于[cron](https://github.com/robfig/cron)进行模块化设计,简单易用; - 队列调度:基于自研的队列调度服务[worker](https://github.com/qi...阅读全文

博文 2019-07-09 11:05:57 tinson

小心踩雷!一个小小的正则表达式竟把CPU拖垮......

通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。为了弄清楚复现问题,我们将其中的关键代码摘抄出来,做了个简单的单元测试。public static void main(String[] args) { String badRegex ="^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]://)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\\\\/])+$"; String bu...阅读全文

博文 2018-10-12 18:34:41 西安北大青鸟官微

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

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

博文 2019-09-16 10:02:41 雪之梦技术驿站

图解kubernetes容器探活机制核心实现状态管理

k8s为实现容器探活worker的管理构建了一个Manager组件,该组件负责底层探活worker的管理,并且缓存当前的容器的状态,并对外同步容器的当前状态,今天我们就来分析下其部分核心组件 1. 核心原理实现 Manager缓存的状态主要是会被kubelet、状态组件消费,并且在Pod同步状态的时候,会通过当前Manager里面的探测状态来更新Pod的容器的就绪与启动状态的更新,让我们一起看看Manager自身的一些关键实现吧 2. 探活结果管理 即prober/results/results_manager组件,其主要作用是:存储探测结果和通知探测结果 2.1 核心数据结构 cache负责容器的探测结果的保存,updates则负责对外更新状态的订阅,其通过新的结果和cache中的状态进行...阅读全文

博文 2020-02-12 12:34:18 8小时_2020

Go语言HTTP请求流式写入body

背景 最近在开发一个功能时,需要通过 http 协议上报大量的日志内容,但是在 Go 标准库里的 http client 的 API 是这样的: http.NewRequest(method, url string, body io.Reader) body 是通过io.Reader接口来传递,并没有暴露一个io.Writer接口来提供写入的办法,先来看看正常情况下怎么写入一个body,示例: buf := bytes.NewBuffer([]byte("hello")) http.Post("localhost:8099/report","text/pain",buf) 需要先把要写入的数据放在Buffer中,放内存缓存着,但是我需要写入大量的数据,如果都放内存里肯定要 OOM 了,htt...阅读全文

博文 2020-06-02 15:32:44 mokeyWie

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

藏在正则表达式里的陷阱,一个正则表达式导致CPU 利用率居高不下

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

博文 2019-06-19 22:32:46 叶落知深

Go gRPC 系列三:流式客户端和服务端

前言 大家好,我是煎鱼,本章节将介绍 gRPC 的流式,分为三种类型: Server-side streaming RPC:服务器端流式 RPC Client-side streaming RPC:客户端流式 RPC Bidirectional streaming RPC:双向流式 RPC 流 任何技术,因为有痛点,所以才有了存在的必要性。如果您想要了解 gRPC 的流式调用,请继续 图 gRPC Streaming 是基于 HTTP/2 的,后续章节再进行详细讲解 为什么不用 Simple RPC 流式为什么要存在呢,是 Simple RPC 有什么问题吗?通过模拟业务场景,可得知在使用 Simple RPC 时,有如下问题: 数据包过大造成的瞬时压力 接收数据包时,需要所有数据包都接受成...阅读全文

博文 2019-10-06 18:34:42 煎鱼啊

golang 的交叉编译

Go是一门编译型语言,所以在不同平台上,需要编译生成不同格式的二进制包。 由于Go 1.5对跨平台编译有了一些改进,包括统一了编译器、链接器等。 编译时候只需要指定两个参数:GOOS和GOARCH即可。 示例: # 编译到 linux 64bit $ GOOS=linux GOARCH=amd64 go build # 或者可以使用 -o 选项指定生成二进制文件名字 $ GOOS=linux GOARCH=amd64 go build -o app.linux # 编译到 linux 32bit $ GOOS=linux GOARCH=386 go build # 编译到 windows 64bit $ GOOS=windows GOARCH=amd64 go build # 编译到 win...阅读全文

博文 2017-07-03 08:03:33 中柠檬

go语言学习(11)--闭包与函数式编程

闭包 通过一个累加器来看闭包的概念 python 闭包 def fun1(): sum = 0 def fun2(v): nonlocal sum sum += v return sum return fun2 a = fun1() for i in range(10): print(a(i)) fun1返回的不是一个值,而是一个函数 fun2,a = fun2,所以 a(i)会打印 sum 的值,为什么 sum 一直在加呢,函数里的值为什么可以带到函数体外呢,这就是闭包的神奇之处,闭包是离散数学的一个概念,可以多看看网上的讲解加深印象 其实可以把闭包看做一个类, sum 就是类里的属性, fun2就是类的方法 所以 fun2可以使用 sum(自由变量) java 闭包 static Fun...阅读全文

博文 2018-08-11 01:34:56 神奇大叶子

Mac下安装golang

前言:越来越多人开始走学习golang之路,包括我身边的一些技术同事给自己“充电”新技术,能在未来工作中更好的生存发展。个人使用Mac环境,下面大概简述一安装过程:一、准备工作官网下载安装包:备注:目前最新稳定版本是v1.9开发工具包又分为安装版和压缩版。安装版是Mac和Windows特有的,他们的名字类似于:go1.9.darwin-amd64.pkggo1.9.windows-386.msigo1.9.windows-amd64.msi安装版,有点傻瓜式安装,环境路径都默认好,操作起来比较简单方便。压缩版的就是一个压缩文件,可以解压得到里面的内容,他们的名字类似于:go1.9.darwin-amd64.tar.gzgo1.9.linux-386.tar.gzgo1.9.linux-amd...阅读全文

Golang websocket结合一致性哈希算法构建高并发推送服务

Golang websocket结合一致性哈希算法构建高并发推送服务 2018年9月2日 1 场景介绍 web应用中,常有业务状态需要实时更新的场景。如一个较长的后台任务,从浏览器用户触发执行到执行完成可能需几十秒的时间,这时前端需隔几秒请求一次后台,查询任务执行进度。此种方式是长轮询的方式,是存在一定弊端的,增加了后台服务的负载,若并发操作量太大,后台压力会成倍激增。业界常采用http1.1的websocket扩展协议与浏览器建立长连接来实现实时业务状态更新。 2 实现方案 本文采用golang实现一个长连接服务,对外提供两个接口,一个是基于http的rest消息发送接口,一个是基于websocket的cient接入接口,如下图所示。 为使前端的接入更简单,从建立连接到用户关闭浏览器,中间...阅读全文

博文 2019-06-21 11:48:46 Larry

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

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

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

兄弟连Go语言培训带你实战GO案例(44)Go 可变长参数列表

兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌名师团队精心打造,历时半年时间共同研发而出。 Go可变长参数列表 支持可变长参数列表的函数可以支持任意个传入参数,比如fmt.Println函数就是一个支持可变长参数列表 的函数。 packagemain import"fmt" //这个函数可以传入任意数量的整型参数 funcsum(nums...int){ fmt.Print(nums,"") total:=0 for_,num:=rangenums{ total+=num } fmt.Println(total) } funcmain(){ //支持可变长参数...阅读全文

JS 函数式编程思维简述(二):高阶函数

简述 无副作用(No Side Effects) 高阶函数(High-Order Function) 科里化(Currying) 闭包(Closure) 不可变(Immutable) 惰性计算(Lazy Evaluation) Monad 一等公民 高阶函数(High-Order Function)是函数式编程思维中的重要条件,而满足该条件的编程语言则需要将函数作为该语言的一等公民来看待。符合一等公民的条件是: 函数可以作为一种数据类型的值,赋值于一个变量; 函数可以作为参数,在其他函数中进行传递; 函数可以作为返回值,在其他函数中返回; image 将函数视作一等公民的语言有:JavaScript、Golang、Python、Scala、Lua、Lisp、Scheme等。同时,有着越来越多...阅读全文

go语句初探

go语句和通道类型是Go语言的并发编程理念的最终体现。相比之下,go语句在用法上要比通道简单很多。与defer语句相同,go语句也可以携带一条表达式语句。注意,go语句的执行会很快结束,并不会对当前流程的进行造成阻塞或明显的延迟。一个简单的示例如下: go fmt.Println("Go!") 可以看到,go语句仅由一个关键字go和一条表达式语句构成。同样的,go语句的执行与其携带的表达式语句的执行在时间上没有必然联系。这里能够确定的仅仅是后者会在前者完成之后发生。在go语句被执行时,其携带的函数(也被称为go函数)以及要传给它的若干参数(如果有的话)会被封装成一个实体(即Goroutine),并被放入到相应的待运行队列中。Go语言的运行时系统会适时的从队列中取出待运行的Goroutine并...阅读全文

博文 2016-09-08 09:00:05 freedomai

golang中的同步对象

线程模型与调度 golang中的线程调度是半协同式调度,只有有阻塞的时候,才会进行goroutine的切换,独立于OS的线程调度。 mutex 通过sync.Mutex访问,具有Lock()与Unlock()方法。与一般的锁对象对应起来。 WaitGroup sync.WaitGroup用于等待多个对象。 wg.Add()用于指定等待多少个对象; wg.Done()用于宣告对象就位; wg.Wait()用于等待; 轻量级的原子操作atomic atomic提供一些原子量的操作。 sync.Once.Do()提供了只做一次的操作...阅读全文

博文 2019-02-11 11:34:45 areece

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

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

博文 2019-06-03 23:34:19 盐的甜

大数据工程师技能总结

业务分层划分 边缘部分 数据收集,高效、不丢、资源消耗低、可审计监控 数据传输,域名、链路选择 数据开发,部分数据开发需要下沉到边缘 中央部分 通用基础设施 机器选型,针对不同服务选择合适的机型 集群搭建,选择合适的发行版本 配置管理,做到自动化下发配置,管理集群,服务 监控管理,监控大数据平台组建,为调优、扩容提供数据支撑 数据平台基础 数据接入,选择Flume,易扩展,方便接入各类数据 数据计算,选择Spark,MR 数据存储,Kafka、HDFS、HBase、ClickHouse、ES、Mongodb 计算管理,yarn进行计算资源管理 任务调度,选择azkaban 数据分析,hiveSQL、sparkSQL 数据管理 数据开发,工具封装、任务调度、测试等 数据仓库,ODS、DW(视情...阅读全文

博文 2020-01-08 19:32:48 x4passer

Go基础之For循环

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao3132453/article/details/79262375 package main import "fmt" func main() { fmt.Println("For_Simple:\n") For_Simple() fmt.Println("For_Ever:\n") For_Ever() fmt.Println("For_Break_One:\n") For_Break_One() fmt.Println("For_Break_Any:\n") For_Break_Any() } func For_Simple() { //标准For循环,注意表达式不带花括号 sum :...阅读全文

博文 2019-03-16 11:31:03 myruo

藏在正则表达式里的陷阱

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 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-11-05 18:34:44 java菜

深入理解Go-垃圾回收机制

Go的GC自打出生的时候就开始被人诟病,但是在引入v1.5的三色标记和v1.8的混合写屏障后,正常的GC已经缩短到10us左右,已经变得非常优秀,了不起了,我们接下来探索一下Go的GC的原理吧 三色标记原理 我们首先看一张图,大概就会对 三色标记法 有一个大致的了解: 原理: 首先把所有的对象都放到白色的集合中 从根节点开始遍历对象,遍历到的白色对象从白色集合中放到灰色集合中 遍历灰色集合中的对象,把灰色对象引用的白色集合的对象放入到灰色集合中,同时把遍历过的灰色集合中的对象放到黑色的集合中 循环步骤3,知道灰色集合中没有对象 步骤4结束后,白色集合中的对象就是不可达对象,也就是垃圾,进行回收 写屏障 Go在进行三色标记的时候并没有STW,也就是说,此时的对象还是可以进行修改 那么我们考虑一...阅读全文

博文 2019-08-15 21:02:38 tyloafer

GO 2,我们来了——2018/11/29

Go 2, here we come! 29 November 2018 道法自然,学究天人。论英语与Golang的长天一色,得翻译和技术之并驾齐驱。 背景(Background) At GopherCon 2017, Russ Cox officially started the thought process on the next big version of Go with his talk The Future of Go (blog post). We have called this future language informally Go 2, even though we understand now that it will arrive in incremental ...阅读全文

博文 2018-12-12 16:34:43 天地一小儒

一个数据库的开发问题

本人是c++开发者,最近接触Go,非常喜欢,准备转Go。 事情是这样的,目前公司的一个C++项目要使用一个分布式数据库进行数据存储和访问,我在学,能不能用Go的框架进行开发数据库,然后通过C++进行数据库的访问?这样做是否有意义,是否能在短时间内完成呢?请各位大神帮我出点主...阅读全文

Golang搭建并行版爬虫信息采集框架!

1.简介Go语言在分布式系统领域有着更高的开发效率,提供了海量并行的支持。本博文介绍的是采用Go语言搭建一个并行版爬虫信息采集框架,博文中使用58同城中租房网页做案例。相比较其他爬虫程序它的优点是:1.抓取信息速度非常快,因为是并行处理的,通过配置协程数量,可以比普通的爬虫信息采集程序快上上百倍。2.功能模块化,每个功能模块各司其职,配置简单。通过修改信息抓取规则,就可以采集不同网站中的数据。程序源代码放到github上,链接地址是: https://github.com/GuoZhaoran/crawler2.项目架构下面是项目整体架构的示意图:2.1 Request(请求)该爬虫架构中Request请求可以理解为:抓取请求url的内容,例如抓取58同城北京市的租房信息时,请求的url是:...阅读全文

博文 2018-12-27 14:34:44 919b0c54458f

Kubernetes笔记(5)—— kubernetes layout

Node(也称之为minion)运行docker container,而master则负责调度管理这些container。 Master运行下列服务: API Server—nearly all the components on the master and nodes accomplish their respective tasks by making API calls. These are handled by the API Server running on the master. Etcd—Etcd is a service whose job is to keep and replicate the current configuration and run state o...阅读全文

博文 2017-06-24 19:21:20 肖楠

【分布式架构】企业级分布式应用服务EDAS使用攻略免费分享

课程介绍 本课程主要讲解企业级分布式应用服务EDAS相关技术和使用方法。 企业级分布式应用服务(EDAS,Enterprise Distributed Application Service)是企业级互联网架构解决方案的核心产品,充分利用阿里云现有资源管理和服务体系,引入中间件成熟的整套分布式计算框架(包括分布式服务化框架、服务治理、运维管控、链路追踪和稳定性组件等),以应用为中心,帮助企业级客户轻松构建并托管分布式应用服务体系。 课程目标 掌握企业级分布式应用服务EDAS的使用 适合人群 云计算开发者 课时列表 • 第1 章 : EDAS介绍 • 课时1:EDAS介绍 • 第2 章 : EDAS...阅读全文

Go语言开发分布式任务调度 轻松搞定高性能Crontab

第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作模式,并图示分析shell执行任务的底层原理与涉及的系统调用。最后,我们使会用Go语言的Command标准库,实现任务的执行,输出捕获,杀死任务等重要功能。 ...2-1 原理介绍2-2 执行任务2-3 捕获任务输出2-4 强制结束任务第3章 如何解析cron表达式cron表达式是配置定时任务执行周期的核心工具。在本章中,将首先分析cron表达式的构成以及解析逻辑,并利用开源项目c...阅读全文

博文 2019-03-28 13:34:40 itsource论坛

Go语言特性介绍

采用goroutine的方式使多线程编写更加容易、代码可读性更好,可以简单理解为订阅者发布者模式,设计类似于unix管道通信模式, 对于消息队列编程有了解的话很容易理解goroutine的处理模式。 能直接编译成二进制文件没有第三方依赖,因为go是静态编译,包含自己runtime,相对于c会大一些, 但相对java 这种依赖虚拟器的语言编译后的文件小的多。对于docker环境更小的镜像意味着更快的启动速度。 语言简洁高效,相对于python ruby编码负担没有增加多少,运行效率却有大幅度的提升。 golang对新人友好,学习负担小,语法简单,没有多余的语法糖,学习速度快。 c语言易学难用,go易学相对好用,学习和使用达到一个不错的价值平衡。学习和收益比很高,是一个性价比很好的语言。 go难...阅读全文

博文 2019-12-18 12:32:43 王司技术谈

二)golang工厂模式

在通用的工厂模式中,一般涉及到 简单工厂模式(顾名思义:工厂 > 创建)、工厂方法(顾名思义:将方法工厂化)、抽象工厂模式(顾名思义:将工厂抽象化 工厂 > 工厂 > 创建) 特点:将接口与具体实现分离,根据需要实例化对象使用场景:日志记录,文件服务平台,数据库访问 1.定义产品接口 type P interface {} 2.定义实现结构 type P1 struct {} //implement P type P2 struct {} //implement P ...//简单3.工厂方法(简单工厂完) func F (name string) P {} //抽象3.工厂接口,用于生产工厂 type Factory interface { CreateP(name string) Cre...阅读全文

用最小的内存发送大文件 翻译+分析

文: https://medium.com/@owlwalks/sending-big-file-with-minimal-memory-in-golang-8f3fc280d2c 一般我们发送文件 buf := new(bytes.Buffer) writer := multipart.NewWriter(buf) defer writer.Close() part, err := writer.CreateFormFile("myFile", "foo.txt") if err != nil { return err } file, err := os.Open(name) if err != nil { return err } defer file.Close() if _, err...阅读全文

博文 2018-12-12 17:34:47 wwq1988

Go语言开发(六)、Go语言闭包

Go语言开发(六)、Go语言闭包 一、函数式编程 1、函数式编程简介 函数式编程是一种编程模型,将计算机运算看作是数学中函数的计算,并且避免了状态以及变量的概念。在面向对象思想产生前,函数式编程已经有数十年的历史。随着硬件性能的提升以及编译技术和虚拟机技术的改进,一些曾被性能问题所限制的动态语言开始受到关注,Python、Ruby和Lua等语言都开始在应用中崭露头角。动态语言因其方便快捷的开发方式成为很多人喜爱的编程语言,伴随动态语言的流行,函数式编程也开始流行。 2、函数式编程的特点 函数式编程的主要特点如下:A、变量的不可变性: 变量一经赋值不可改变。如果需要改变,则必须复制出去,然后修改。B、函数是一等公民: 函数也是变量,可以作为参数、返回值等在程序中进行传递。 C、尾递归:如果递归...阅读全文

博文 2018-07-02 21:35:13 天山老妖S

兄弟连区块链培训带你实战GO案例(49)Go 时间

Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。不仅可以开发web,可以开发底层,目前知乎就是用golang开发。区块链首选语言就是go,以-太坊,超级账本都是基于go语言,还有go语言版本的btcd. 兄弟连Go全栈与区块链培训课程共计22周学习时长,划分为9个学习阶段,即区块链主流语言-Go语言开发实战、区块链后端技术体系-Go语言高并发和服务器开发、Go开发区块链公链(区块链密码学、分布式编程、共识算法、基本概念,Golan公链开发)、以-太坊与智能合约与DAPP开发、区块链分布式应用开发、区块链系统框架开发-超级账本与区块链3.0EOS、Go与区块链面试...阅读全文

博文 2018-07-30 15:34:54 Delete_88c3

Go语言学习笔记七(协程)

协程机制 Golang 线程和协程的区别 备注:需要区分进程、线程(内核级线程)、协程(用户级线程)三个概念。 进程、线程 和 协程 之间概念的区别 对于进程、线程,都是有内核进行调度,有CPU时间片的概念,进行抢占式调度(有多种调度算法) 对于协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行协作式调度,需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。 goroutine 和协程区别 本质上,goroutine 就是协程。 不同的是,Golang 在 runtime、系统调用等多方面对 goroutine 调度进行...阅读全文

博文 2019-08-11 10:02:41 Jabir_Zhang

ChainDesk : Go 语言入门指南

ChainDesk : Go 语言入门指南第一章:Ubuntu 的安装 http://www.chaindesk.cn/witbook/13/172?20190109meiti第二章:Linux 文件管理和常用命令 http://www.chaindesk.cn/witbook/13/173?20190109meiti 第三章:配置 golang 环境 http://www.chaindesk.cn/witbook/13/174?20190109meiti 第四章:第一个 helloworld 程序 http://www.chaindesk.cn/witbook/13/175?20190109meiti 第五章:安装 goland 集成开发工具 http://www.chaindesk.cn...阅读全文

博文 2019-01-09 14:34:45 ChainDesk

88.合并两个有序数组

Golang语法不支持while循环,自增不能当表达式使用,所以用它写这道题看起来很丑 func merge(a []int, m int, b []int, n int) []int{ tmp := make([]int, m+n) i, j, k := 0, 0, 0 for i < m && j < n { if a[i] < b[j] { tmp[k] = a[i] k++ i++ } else { tmp[k] = b[j] k++ j++ } } for i < m { tmp[k] = a[i] k++ i++ } for j < n { tmp[k] = b[j] k++ j++ } for k := 0; k< m+n;k++ { a[k] = tmp[k] } retur...阅读全文

博文 2019-01-29 17:34:47 一根薯条

golang-select调度器

select 方式进行调度 使用场景: 比如有多个通道,但我打算是哪一个通道先给我数据,我就先执行谁 这个select 可以是并行执行 channel管道 package main import ( "fmt" "math/rand" "time" ) /** select 方式进行调度 使用场景:比如有多个通道,但我打算是哪一个通道先给我数据,我就先执行谁 这个select 可以是并行执行 channel管道 */ // 发送值 func generator() chan int { out := make(chan int) go func() { i := 0 for { // 随机睡眠, 1500毫秒以内 time.Sleep(time.Duration(rand.Intn(1500...阅读全文

博文 2019-12-18 12:32:43 爱吃豆包

进程线程协程的介绍

进程(process): 定义 狭义定义:进程就是一段程序的执行过程例如启动的某个app。 广义定义:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程即是基本的分配单元,也是基本的执行单元。 特征 每个进程都有自己的地址空间,一般情况下,包含文本区域、数据区域、堆栈 进程是执行中的程序,程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称之为进程 进程本身不会运行,是线程的容器。线程不能单独执行,必须组成进程 一个程序至少有一个进程,一个进程至少有一个线程 对于操作系统来讲,一个任务就是一个进程,比如开一个浏览器就是启动一个浏览器进程。打开一款app就是打开一个进程,例如打开香哈就是运行了一个...阅读全文

博文 2019-05-18 16:34:37 猫祭司

爬虫性能分析及优化

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