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

Supervisor 的使用和进阶 (4) - supervisor Event 的使用

本文主要介绍 supervisor Event 的功能。 supervisor 作为一个进程管理工具,在 3.0 版本之后,新增了 Event 的高级特性, 主要用于做(进程启动、退出、失败等)事件告警服务。 Event 特性是将监听的服务(listener)注册到supervisord中,当supervisord监听到相应事件时,将事件信息推送给监听对应事件的listener。 事件类型 Event 可以设置 27 种事件类型,可以分为如下几类: 1. 监控进程状态转移事件; 2. 监控进程状态日志变更事件; 3. 进程组中进程添加删除事件; 4. supervisord 进程本身日志变更事件; 5. supervisord 进程本身状态变更的事件; 6. 定时触发事件。 事件可以被单独监...阅读全文

【译】Go 语言项目源码贡献官方指导文档

以前给 Go 语言项目源码提交过一些 commits,期间阅读他们的官方指导文档的时候觉得这篇指导文档可以作为绝佳的关于大型软件项目的规范管理的参考,因为最近又提交了几个 commits,就又把这篇文档再看了一遍,有感于 Go 团队在项目管理和工程实践上的一些宝贵经验,就把文档翻译成了中文;一来为了更加深入地理解 Go 语言团队的项目工程最佳实践,二来则是为了给其他有意给 Go 语言源码提交贡献的开发者提供一点参考。 导言 Go 语言项目欢迎所有的代码贡献者。 这是一份指导你完成向 Go 语言项目贡献代码整个流程的文档,会略微跟其他开源项目所使用的指导文档有所不同。我们假设阅读者已经对 Git 和 Go 有基本的理解以及具备相关的基础知识。 除了这里所介绍的信息,Go 语言社区也维护了一份关...阅读全文

博文 2020-04-07 10:32:42 panjf2000

Go语言一知半解上手记(三)

一、前言   在前两篇文章《Go语言一知半解上手记(一)》、《Go语言一知半解上手记(二)》中,我们实现了从读取 xlsx 格式的数据字典开始,到生成 schema 文件,到最后生成代码文件的完整过程。   在文章二中,我们在 template.go 中添加了解析 schema 的方法 analyzeSchema ,在这个方法里,又调用了 generateModelFile、generateControllerFile 来生成最后的代码文件。这两个方法对数据字典格式的针对性及强,参考性不大,因此文章中未进行描述。在后面的实现过程中,我们又增加了 router 中使用的代码脚本的生成功能,最终,在 analyzeSchema 中便有了三个代码文件生成函数的调用,他们目前是顺序执行的,而Go语言...阅读全文

博文 2020-02-18 14:34:17 明峰泉听

EtcdRaft源码分析(线性一致读)

背景 我们知道Raft是Leader+Follower的模型,所有的更新由Leader处理,然后再同步给Follower。 想象一下,如果要所有的节点都参与进来支持读取的请求,会带来什么样的问题? Leader跟Follower并不总是一致的,换句话说Follower会落后Leader的进度。如果没有特别的处理,那么不同的节点读取的结果很可能不一致。 如果Leader被集群孤立,而且其他人已经推举出了新的Leader。而老的Leader还没有察觉到这个变化,他任然觉得还是Leader,但是他的数据已经不可信。如果他还在对外提供服务,那么读取的结果很可能不一致。 EtcdRaft的线性一致读是通过ReadIndex的机制来实现,大致的实现其实很简单,也就是在处理请求之前,会去集群中确认自己权力...阅读全文

博文 2020-04-08 07:32:51 小蜗牛爬楼梯

Go 译文之 defer、panic 和 recover

作者:Andrew Gerrand翻译:https://blog.golang.org/defer-panic-and-recoverGo有和其他语言一样常见的流程控制语句:if, for, switch, goto。同时也有go表达式来实现在不同的goroutine中运行代码(并发)。而今天我们将讨论的是go的异常控制流程:defer、panic和recover。Deferdefer语句会将函数推入到一个列表中。同时列表中的函数会在return语句执行后被调用。defer常常会被用来简化资源清理释放之类的操作。举个例子,我们来观察下下面这个函数,它的主要功能是打开两个文件并将一个文件的内容拷贝到另一个文件:func CopyFile(dstName, srcName string) (wr...阅读全文

