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

简单工厂模式--Golang版本

目录结构:   | -- calculater-simpleFactory     | -- main.go     | -- Calculater     |   | -- Calculater.go main.go package main import ( "calculater-simpleFactory/Calculater" "fmt" ) func main() { numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} opreate := Calculater.NewCalculate("+") sum, _ := opreate.Opreation(numbers) fmt.Println("sum = ", sum) opreat...阅读全文

博文 2020-03-22 22:32:44 韩小禹

你应该知道的HTTP基础知识

姓名:宫松涛学号:19021210927嵌牛导读:为大家详细讲解HTTP基础知识,让大家快速掌握。嵌牛鼻子:HTTP基础知识嵌牛提问:有哪些HTTP基础知识?转载源:你应该知道的HTTP基础知识嵌牛正文:本文主要内容:HTTP请求报文格式HTTP响应报文格式Header请求体的3种形式推荐调试工具HTTP的组成图示1. HTTP请求报文格式HTTP 的请求报文分为三个部分请求行、请求头和请求体,格式如图: HTTP请求报文格式注:部分文章也将HTTP请求报文分为两部分请求头和请求体,请求头的第一行为请求行。1.1 请求行请求行(Request Line)分为三个部分:请求方法、请求地址和协议及版本,以CRLF(\r\n)结束。HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、...阅读全文

博文 2019-12-08 01:32:55 走不完的叉路口

求人不如求己,自己动手写一个CSDN博客备份小工具?

求人不如求己,自己动手写一个CSDN博客备份小工具? 前提概要 背景 cabtool 实践基础 爬虫实践 (一)分析如何爬取博客的markdown内容 (二)分析如何批量爬取博客的markdown (三)如何模拟登录,获得cookies 使用说明 方式一 方式二 前提概要 背景 因为笔者在上个月的时候,突然想扩展一下技术栈,不能仅仅局限于Java,还是得掌握一门工具语言,不然显得太low。所以也就对Python和Golang类的语言有了一些兴趣。也就在上个月简单的学习了Python3。但是呢,苦于没有时间也没有项目可以实践,所以爬虫就成为了避免忘记python的最佳实践 同时笔者发现在CSDN写的笔记好像也堆积了八九十篇啦。但是CSDN好像却没有类似简书一键导出的备份功能。于是之前没有数据备...阅读全文

博文 2019-07-20 08:32:52 SnailMann

编程高阶用法--开发者高频词汇

*有追求的开发者总会在开发时遇到变量命名困难或者命名冗长庸俗的时候。阅读代码过程中遇到一些很好的命名,也遇到一些不好的。当初并没有记录下来,之后才开始记录,有的也找不到出处了。以下高频词汇供有追求的开发者参考* 多注意使用高阶词汇表达,变成一个有追求的开发者吧。 stale 陈腐的,陈旧的 用于需要被替换、刷新的资源 transport 传输器 restricted 限制的 exclusive 专一的 of 用于Enum 反例 com.netflix.eureka.Version#toEnum org.springframework.data.domain.PageRequest#of(int, int) HystrixCommandAspect.HystrixPointcutType#of...阅读全文

博文 2019-03-20 11:34:42 seeing

[译] 添加一个新语句到Golang编译器内部-第一部分

序 这是两部分系列中的第一篇文章,该系列采用基于教程的方法来探索Go编译器。编译器很大,可能需要一本书去正确描述,本文章的想法是提供一种“深度优先"的探索思路。作者计划在将来写更多关于编译器特定领域的描述性文章。 我们将更改Go编译器添加一个新的语言特性(仅用来探索编译器的实现),并构建一个修改后的编译器来使用。 原文链接 注:一些编译器专业术语仍然沿用了英文。 任务:添加一个新语句 许多语言都有一个while语句,在Go中使用for表示: for { } 在Go中添加while语句是简单的,因为只需要简单的将while翻译为for。所以我们选择了一个更具有挑战性的任务:添加until。until与while相似,只是将判定条件改为了...阅读全文

博文 2019-07-08 02:32:40 Leonard_Wang

「Go学习笔记」1.初识Go

