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

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 代码仔

Golang之控制语句

if条件判断 package main //if 条件判断 import "fmt" func main (){ age := 19 if age > 18{ fmt.Printf("澳门线上赌场开业啦") }else if age<18 && age>0{ fmt.Printf("快去上网课吧!!") }else{ fmt.Printf("error!") } } 复制代码for循环 在Go语言中,只有for循环,没有C语言中的while循环。 break 和continue可以改变控制流, break表示从当前循环跳出,结束循环。 continue表示跳过此次循环,进行下一次循环。 for循环包括两种: ​ 1.类似C语言中的循环 需要注意的是,必须将{与for循环的末尾放在同一行。否则...阅读全文

博文 2020-04-09 11:34:57 南风古灶

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

Golang之go module开发系列二--使用伪版本和GoCenter

Go模块已经为Go开发带来了秩序,但也存在一些潜在的混乱。管理模块尤其是伪版本可能很困难,尤其是在要进行一些最新更改的情况下。 JFrog GoCenter是一个免费的版本话棋模块仓库,现在它包含了一些重要的更新,可以帮助你坚持这个最佳实践。首先让我们看看伪版本是如何工作的,以及您可以期望从这些更改中得到什么。我们还提供了一些指导,让您在升级到1.13或更高版本时保持Go的构建工作。 Go 的模块版本化 对Go模块进行版本化是一个关键特性,它为开发人员提供了一种方法来确保他们的应用程序使用他们想要的依赖项。在对模块进行版本控制时,应用程序可以指定依赖的模块版本,因为我们知道模块版本与其他组件运行时兼容问题。 Go模块版本是通过在底层源存储库中标记其修订来分配的。go命令使用标准形式vX.Y....阅读全文

博文 2020-04-25 04:33:13 JFrog中国

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 波罗学

Golang之go module开发系列二--使用伪版本和GoCenter

Go模块已经为Go开发带来了秩序,但也存在一些潜在的混乱。管理模块尤其是伪版本可能很困难,尤其是在要进行一些最新更改的情况下。JFrog GoCenter是一个免费的版本话棋模块仓库,现在它包含了一些重要的更新,可以帮助你坚持这个最佳实践。首先让我们看看伪版本是如何工作的,以及您可以期望从这些更改中得到什么。我们还提供了一些指导,让您在升级到1.13或更高版本时保持Go的构建工作。Go 的模块版本化对Go模块进行版本化是一个关键特性,它为开发人员提供了一种方法来确保他们的应用程序使用他们想要的依赖项。在对模块进行版本控制时,应用程序可以指定依赖的模块版本,因为我们知道模块版本与其他组件运行时兼容问题。Go模块版本是通过在底层源存储库中标记其修订来分配的。go命令使用标准形式vX.Y.Z的语义...阅读全文

博文 2020-04-25 01:32:56 JFrog杰蛙科技

带你学够浪:Go语言基础系列 - 8分钟学控制流语句

★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定。可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ” 对于一般的语言使用者来说 ,20% 的语言特性就能够满足 80% 的使用需求,剩下在使用中掌握。基于这一理论,Go 基础系列的文章不会刻意追求面面俱到,但该有知识点都会覆盖,目的是带你快跑赶上 Golang 这趟新车。 Hurry up , Let's go ! 控制语句是程序的灵魂,有了它们程序才能完成各种逻辑,今天我们就来学习 Go 中的各种控制语句。 通过本文的学习你将掌握以下知识: if 条件语句for 循环语句switch 语句defer 延迟调用 if 条件语句 与大多数编程语言一样,if 用于条件判断,当条件表达式 expr ...阅读全文

博文 2020-06-03 01:34:22 柠檬橙

golang控制结构

go中只有一种循环控制结构, for。 没有do或while循环。 Go的循环有三种形式,只有其中的一种使用分号 for init; condition;post { } //普通的循环 sum := 0 for i := 0; i < 10; i++ { sum += i } for condition {} //和while一样 for {} //死循环 break和continue break可提前退出循环,终止当前的循环, 也可在break后指定标签, 用标签决定哪个循环被终止 //break可提前退出循环,终止当前的循环 for i := 0 ; i < 10 ; i++ { i f i > 5 { break 终止这个循环,只打印 0 到 5 } println(i) } //当...阅读全文

博文 2019-12-30 16:32:45 程序小白菜

图解kubernetes批处理Job控制器的关键设计

K8s中的批处理任务模块主要是由Job控制器完成,今天我们就来关注下其底层的关键设计,包括完成状态、并行模式、并行策略等关键机制 1. 基础概念 在聊k8s的任务模块的实现的时候,我们先看一下传统的任务系统的设计与实现,然后聊下基于k8s的基础的概念 1.1 传统的任务系统设计 传统的任务系统设计主要可以分为master(任务分配/故障感知/负载均衡)、Worker(任务执行/任务监控/任务管理)、分布式协调(etcd等存储元数据)、任务仓库(存储任务的实现比如类或者接口)等几部分, 从大的部分又可以切分为两个部分管控端(分布式协调/master/仓库)、执行端(Worker),传统的任务系统大概就是这样 通常复杂的就是如何在master如何做任务的负载均衡、任务的快速完成、依赖等管控功能,...阅读全文

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 旧梦发癫