博文 2019-06-09 09:52:37 波罗学​

学习使用 Go 的反射

什么是反射 大多数时候,Go中的变量,类型和函数非常简单直接。当需要一个类型、变量或者是函数时,可以直接定义它们: type Foo struct { A int B string } var x Foo func DoSomething(f Foo) { fmt.Println(f.A, f.B) } 复制代码但是有时你希望在运行时使用变量的在编写程序时还不存在的信息。比如你正在尝试将文件或网络请求中的数据映射到变量中。或者你想构建一个适用于不同类型的工具。在这种情况下,你需要使用反射。反射使您能够在运行时检查类型。它还允许您在运行时检查,修改和创建变量,函数和结构体。 Go中的反射是基于三个概念构建的:类型,种类和值(Types Kinds Values)。标准库中的reflect包提供...阅读全文

博文 2020-01-19 12:34:19 kevinyan

[Golang实现JVM第二篇]解析class文件是万里长征第一步

正确解析class文件是万里长征第一步。本篇我们会全程使用golang完成class文件的解析工作。 数据类型 JVM的class文件完全是二进制文件,最小单位是字节,也有数据类型,但都是字节的整数倍(废话)。规范中class文件一共有两类数据,一种是无符号整数,一种是表。无符号整数一共有u1,u2, u4, u8四种类型,分别表示8bit, 16bit, 32bit, 64bit的无符号整数。表则是无符号整数的集合,class文件中在出现表之前都会先跟着一个u2类型的长度数据,表名后面表的总长度,这样才能正确解析表。 另外还要注意字节序的问题,JVM规范规定class文件统一采用Big Endian字节序,也就是低地址存储高位,高地址存放低位。如果是用C/C++语言写JVM,则程序使用的字...阅读全文

博文 2020-05-27 19:32:48 司青玄

如何通过Dataworks禁止MaxCompute 子账号跨Project访问

摘要: 之前有很多DataWorks用户问MaxCompute访问权限问题,比如子账号为什么可以增删查别人在别的项目创建的表,即使这个子账号并没有加入那个项目 。 今天手把手教大家实现子账号授权并关闭跨Project的数据访问权限。 **原文链接:http://click.aliyun.com/m/43802/** 之前有很多DataWorks用户问MaxCompute访问权限问题,比如子账号为什么可以增删查别人在别的项目创建的表,即使这个子账号并没有加入那个项目 。 今天手把手教大家实现子账号授权并关闭跨Project的数据访问权限。 1、访问RAM控制,https://ram.console.aliyun.com/ ![图片描述](http:...阅读全文

Go 每日一库之 flag

缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态。写博客是一种方式,但不是每天都有想写的,值得写的东西。有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏差,或者细节还没有完全掌握,要去查资料,了解了之后又继续写,如此反复。这样会导致一篇博客的耗时过长。 我在每天浏览思否、掘金和Github的过程中,发现一些比较好的想法,有JS 每日一题,NodeJS 每日一库,每天一道面试题等等等等。https://github.com/parro-it/awesome-micro-npm-packages这个仓库收集 NodeJS 小型库,一天看一个不是梦!这也是我这个系列的灵感。我计划每天学习一个 Go 语言的库,输出一篇介绍型的博文。每天一库当然是理想状态...阅读全文

博文 2020-01-12 23:32:39 darjun

深入理解Golang之context

context是Go并发编程中常用到一种编程模式。本文将从为什么需要context,深入了解context的实现原理,以了解如何使用context。 作者:Turling_hu来源: 掘金 原文链接: https://juejin.im/post/5e5268... 前言 这篇文章将介绍Golang并发编程中常用到一种编程模式:context。本文将从为什么需要context出发,深入了解context的实现原理,以及了解如何使用context。 为什么需要context 在并发程序中,由于超时、取消操作或者一些异常情况,往往需要进行抢占操作或者中断后续操作。熟悉channel的朋友应该都见过使用done channel来处理此类问题。比如以下这个例子: func main() { mess...阅读全文