前言 由于在公司广泛使用Docker的大环境下,突然对它的编程语言(Go)了解下。并且感觉现在Go语言的应用也是越来越广泛,很多互联网大厂都在使用,目前利用业余时间来学习下,主流还是Java,学明白以后可能考虑转哦????。如果你也感兴趣不如一起来学习。 Go介绍 简史Go语言是Google于2009年正式发布的一款开源的静态编译型语言。Go语言最早于2007年Robert Griesemer(Java HotSpot虚拟机、V8引擎开发者之一)和Ken Thompson(贝尔实验室UNIX团队成员,C语言、UNIX和Plan9创始人之一)与Rob Pike三人在业余时间联合开发。(老外就是吊)时至今日Go语言已完成自举,社区生态斐然,包括大量拿的出手的杀手锏级项目(Moby、Docker、...阅读全文

博文 2019-10-16 10:02:38 码处高效

Go 每日一库之 gojsonq

简介 在日常工作中,每一名开发者,不管是前端还是后端,都经常使用 JSON。JSON 是一个很简单的数据交换格式。相比于 XML,它灵活、轻巧、使用方便。JSON 也是RESTful API推荐的格式。有时,我们只想读取 JSON 中的某一些字段。如果自己手动解析、一层一层读取,这就变得异常繁琐了。特别是在嵌套层次很深的情况下。今天我们介绍gojsonq。它可以帮助我们很方便的操作 JSON。 快速使用 先安装: $ go get github.com/thedevsaddam/gojsonq 复制代码后使用: package main import ( "fmt" "github.com/thedevsaddam/gojsonq" ) func main() { content := `{...阅读全文

博文 2020-02-25 10:34:28 darjun

Python之上下文管理器

1.引入 我们时常会看到网上很多人写文件读写的代码的时候,常常是这么写的: with open('test.txt', 'r') as f: print(f.read()) # 其它操作 这个with有什么用呢? 我们来看看不用这种写法我们怎么写。 假如我们直接这么写: f = open('test.txt', 'r') print(f.read()) # 其它操作 f.close() 这种写法有什么问题呢? 假如在做其它操作的时候,出错了,程序终止,f.close()不会执行,则f这个句柄会一直得不到释放,要是并发操作,这个就很严重了。 所以我们通常会这么写: try: f = open('test.txt', 'r') except Exception: pass finally: f....阅读全文

博文 2019-10-11 18:32:50 aside section ._1OhGeD

使用 Go 语言创建 WebSocket 服务

感谢参考原文-http://bjbsair.com/2020-04-01/tech-info/18504.html 今天介绍如何用 Go 语言创建 WebSocket 服务,文章的前两部分简要介绍了 WebSocket 协议以及用 Go 标准库如何创建 WebSocket 服务。第三部分实践环节我们使用了 gorilla/websocket 库帮助我们快速构建 WebSocket 服务,它帮封装了使用 Go 标准库实现 WebSocket 服务相关的基础逻辑,让我们能从繁琐的底层代码中解脱出来,根据业务需求快速构建 WebSocket 服务。 WebSocket介绍 WebSocket 通信协议通过单个 TCP 连接提供全双工通信通道。与 HTTP 相比, WebSocket 不需要你为了获...阅读全文

博文 2020-04-02 16:33:28 朱柿子

elasticsearch学习笔记-常用方法使用

go中elasticsearch sdk 常用基础操作1、创建客户端func getCli() *es.Client{cli :=es.SetURL("http://127.0.0.1:9200")client, err :=es.NewClient(es.SetSniff(enabled), cli)if err !=nil {panic(err)}}2、定义数据结构type ParamModel struct {Id int64 `json:"id"`Content string `son:"content"`.....}3、数据解析器func ParserFlOrder(res *es.SearchResult) (out interface{}) {temp :=ParamModel...阅读全文

博文 2019-11-08 10:27:26 545305939

GoLang 随笔 - iota 的特性与用法

依靠编译器完成自增 const ( a = iota // a = 0 b // b = 1 c // c = 2 ) 利用只写变量 _ 跳过自增 const ( a = iota // a = 0 b // b = 1 _ _ c // c = 4 ) 可以插入其他常量,且不影响iota自增 const ( a = iota // a = 0 b = "b" // b = "b" c = iota //c = 2 d // d = 3 ) 如果定义在同一行 const ( a, b = iota , iota + 1 c, d e, f ) // a = 0, b = 1, c = 2, d = 3, e = 4, f = 5 定义位掩码表达式 const ( a = 1 << iota ...阅读全文

博文 2019-07-21 06:32:37 凉丶心园

Go基础学习记录之阻止Session劫持(Preventing session hijacking)

阻止Session劫持(Preventing session hijacking) Session劫持是一种常见且严重的安全威胁。在与服务器通信时,客户端使用Session ID进行验证和其他目的。不幸的是,恶意第三方有时可以跟踪这些通信并找出客户端Session ID。本次分享,将向您展示如何为教育目的劫持Session。 Session劫持过程 以下代码是count变量的计数器: // WelcomeLogin 欢迎登录页 func WelcomeLogin(w http.ResponseWriter, r *http.Request) { session, err := appSession.SessionStart(w, r) if err != nil { fmt.Fprintf(...阅读全文

博文 2018-11-06 14:34:44 DurbanZhang

RabbitMQ系列笔记主题订阅模式

导语 昨天的内容主要讲了RabbitMQ的发布订阅模式和路由模式,都很好的满足了我们的日志打印,但是如果说,我对日志的打印,希望可以过滤掉一些内容呢,比如说,在打印错误日志的时候,只打印login时的错误?这个时候,就需要我们使用主题订阅的模式,可以说,主题订阅模式可以完全代替路由模式,因为在主题订阅模式中,如果没有响应的关键词,便和路由模式完全一样。 主题交换器介绍 在使用主题交换器时需要注意以下几点 在使用routing_key,必须是有点分隔符进行分隔 * 可以代表代替一个单词 # 可以代替0个或多个单词 案例 我们对我们之前的例子做修改,这次修改希望生产者可以在运行的时候指定路由需要增加下面这个函数 func severityFrom(args []string) string { ...阅读全文

博文 2019-08-10 16:32:46 陌无崖

使用Vim编辑器开发Go的简单入门

今天是一次做Go的笔记,一开始直接打开Github上的Go项目然后跑到Wiki位置,然后作者列出了一堆学习Go的资料,这里我 以第一个学习资料https://tour.golang.org/作为Go学习到入门。然后为了训练我的终端运用 能力还有Vim下的编码能力这里我使用到了tmux和Vim编辑器,然后之前已经在VIM里面安装了Vim-go插件了,所以在之前 的Go项目文件目录下可以直接使用命令模式使用:Go来执行相应的操作。如果项目报错都话你可能是没有按照 Vim-go的要求现在项目里面执行:GoInstallBinaries. You will also need to install all the necessary binaries. vim-go makes it easy to...阅读全文

Aura: 一个专注于监控和采集的 SDK 组件

## ???? Overview ☁️ 在云原生时代,以 [Prometheus](https://prometheus.io) 为中心的监控生态已经逐渐完善,社区也出现了大量的中间件,数据库以及各种基础组件的 exporter,Prometheus 官方也给出了维护了一份 exporter 列表 [instrumenting/exporters](https://prometheus.io/docs/instrumenting/exporters)。 但是 Prometheus 的缺点和它的优点一样明显,缺少高可用的集群方案。想了解 Prometheus 和监控系统的同学可阅读 [Prometheus 折腾笔记](https://github.com/chenjiandongx/prome...阅读全文

博文 2020-06-01 10:24:46 chenjiandongx

《Go 语言程序设计》读书笔记 (三) 方法

方法 方法声明 在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。 package geometry import "math" type Point struct{ X, Y float64 } // traditional function func Distance(p, q Point) float64 { return math.Hypot(q.X-p.X, q.Y-p.Y) } // same thing, but as a method of the Point type func (p Point) Distance(q Point) float64 { return math.Hypot(...阅读全文

博文 2019-12-24 14:32:42 KevinYan

GO语言学习笔记(一)Go语言的初步了解

一·、Go语言的官方网站https://golang.org/dl/二、安装Go语言Linux版本: tar zxf go1.11.4.linux-amd64.tar.gz mv go /usr/local/ 三、设置GOPATH和GOROOT环境变量 vim /etc/profile 增加这三行: export GOROOT=/usr/local/go export PATH=$GOROOT/bin:$PATH export GOPATH=$GOROOT/gocode 使其生效:source /etc/profile 四、验证 执行:go version go version go1.11.4 linux/amd64 五、Go环境变量介绍 执行:go env GOARCH="amd64" ...阅读全文

博文 2019-01-24 18:35:17 Mr大表哥

[系列] - 使用 go modules 包管理工具(一)

概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。 为什么是开箱即用,它会集成哪些功能? 以上功能点,都是常用的,后期可能还会增加。 废话不多说,咱们开始吧。 创建一个项目,咱们首先要考虑一个依赖包的管理工具。 常见的包管理有,dep、go vendor、glide、go modules 等。 最开始,使用过 dep,当时被朋友 diss 了,推荐我使用 go modules 。 现在来说一下 go modules ,这个是随着 Go 1.11 的发布和我们见面的,这是官方提倡的新的包管理。 说一个环境变量:GO111MODULE,默认值为 auto 。 当项目中有 go.mod 时,使用 go modules 管理,反之使用 旧的 GOPATH 和 v...阅读全文

博文 2019-08-26 19:32:46 新亮

Go 编程:那些隐晦的操作符

文发布于个人站点: GitDiG.com, 原文链接: Go 编程:那些隐晦的操作符 本篇作为 Go 编程“边角料”的最后一篇,主要针对 Go 语言提供的操作符进行一次总结。刚好回应上篇一位读者关于表达式是否要加'.'的问题做个回复。 在 Go 语言中,一共提供了47个操作符,包括标点符号。摘自官方文档,分别是: + & += &= && == != ( ) - | -= |= || < <= [ ] * ^ *= ^= <- > >= { } / << /= <<= ++ = := , ; % >> %= >>= -- ! ... . : &^ &^= 除以上操作符以外,在 Go 语言中还有一个特殊的符号 _, 以及一个非 Go 语言操作符的特殊字节?。 刨去一些常用的操作符,对其中较隐晦...阅读全文

博文 2019-07-17 08:02:46 JayL

Golang接口的小疑问

学习接口的时候有个2个小疑问 接口的方法是否能被部分实现? 实现部分接口方法的结构体是否能转化为该接口类型? 写了点代码测试,如下: package main import "fmt" type Human struct { age int8 gender int8 } type Man interface { GetAge() int8 GetGender() int8 } func (human *Human) GetAge() int8 { return human.age } func main(){ var humanS = Human {32, 1} fmt.Printf("%d", humanS.GetAge()) var man Man man = humanS fmt.Pr...阅读全文

博文 2019-09-29 21:33:05 aside section ._1OhGeD

Go基础系列:WaitGroup用法说明

正常情况下,新激活的goroutine的结束过程是不可控制的,唯一可以保证终止goroutine的行为是main goroutine的终止。也就是说,我们并不知道哪个goroutine什么时候结束。 但很多情况下,我们正需要知道goroutine是否完成。这需要借助sync包的WaitGroup来实现。 WatiGroup是sync包中的一个struct类型,用来收集需要等待执行完成的goroutine。下面是它的定义: type WaitGroup struct { // Has unexported fields. } A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls ...阅读全文

博文 2018-11-23 09:12:07 f-ck-need-u

已刪除

出現這個問題要怎麼解決 原先用goland編輯器正常 使用visual studio code編輯器卻發生問題 main.go:13:2: import "./a" is a program, not an importable package a\main.go:13:2: cannot find package "./a" in: C:\Users\ASUS\Desktop\golang\uintptrescapes.dir\a exit status 1 Process exiting with code: ...阅读全文

博文 2019-07-13 10:04:50 cho010012

Go 译文之词法分析与解析 - Part One

作者:Adam Presley | 地址:Writing a Lexer and Parser in Go - Part 1 译者前言 一直对词法分析与解析的话题比较感兴趣,最近发现了好几篇相关的优秀文章,准备好好翻译和研究下。我的理解,词法分析与解析的应用还是比较广泛的,无论简单的配置文件、各种模板语言、还是我们每天在写编程语言都离不开它。 本篇文章一个系列文章的第一篇,主要介绍的是词法分析与解析的一些基础概念,包括什么是词法分析,什么是解析,Token 如何表示等等。 正文如下: 从今天开始,我将会用三篇文章介绍在 Go 中如何构建一个简单的词法分析与解释器。文中介绍的内容主要是基于 Rob Pike 在 2011 年关于 Lexical Scanning In Go 的演讲。这个系列文...阅读全文

博文 2019-07-20 19:04:16 波罗学

Dubbo2.6.x—注册中心源码分析 dubbo-registry模块 (api and zookeeper)

文章有点长,亲,要慢慢看! 1. 概述 1.1 注册中心作用 在Dubbo中,注册中心为核心模块,Dubbo通过注册中心实现各个服务之间的注册与发现等功能,而本次源码的分析为registry模块的api和zookeeper的实现。 服务的提供者和消费者都需要把自己注册到注册中心,提供者让消费者感知到服务存在,从而消费者发起远程调用,也让服务治理中心感知到有服务提供者上线;消费者则是让服务治理中心可以发现自己。 1.2 Zookeeper Zookeeper是一个提供分布式协调服务的开源软件,常用于解决分布式应用中经常遇到的一些数据管理问题。Zookeeper功能非常强大,可以实现如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能。关于Zookeeper,大家如果想了解可以关注一...阅读全文

博文 2020-01-11 21:32:47 苡仁ilss

聊聊在Go语言里使用继承的翻车经历

Go不是面向对象的语言,但是使用组合、嵌套和接口可以支持代码的复用和多态。关于结构体嵌套:外层结构体类型通过匿名嵌套一个已命名的结构体类型后就可以获得匿名成员类型的所有导出成员,而且也获得了该类型导出的全部的方法。比如下面这个例子: type ShapeInterface interface { GetName() string } type Shape struct { name string } func (s *Shape) GetName() string { return s.name } type Rectangle struct { Shape w, h float64 } 复制代码Shape类型上定义了GetName()方法,而在矩形Rectangle的定义中匿名嵌套了Sha...阅读全文

博文 2020-04-20 13:34:22 kevinyan

RocketMQ主从同步源码分析

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 之前写了一篇关于 RocketMQ 队列与 Kafka 分区副本的区别文章,里面提到了 RocketMQ 的消息冗余主要是通过主备同步机制实现的,这跟 Kafka 分区副本的 Leader-Follower 模型不同,HA(High Available) 指的是高可用性,而 RocketMQ 的HA机制是通过主备同步实现消息的高可用。 HA 核心类 HA 的实现逻辑放在了 store 存储模块的ha目录中,其核心实现类如下: image HAService:主从同步的核心实现类 HAService$AcceptSocketService:主服务器监听从服务器连接实现类 HAServic...阅读全文

博文 2019-10-14 20:33:36 aside section ._1OhGeD

如何使用CSS选择所有子元素?

如何使用CSS递归选择所有子元素?下面本篇文章就来给大家介绍一下使用CSS递归选择所有子元素的方法,希望对大家有所帮助。 原文地址:如何使用CSS选择所有子元素?当元素是某个元素的子元素时,可以使用子选择器匹配,该选择器选择特定父级的所有子元素。子选择器由两个或多个由“>”分隔的选择器组成;它也称为element > element选择器。注:子选择器只能选择自己的子类,第二级元素,而不能选择第二级别以下的元素。语法:选择指定元素的所有指定子元素element1 > element2如果想要递归选择所有子元素,则使用以下语法 element1 > * { // CSS样式 } 示例1:选择所有子元素 阅读全文

博文 2020-03-20 21:32:48 yanghs

新装Linux操作系统后,要保留哪些自启动服务?

和Windows系统一样,Linux服务器运行过程中也会一些没用的软件服务默认运行,这些占用了很多系统资源,也会有安全隐患,所以一般是建议关闭的。那么,工作中Linux主机到底需要有哪些开机自启动服务呢? 新装Linux系统之后,有必要保留的开机自启动服务有5个: Ø sshd:远程连接Linux服务器时要用到,所以必须开启,不然就无法提供远程连接服务了。 Ø rsyslog:日志相关软件,这是操作系统提供的一种机制,系统的守护程序通常会使用rsyslog程序将各种信息写到各个系统日志文件中。 Ø network:系统启动时,如果想激活或关闭各个网络接口的话,可以考虑开启。 Ø crond:用于周期性的执行系统及用户配置的任务计划。有需要时开启。几乎是运维工作中必须要用的一个软件。 Ø sy...阅读全文

博文 2019-11-15 16:40:15 zhouzhou2018

通过例子学习 Go 和 Rust ---- 闭包

闭包简而言之,是一段有状态的代码。咱试着用闭包来做一个计数器,每次调用,闭包的状态就加1. Go func intSeq() func() int { i := 0 return func() int { i++ return i } } func main() { nextInt := intSeq() fmt.PrintLn(nextInt()) fmt.PrintLn(nextInt()) fmt.PrintLn(nextInt()) } 1 2 3 Rust 由于编译时我们无法知道闭包的体积,所以用一个Box把它套起来。另外,闭包的具体类型是不可描述的,只能用dyn关键字来通过Trait来描述。 fn main() { fn int_seq() -> Box阅读全文

博文 2020-03-03 15:32:56 Tericoder

Go 译文之词法分析与解析 Part Two

作者:Adam Presley | 地址:https://adampresley.github.io... 译者前言 本文是关于词法器实现的具体介绍,如果在阅读时遇到困难,建议参考源码阅读,文中的代码片段为了介绍思路。如何解析会在下一篇介绍。 最近简单看了下 Go 源码,在 src/go 目录下有几个模块,token、scanner 和 parser 应该就是 Go 词法相关实现的核心代码,打开 token 目录会发现其中的源码和上一节介绍的内容有诸多相似之处。 由于最近并发任务比较多,不能以最快的速度更新。词法的相关内容,除了本系列,我把其他一些相关文章的链接都贴在下面,如果英文阅读功底不错,可自行阅读。 A look at Go lexer/scanner packages Rob Pi...阅读全文

博文 2019-08-01 10:32:42 波罗学

Go入手

1、Mac配置环境 1.1 安装go: https://golang.org/dl/ 下载画圈文件,安装即可1.2 配置环境vim ~/.bash_profile 打开配置文件复制下面这些: export PATH="/opt/local/bin:/opt/local/sbin:/usr/local/go/bin:$PATH" export GOROOT=/usr/local/go export GOPATH=/Users/你的go目录/Go export GOBIN=$GOPATH/bin export PATH=$GOBIN:$PATH source ~/.bash_profile 是配置生效 使用 go env 查看go配置 或者 go version 查看版本,这两个命令来检测是否成...阅读全文

Go 译文之词法分析与解析 Part Two

作者:Adam Presley | 地址:adampresley.github.io/2015/05/12/… 译者前言 本文是关于词法器实现的具体介绍,如果在阅读时遇到困难,建议参考源码阅读,文中的代码片段为了介绍思路。如何解析会在下一篇介绍。 最近简单看了下 Go 源码,在 src/go 目录下有几个模块,token、scanner 和 parser 应该就是 Go 词法相关实现的核心代码,打开 token 目录会发现其中的源码和上一节介绍的内容有诸多相似之处。 由于最近并发任务比较多,不能以最快的速度更新。词法的相关内容,除了本系列,我把其他一些相关文章的链接都贴在下面,如果英文阅读功底不错,可自行阅读。 A look at Go lexer/scanner packages Rob ...阅读全文

博文 2019-07-26 18:06:42 波罗学

图解kubernetes服务打散算法的实现源码

在分布式调度中为了保证服务的高可用和容灾需求,通常都会讲服务在多个区域、机架、节点上平均分布,从而避免单点故障引起的服务不可用,在k8s中自然也实现了该算法即SelectorSpread, 本文就来学习下这个算法的底层实现细节 1. 设计要点 1.1 zone与node zone即代表一个区域,node则是一个具体的节点,而该打散算法的目标就是将pod在zone和node之间进行打散操作 1.2 namespace namespace是k8s中进行资源隔离的实现,同样的筛选也是如此,在筛选的过程中,不同namespace下面的pod并不会相互影响 1.3 计数与聚合 SelectorSpread算法是scheduler中优先级算法的一种,其实现了优先级算法的map/reduce方法,其中ma...阅读全文

博文 2020-01-19 14:34:19 代码仔

go tcp c/s server client 学习笔记

server1:package main import ( "fmt" "net" ) func main() { l, err := net.Listen("tcp", "127.0.0.1:9876") if err != nil { fmt.Println(err) } fmt.Println("服务器等待客户端连接") conn, err := l.Accept() if err != nil { fmt.Println(err) } defer conn.Close() fmt.Println("客户端建立连接 ") buf := make([]byte, 4096) n, err := conn.Read(buf) if err != nil { fmt.Println(err)...阅读全文

博文 2019-07-25 14:03:27 xingzhehxiang

详解Go语言的计时器

Go语言的标准库里提供两种类型的计时器Timer和Ticker。Timer经过指定的duration时间后被触发,往自己的时间channel发送当前时间,此后Timer不再计时。Ticker则是每隔duration时间都会把当前时间点发送给自己的时间channel,利用计时器的时间channel可以实现很多与计时相关的功能。 文章主要涉及如下内容: Timer和Ticker计时器的内部结构表示 Timer和Ticker的使用方法和注意事项 如何正确Reset定时器 计时器的内部表示 两种计时器都是基于Go语言的运行时计时器runtime.timer实现的,rumtime.timer的结构体表示如下: type timer struct { pp puintptr when int64 per...阅读全文

golang接口使用记录

golang接口使用记录 1. 总述 接口类型是对其他类型行为的概括与抽象,Go语言的独特之在于它是隐式实现,无需申明它实现哪些接口,只要提供接口所必须的方法即可。 接口即约定 实现单词和行的计数器,考虑使用bufio.ScanWords // counter.go // 计数器 type Counter interface { Count(fileName string) error } // 单词计数 type WordCount int func (w *WordCount) Count(fileName string) error { file, err := os.Open(fileName) if err != nil { return errors.New("open file...阅读全文

博文 2020-02-24 13:32:43 进击的大只文

图解kubernetes服务打散算法的实现源码

在分布式调度中为了保证服务的高可用和容灾需求,通常都会讲服务在多个区域、机架、节点上平均分布,从而避免单点故障引起的服务不可用,在k8s中自然也实现了该算法即SelectorSpread, 本文就来学习下这个算法的底层实现细节 1. 设计要点 1.1 zone与node zone即代表一个区域,node则是一个具体的节点,而该打散算法的目标就是将pod在zone和node之间进行打散操作 1.2 namespace namespace是k8s中进行资源隔离的实现,同样的筛选也是如此,在筛选的过程中,不同namespace下面的pod并不会相互影响 1.3 计数与聚合 SelectorSpread算法是scheduler中优先级算法的一种,其实现了优先级算法的map/reduce方法,其中ma...阅读全文

Go 译文之词法分析与解析 Part Three

作者:Adam Presley | 地址:adampresley.github.io/2015/06/01/… 译者前言 最近发现我的翻译是越来越随性了,刚开始文章翻译的时候比较拘束,现在更多强调可读性,比如有些对文章大意没有什么影响的文字我现在都会选择直接跳过。 这篇文章主要是关于 INI 解释器的 parser 实现,它会从上一节中 Lexer 中接收 Token 解析,最终返回给使用者具有实际意义的结构体。读了这个系列的文章,我相信大家对词法器实现的原理将会有了基本的理解,但如果要真正实践,似乎还有一段距离。有兴趣的话,我们可以实现个自己的 JSON 解释器。要求可以稍微简化,只解析到 JSON 的第一层。 译文如下: 本系列第一篇文章,英文原版,我们介绍了词法分析解析的一些基础概念,...阅读全文

博文 2019-08-01 01:04:15 波罗学

Go 译文之词法分析与解析 Part Three

作者:Adam Presley | 地址:https://adampresley.github.io... 译者前言 最近发现我的翻译是越来越随性了,刚开始文章翻译的时候比较拘束,现在更多强调可读性,比如有些对文章大意没有什么影响的文字我现在都会选择直接跳过。 这篇文章主要是关于 INI 解释器的 parser 实现,它会从上一节中 Lexer 中接收 Token 解析,最终返回给使用者具有实际意义的结构体。读了这个系列的文章,我相信大家对词法器实现的原理将会有了基本的理解,但如果要真正实践,似乎还有一段距离。有兴趣的话,我们可以实现个自己的 JSON 解释器。要求可以稍微简化,只解析到 JSON 的第一层。 译文如下: 本系列第一篇文章,英文原版,我们介绍了词法分析解析的一些基础概念,了解...阅读全文

博文 2019-08-01 12:32:37 波罗学

go学习笔记-init函数执行顺序分析

golang中有个神奇的函数init,该函数会在所有程序执行开始前被调用,每个包可以包含多个init函数,所有被编辑器识别到的init函数都会在main函数执行前被调用。通常被用来注册一个程序需要使用的依赖,如mysql注册,配置文件加载等。 在main包的使用 package main import "fmt" func main() { fmt.Println("这里是mian") } func init() { fmt.Println("这里是Init1") } func init() { fmt.Println("这里是Init2") } //输出结果 这里是Init1 这里是Init2 这里是main 一个很简单的示例,可以看到init函数是在main函数执行之前被执行的,并且一个...阅读全文

博文 2020-01-15 09:32:42 旧梦发癫