博文 2020-03-01 12:32:41 Kevin

redis 学习笔记

#### redis安装 ###### linux 目录结构 * /bin&/sbin ;kernel 二进制可执行程序 * /usr/bin&/usr/sbin&/usr/lib ;(unix software resource) ubuntu/BSD/centOS... 等系统默认自带二进制 可执行程序/动态库 或 通过包管理工具(apt-get/yum)安装的二进制 可执行程序/动态库 * /usr/local/bin&/usr/local/sbin&urs/local/lib ;预留的安装目录, 用于存放用户手动编译安装的二进制 可执行程序/动态库 * /opt ;预留的安装目录, 用于存放用户通过软件安装包安装的大型软件 ###### redis 手动编译安装 ```makefil...阅读全文

golang 结构体

//结构体 package main import "fmt" // 用 type 关键字定义一个结构体 type person struct { name string age int } func main() { //实例化一个结构体 // 第一种情况 p1 := person{} p1.name = "小麦客" p1.age = 666 fmt.Println(p1.name) fmt.Println(p1.age) // 第二种情况 p2 := person{ name:"小麦客", age:666, } // %#v 打印详细信息 fmt.Printf("%#v\n", p2) } 结构体_结构体指针.pn...阅读全文

博文 2020-04-08 07:32:49 小麦客

Go语言(十七) 配置文件库项目

配置文件库项目 简介 用途: 解析ini类型的配置文件 知识点: 主要基于反射 ini配置文件的解析,配置文件如下 ;config file [server] host = www.baidu.com port = 8080 [cartdb] user = root.xxx password = root host = localhost port = 3306 database = cartdb rate = 1.2 需求分析 拆离出动态配置 映射数据到项目数据结构中-包含配置文件读取(UnMarshalFile)和写入(MarsharFile)两个功能 代码部分 package oconfig import ( "fmt" "io/ioutil" "reflect" "strconv" ...阅读全文

博文 2020-05-03 01:33:11 wx5b285b48ed74e

第五章 函数

函数就是一个单独的代码块,可以从其他的地方多次调用。在golang中函数可以作为一个类型声明某一变量。同时在golang中的函数时可以返回多个值的。声明和函数基本定义这里不做赘述 log包提供很多错误日志记录,不过一般log会输出错误之前输出时间信息,所以当不希望看到这些时间信息的时候可以使用log.SetPrefix()和log.SetFlags(0)来屏蔽时间前缀。直接当然log包的Fprintf函数也可以直接输出错误信息。 读取文件时,常常因为读取长度与文件结尾不能同步,导致各种错误,在go的io包中定义了io.EOF错误,标识文件结束。 匿名函数 拥有函数名的函数只能在包级语法块中被声明,通过函数字面量,可以绕开这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,...阅读全文

博文 2018-11-20 17:34:45 zhaoxi_yu

24.依赖管理及go module

Go语言的依赖管理随着版本的更迭正逐渐完善起来。 windows开启go module:set GO111MODULE=on Linux开启go module:export GO111MODULE=on 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决? godep Go语言从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么go工具链会优先使用vendor内的包进行编译、测试等。 godep是一个通过vender模式实现的Go语言的第三方依赖管理工具,类似的还有由社区维护准官方包管理工具dep。 安装 执行以下命令...阅读全文

博文 2020-05-05 13:32:44 雪上霜

剥开比原看代码05:如何从比原节点拿到区块数据?

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前一篇中,我们已经知道如何连上一个比原节点的p2p端口,并与对方完成身份验证。此时,双方结点已经建立起来了信任,并且连接也不会断开,下一步,两者就可以继续交换数据了。 那么,我首先想到的就是,如何才能让对方把它已有的区块数据全都发给我呢? 这其实可以分为三个问题: 我需要发给它什么样的数据? 它在内部由是如何应答的呢? 我拿到数据之后,应该怎么处理? 由于这一块的逻辑还是比较复杂的,所以在本篇我们先回答第一个问题: 我们要发送什么样的数据请求,才能让比原节点把它持有的区块数据发给我? 找到发...阅读全文

博文 2018-07-23 15:34:50 比原链Bytom

Go Web 编程--如何确保Cookie数据的安全传输

什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 Cookie主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如跟踪分析用户行为等) Go语言如何表示Cookie 在Go的net/http库中使用http.Cookie结构体表示一个Cookie数据,调用http.SetCookie函数则会告诉终端用户的浏览器把...阅读全文

博文 2020-03-08 16:33:04 Kevin

Go语言(十五) 反射

反射 变量介绍 变量的内在机制 类型信息,这部分是元信息,是预先定义好的 值类型,这部分是在程序运行过程中动态改变的 反射介绍 反射与空接口 空接口可以存储任何类型的变量 在程序运行时动态获取变量的类型信息和值信息,就叫反射 import ( "fmt" "reflect" ) func TestType(a interface{}) { //获取类型(静态信息) t := reflect.TypeOf(a) kind := t.Kind() switch kind { case reflect.Int: fmt.Printf("a is a int\n") a = 2 case reflect.String: fmt.Printf("a is a string\n") } fmt.Prin...阅读全文

博文 2020-04-23 16:33:23 wx5b285b48ed74e

基于比原链开发Dapp(四)-bufferserver源码分析

简介 ​ 本章内容主要直接分析bufferserver源码,也就是比原链官方Dapp-demo的后端接口,里面包含了UTXO的托管逻辑、账单逻辑等,还会介绍一些改进的源码内容。 储蓄分红合约后端bufferserver源码 本次源码分析主要根据bufferserver,2019年5月13号的版本,到此3个月没有更新了。 源码分析 ​ 我们来看看bufferserver的源码,项目是用golang语言开发的web服务端,内容比较简单也就几个接口。先看看源码的结构: img 所有的golang项目首先都要看一下main.go,但是本项目有两个,因为一个是负责web的http接口的,另外一个是负责后端同步数据的。 先看看表结构,dump.sql ##基础配置表 CREATE TABLE `base...阅读全文

博文 2019-08-23 04:32:50 速易证

Golang基础(四) | 结构体

结构体 Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如下代码所示: type person struct { name string age int } 声明一个struct如此简单,上面的类型包含有两个字段 一个string类型的字段name,用来保存用户名称这个属性 一个int类型的字段age,用来保存用户年龄这个属性 具体的使用方式如下: type person struct { name string age int } var P person // P现在就是person类型的变量了 P.name = "Asta...阅读全文

博文 2020-03-06 23:32:48 youzhihua

Golang数据结构-线性表

基本概念 定义:零个或者多个数据元素的有限序列,在复杂的线性表中,一个数据元素可以由若干个数据项组成。 直接前驱元素:若线性表记为(a1a2a3...an),则表中a2领先于a3,则称a2是a3的直接前驱元素,且有且仅有一个直接前驱元素 直接后继元素:称a3是a2的直接后继元素,且有且仅有一个直接后继元素 线性表的长度:线性表的元素个数n,为线性表的长度,随着线性表插入和删除操作,该值是变动的,线性表的存储长度一般小于数组的长度 数组的长度:存放线性表的存储空间的长度,存储分配后这个值一般是不变的 空表:长度n为0时,该线性表为空表 地址:存储器的每个存储单元都有自己在内存的编号,简称为地址 线性表的存储 顺序存储结构 线性表的顺序存储结构是指用一段地址连续的存储单元依次存储线性表的数据元素...阅读全文

博文 2020-05-30 03:32:48 也疯狂

golang reflect 反射

package main import ( "fmt" "reflect" ) // reflect 反射 type Student struct { Name string `json:"name" jike:"名字"` Score int `json:"score" jike:"成绩"` } func main() { s1 := Student{ Name:"xiaomaike", Score:666, } t_obj := reflect.TypeOf(s1) // TypeOf() 查看对象类型 //fmt.Printf("%#v\n", t_obj) //fmt.Println(t_obj) //fmt.Print(t_obj.Name(), t_obj.Kind()) // 类...阅读全文

博文 2020-04-10 23:32:42 小麦客

Golang切片slice存储微探索

问题 不断将获取的信息存储进切片slice中,为了方便更新信息中的某些字段,建立了一个key和切片项地址的map,一边在切片中存储信息,一边建立Key-Value关系,导致通过key取到的值并不正确,也导致需要更新的字段没有更新,代码类似于: var dataSlice []interface{} var keyToData = make(map[string]interface{}) var id = 0 for info := fetchInfo(key) { dataSlice = append(dataSlice, info) // keyToData[key] = &info keyToData[key] = &dataSlice[id] id++ } info := keyToD...阅读全文

博文 2019-05-24 03:34:40 树袋Papa

MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案

摘要: 摘要 在SQL Server备份专题分享中,前四期我们分享了:三种常见的数据库备份、备份策略的制定、如何查找备份链以及数据库的三种恢复模式与备份之间的关系。本次月报我们分享SQL Server如何利用文件组技术来实现数据库冷热数据隔离备份的方案。 **摘要** 在SQL Server备份专题分享中,前四期我们分享了:三种常见的数据库备份、备份策略的制定、如何查找备份链以及数据库的三种恢复模式与备份之间的关系。本次月报我们分享SQL Server如何利用文件组技术来实现数据库冷热数据隔离备份的方案。 **场景引入** 假设某公司有一个非常重要的超大的数据库(超过10TB),面临如下场景: 该数据库中存储了近10年的用户支付信息(payment),非常重要 ...阅读全文

golang-nsq系列(二)--nsqd源码解析

上一篇初识了 nsq 三个模块(nsqd, nsqlookupd, nsqadmin)的 demo演示,本篇则从源码开始,一步一步去解析 nsqd 的执行流程和逻辑处理,学习别人优秀的项目架构,以期学以致用。 1. nsqd 执行入口 在 nsq/apps/nsqd/main.go 可以找到执行入口文件,如下: nsqd-path 2. nsqd 执行主逻辑源码 2.1 通过第三方 svc 包进行优雅的后台进程管理,svc.Run() -> svc.Init() -> svc.Start(),启动 nsqd 实例; func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); ...阅读全文

博文 2019-10-29 14:32:48 aside section._1OhGeD

channel 和 select 控制 goroutines

最近有一个需求是在一个常驻内存的程序中结束相关任务。在 Go 中,创建一个 goroutine 非常简单,只需要 go 一下就可以了,但是如果我创建了很多 goroutine,想要结束怎么办? 比如说我有一个死循环的例子 1234567891011121314151617181920package mainimport ("fmt" "sync" "time")func main() {queue := make(chan int, 20) var wg sync.WaitGroup for { // 就是一个死循环 queue <- 1 <-queue for i := 0; i <10; i++ {wg.Add(1) go func(i int) {time.Sleep(5 * time...阅读全文

博文 2020-02-21 10:43:38 ipfans's Blog

Go 模块--开始使用 Go Modules

Go的1.11和1.12版本包括对模块--新的Go依赖管理系统的初步支持,使依赖版本信息变得明确且更易于管理。这篇博客文章介绍了开始使用模块所需的基本操作。 模块是存储在根目录有一个 go.mod文件的文件树中的 Go 包(package)的集合。go.mod文件定义了模块的module path(也是模块根目录的导入路径)以及模块依赖的其他模块的要求,满足了依赖要求模块才能被成功构建起来。每个依赖模块的要求被写为一个模块路径和相应的模块版本。 下面展示了一个简单的go.mod文件 module example.com/hello go 1.12 require rsc.io/quote v1.5.2 从Go 1.11开始,当当前目录或任何父目录有go.mod时,只要该目录位于$GOPATH...阅读全文

博文 2020-01-05 16:32:38 Kevin

Golang 学习笔记:反射

反射(Go Reflect) 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。 反射就是在运行时动态的获取一个变量的类型信息和值信息。 每种语言的反射模型都不同,并且有些语言...阅读全文

博文 2020-06-03 14:32:50 sunlingbot

golang-nsq系列(四)--源码解析总结篇

1. 前言:为什么要使用 MQ 消息队列 随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。 一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。 本文将从 MQ 比较、NSQ 介绍、源代码逻辑、亮点小结等方面进行解析,以期对 NSQ 有较为深入的理解。 2. 主流 MQ 比较 目前主流的 MQ 有 Kafka, RabbitMQ, NSQ, RocketMQ, ActiveMQ,它们的对比...阅读全文

博文 2019-12-12 00:32:40 热爱coding的稻草

MaxCompute与OSS非结构化数据读写互通(及图像处理实例)

摘要: MaxCompute作为阿里巴巴集团内部绝大多数大数据处理需求的核心计算组件,拥有强大的计算能力,随着集团内外大数据业务的不断扩展,新的数据使用场景也在不断产生。在这样的背景下,MaxCompute(ODPS)计算框架持续演化,而原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的通过新增的非结构化数据处理框架,开放给不同的外部数据。 **0\. 前言** MaxCompute作为阿里巴巴集团内部绝大多数大数据处理需求的核心计算组件,拥有强大的计算能力,随着集团内外大数据业务的不断扩展,新的数据使用场景也在不断产生。在这样的背景下,MaxCompute(ODPS)计算框架持续演化,而原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的通过新增的非结构化数据处理...阅读全文

golang post模拟客户端多文件上传以及处理

为了模拟客户端和服务器端,我这儿开了两个进程,进程A(监听地址:http://192.168.50.250:8080 路由/objects)进程B(监听地址:http://192.168.50.250:8081 路由:/objetcs)方法都是post。进程A是监听客户上传的文件,然后模拟http clien上传给进程B。在B中将文件存储或者将内容打印。 进程A post /ojects: func PostFile(c *gin.Context){ var b bytes.Buffer w := multipart.NewWriter(&b) c.Request.ParseMultipartForm(100000) multiPartform ,_:= c.MultipartForm() ...阅读全文

博文 2019-08-15 18:57:23 我的饭卡呢

图解kubernetes Kubelet驱逐管理关键实现

驱逐管理是kubelet自我保护的一种机制,当资源缺乏的时候,通过阈值和策略主动驱逐部分的Pod从而保持系统的资源水位在一个合理的范围内,本身的策略官方文档上已经写的很详细,今天只是看下其在代码上的一些设计 1. 设计臆测 1.1 驱逐总体流程 驱逐总体流程主要是通过获取当前使用资源的统计信息和当前活跃的Pod容器列表,然后结合资源阈值来决策是否需要进行Pod的驱逐 1.2 基于观察者模式的观测 在驱逐管理器中基于观察者模式实现对特殊资源驱逐管理的支持,比如内存资源,在某些情况下即时当前的资源水位没有达到阈值,也可能会触发oom killer这个时候,对应的ThresholdNotifier也会尝试进行状态同步,从而确定是否要主动的驱逐一些节点, 目前这个特性应该还没开, 同理如果这个资源有...阅读全文

博文 2020-02-25 13:34:30 8小时_2020

第三十一章:JWT与Golang

JWT基础概念 JWT是 json web token的简称 其中的 token 是令牌的意思, 其实这个令牌实质上是服务端生成的一段有规则的字符串 我们看看JWT官方自己对其的定义 JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be...阅读全文

博文 2020-04-05 20:32:50 captain89

Go语言入门(五)结构体&练习

结构体&练习 结构体 定义 Go中的面向对象是通过 struct来实现的,struct是用户自定义的类型 //定义结构体 /定义结构体 type User struct { Name string Gender string Age int AvatarUrl string } func useStruct() { //初始化结构体1 var user1 User user1.Name = "jeson" user1.Gender = "male" user1.Age = 20 user1.AvatarUrl = "http://baidu.com" //初始化结构体2 user2 := User{ Name: "miky", Gender: "female", Age: 18, } fmt...阅读全文

博文 2020-03-26 23:33:12 wx5b285b48ed74e

在 Go 语言项目中使用 Travis CI

文链接:在 Go 语言项目中使用 Travis CI Travis CI 是一种免费的持续集成服务,而 持续集成(CI, Continuous integration) 是一种软件工程流程,概括来讲就是多提交小的 Commit 来更快的发现软件的 Bug,从而提高软件质量。 本文会详细介绍如何在 Go 语言项目中使用 Travis CI。 准备工作 GitHub 账号:用于保存项目。 Travis CI 账号:点击右上角的 Sign in with GitHub 即可通过 GitHub 创建关联账号。 示例项目 hello,它包含三个文件: hello.go: package hello func Hello() string { return "Hello, World!" } hello...阅读全文

博文 2020-05-31 23:32:48 line

前端工程师吐后端工程师(第九讲)——最不擅长的数据库操作

第八讲中我们介绍了如果使用Gin写一些常用的接口,本讲我们主要介绍一下数据库如何操作。这一讲没有具体页面,可能对于前端工程师会不太习惯。首先我们要单件一个mysql数据库环境。如果不会的话可以参考这个教程https://www.jianshu.com/p/3a0de5da49f3,在搭建完成MySQL,并且启动MySQL之后。数据的管理员账户名设置成root,数据库密码设置为00000000。因为后续我们在代码中使用的数据库相关代码,会以这个为准.我们可以通过mysql -h 127.0.0.1 -P 3306 -u root -p 000000000 指令来连接刚刚搭建在本机上的数据库。127.0.0.1为本机IP,3306为数据库具体端口,root为数据库用户名,000000000为数据...阅读全文

博文 2020-01-08 19:32:47 陈辰CC老师

图解kubernetes调度器SchedulingQueue核心源码实现

SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要讨论SchedulingQueue的设计与实现的各种实现, 了解探究其内部实现与底层源码,本系列代码基于kubernets1.1.6分析而来,图解主要位于第二部分 SchedulingQueue设计 队列与优先级 队列与场景 类型 描述 通常实现 队列 普通队列是一个FIFO的数据结构,根据元素入队的次序依次出队 数组或者链表 优先级队列 优先级队列通常是指根据某些优先级策略,高优先级会优先被获取 数组或者树 其实在大多数的调度场景中,大多都是采用优先级队列来实现,优先满足优先级比较高的任务或者...阅读全文

博文 2020-01-13 11:34:24 代码仔

Docker基础(2) 实践篇

Docker基础(2) 实践篇 Docker的指令系统 全局指令 Docker仓库管理 Docker镜像管理 Dockerfile Docker容器管理 Docker Compose 命令的嵌套 Docker的指令系统 Docker指令的操作对象主要针对四个方面: 针对守护进程的系统资源设置和全局信息的获取。比如:docker info、docker deamon等。 针对Docker仓库的查询、下载操作。比如:docker search、docker pull等。 针对Docker镜像的查询、创建、删除操作。比如:docker images、docker build等。 针对Docker容器的查询、创建、开启、停止操作。比如:docker ps、docker run、docker star...阅读全文

博文 2020-03-02 01:32:39 zhixin9001

golang结构体

定义 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 结构体的定义 结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下: type struct_variable_type struct { member definition member definition ... member definition } 结构体声明格式: variable_name := structure_variable_type {value1, value2...valuen} 或 variable_name := structure_variable_type { key1: v...阅读全文

博文 2020-01-01 02:32:54 程序小白菜

图解kubernetes Kubelet驱逐管理关键实现

驱逐管理是kubelet自我保护的一种机制,当资源缺乏的时候,通过阈值和策略主动驱逐部分的Pod从而保持系统的资源水位在一个合理的范围内,本身的策略官方文档上已经写的很详细,今天只是看下其在代码上的一些设计 1. 设计臆测 1.1 驱逐总体流程 驱逐总体流程主要是通过获取当前使用资源的统计信息和当前活跃的Pod容器列表,然后结合资源阈值来决策是否需要进行Pod的驱逐 1.2 基于观察者模式的观测 在驱逐管理器中基于观察者模式实现对特殊资源驱逐管理的支持,比如内存资源,在某些情况下即时当前的资源水位没有达到阈值,也可能会触发oom killer这个时候,对应的ThresholdNotifier也会尝试进行状态同步,从而确定是否要主动的驱逐一些节点, 目前这个特性应该还没开, 同理如果这个资源有...阅读全文

Nsq原理分析(二)

在上一篇文章中对nsq进行了简单的介绍,从nsq 的golang的客户端代码分析了一下nsq的使用,这篇文章会分析nsqd的代码 Nsqd代码分析 nsqd做了什么 nsqd接收对topic、channel的创建以及对消息的存储和分发 nsqd向nsqlookup注册自己的服务信息,ip 和端口,向nsqlookup注册自己的元数据信息(topic、channel),nsqd也会向nsqdlook查询topic、和channel信息 nsqadmin 是一个简单的管理界面,通过它可以查询topic、channel、消费者等等一些基本信息,nsqadmin是从 nsqlookup中获取信息的,通过nsqadmin也可以创建topic、channel,创建到了nsqlookup中,在nsqloo...阅读全文

博文 2020-05-29 22:32:44 朱伟

图解kubernetes Pod生命周期事件生成器

PLEG(PodLifecycleEventGenerator)主要是用于周期性检测Pod的运行状态,从而对比Pod前后状态生成事件从而触发kubelet进行Pod容器状态的校证,让我们一起来初探下其内部实现机制 1. 图解设计 1.1 Pod事件生成 Pod事件生成主要是根据对应Pod前后的状态对比来实现,首先通过runtime来获取当前节点的所有Pod的列表,并将对应的状态进行保存,这样在下一个轮训周期就可以通过前后状态的对比去发现状态发生改变的Pod的容器,并且产生对应的事件 1.2 事件通知与状态同步 Pod事件生成之后会通过管道将对应的事件同步给状态同步线程,状态同步线程感知到Pod的变更事件后,会与Pod的目标状态进行对比同步,并调用Runtime来进行最终校证操作的执行,同时在...阅读全文

2.7 Socket Programming: Creating Network Applications

在网络应用开发中,开发者首先要做的一个决定是使用 TCP 还是 UDP 作为传输层协议。TCP 是基于连接,并且基于字节流提供可靠的数据传输的协议。而 UDP 是无连接,通过数据包发送数据,并不保证送达的协议。 我们将在这一节分别利用 UDP 和 TCP 实现一套 client-server 程序。 该程序主要完成的功能是: client 从键盘读取一行字符串,并发给 server server 收到字符串并转换成大写 server 将修改后的字符串发送给 client client 收到修改后的数据并显示 2.7.1 Socket Programming with UDP UDP 在发送数据包时,需要先在数据包中附加地址的信息。网络会利用这个信息 route 数据包到达接收程序。 附加的地...阅读全文

博文 2020-05-13 03:32:47 找不到工作

在 Go 语言项目中使用 Travis CI

文链接:在 Go 语言项目中使用 Travis CI Travis CI 是一种免费的持续集成服务,而 持续集成(CI, Continuous integration) 是一种软件工程流程,概括来讲就是多提交小的 Commit 来更快的发现软件的 Bug,从而提高软件质量。 本文会详细介绍如何在 Go 语言项目中使用 Travis CI。 Travis CI logo 准备工作 GitHub 账号:用于保存项目。 Travis CI 账号:点击右上角的 Sign in with GitHub 即可通过 GitHub 创建关联账号。 示例项目 hello,它包含三个文件: hello.go: package hello func Hello() string { return "Hello, ...阅读全文

博文 2020-05-31 21:34:47 sulinehk

图解kubernetes调度器SchedulingQueue核心源码实现

SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要讨论SchedulingQueue的设计与实现的各种实现, 了解探究其内部实现与底层源码,本系列代码基于kubernets1.1.6分析而来 SchedulingQueue设计 队列与优先级 队列与场景 类型 描述 通常实现 队列 普通队列是一个FIFO的数据结构,根据元素入队的次序依次出队 数组或者链表 优先级队列 优先级队列通常是指根据某些优先级策略,高优先级会优先被获取 数组或者树 其实在大多数的调度场景中,大多都是采用优先级队列来实现,优先满足优先级比较高的任务或者需求,从而减少后续高优...阅读全文

博文 2020-01-13 13:32:42 仔仔