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

golang goroutine

package main import ( "fmt" "sync" "time" ) /* WaitGroup用于等待一组线程的结束。父线程调用Add方法来设定应等待的线程的数量。每个被等待的线程在结束时应调用Done方法。 同时,主线程里可以调用Wait方法阻塞至所有线程结束。 */ var wg sync.WaitGroup func test(i int){ fmt.Println("test func...", i) time.Sleep(time.Second) // 表示goroutine已经执行完成 wg.Done() } func main() { var count = 100 // 添加goroutine计数器 wg.Add(count) for i:=0;i阅读全文

博文 2019-12-14 13:32:41 就超棒

修改Go语言(golang)编译器源代码让它支持UTF-8 BOM

版权声明:本文为博主Liigo原创,未经授权不得转载。 https://blog.csdn.net/liigo/article/details/7467309 Go语言(golang)第一个正式版Go1发布了,但是这个新兴的编程语言还是非常不完善。这不,我(Liigo)又发现它的编译器竟然不支持编译带BOM的UTF-8编码的.go源文件。这就很奇怪,该语言明明要求源代码文件.go必须是UTF-8编码,但又不允许带UTF-8 BOM。要知道,这个世界上带BOM的文件太多了,很多文本编辑器/代码编辑器/IDE支持生成、甚至默认生成带有BOM的UTF-8文件。如果仅仅因为源代码文件多了BOM,编译器就不能编译这个文件,那也太低能了。 Go语言编译器(gc)不支持带有BOM的UTF-8源文件: Go...阅读全文

博文 2012-03-17 08:27:35 liigo

AQS抽象队列同步器

模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 Lock接口及其实现 中,DemoReentrantLock 和 DemoReadWriteLock 代码相似度很高。DemoReentrantLock 中的加解锁完全可以用DemoReadWriteLock中代替,即可实现加解锁。 优化两个锁的代码-采用模板方法模式 CommonMask实现两个锁共有的方法 import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurr...阅读全文

博文 2020-01-19 01:32:42 依弗布德甘

服务治理那些事-容错之断路器

微服务架构将某个单一的复杂系统拆分成多个可独立自治的服务,服务之间通过松耦合的方式进行交互,这为我们带来了许多好处,包括低耦合、可重用性、业务敏捷性和分布式部署能力、强扩展性。但于此同时,也给我们引进了新的挑战。​ 在微服务场景下,每个模块之间的互通都通过远程调用的方式来代替传统单体架构中的内存调用,在获得扩展性、重用性的同时,也使得整个体系结构因为网络的不稳定性、资源的过量使用变得更加脆弱。当一项或多项依赖服务持续不可用或出现高延迟时,将会导致整个服务级联失败。而且,服务客户端中的重试逻辑会使呈现高延迟的服务状况恶化,最终使整个系统陷入瘫痪。就像多米诺骨牌效应一样推倒整个系统。 duominuo.jpg 为了提高服务的可用性,避免级联影响,最经典的解决办法之一就是在服务之间的RPC边界引入...阅读全文

博文 2020-04-13 09:32:47 你比天气还晴朗

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

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

好程序员大数据培训技术分享:Hadoop集群同步

好程序员分享:Hadoop集群同步分享——是技术突飞猛进的很好体验!在好程序员学习大数据技术,开始学会了分享,班里五十个人,每个人就能得到49份不同技术探讨。每次到分享的时刻,总会收获不同的想法。一、同步方式 选择一个机器,作为时间服务器(这里选择hadoop01),所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。二、所需工具 时间同步服务器有两个:ntpd和ntpdatp。虽然使用二者都能达到时间同步的目的,但是使用之前得弄清楚一个问题,ntpd与ntpdate在更新时间时有什么区别。ntpd不仅仅是时间同步服务器,它还可通过客户端与标准时间服务器进行时间同步,而且是平滑同步,并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行。三、...阅读全文

使用 Go 添加 Nginx 代理

简介 反向代理 负载均衡 轮询 加权轮询 最少连接 iphash 通用 hash 总结 当前部分的代码 简介 Nginx 是一个高性能的 HTTP 服务器和反向代理服务器. 最常用的两个功能是反向代理和负载均衡. 反向代理 反向代理是正向代理的反面. 普通的代理服务器是需要用户主动去设置的, 用户在自己的电脑上设置并连接代理服务器, 从而可以隐藏自己的 IP, 使得应用服务器不知道客户端的 IP 地址. 而反向代理是作为应用服务器的代理, 安装在服务器上. 客户端实际上访问的反向代理服务器, 反向代理服务器再去访问实际的应用服务器, 然后将获取到的响应传送给客户端. 使用 Nginx 配置反向代理非常简单, 基础配置如下: upstream web { server 127.0.0.1:80...阅读全文

博文 2019-11-05 11:04:23 帅气猫咪

0-0 Golang笔记开篇

术语 Gopher 使用Golang开发的工程师,自称Gopher Golang 版本 目前Golang的版本 go version go1.11 darwin/amd64 建议目前可选版本 go1.10.4 开发环境 目前(2015-09-15),go-plus暂时不支持golang 1.5.1的 vendor 特性。 我在开发环境配置 vendor 特性,并将golang编写的若干项目,按照 vendor 方式重新组织。 在Atom编辑时,如果遇到与存储在 vendor 包的语法提示时,则不能自动获取。 Golang目前支持主流的操作系统 macOS Windows 32 & 64 Linux 推荐在 macOS环境下开发。 作者同时在 macOS 和 Docker Linux 环境下进...阅读全文

博文 2018-09-16 16:34:40 佛祖君

golang 指针类型引起的神奇 bug

下面是使用的结构体接口抽象定义,其实就是将结构体存进一个 map里。由于是读写都比较频繁,我加了读写锁。 // add progress listener. func (upload *UploaderGateway) AddProgress(key string, v ProgressListener) { upload.mutex.Lock() defer upload.mutex.Unlock() upload.ProgressMap[key] = v } //get progress listener. func (upload *UploaderGateway) GetProgress(key string) (v ProgressListener, err error) { up...阅读全文

博文 2019-06-03 23:34:19 张高元

golang 和 C++ 的内存对齐

内存对齐规则 有效对齐值是固定值和结构体中最长数据类型长度中较小的那个。固定值系统默认为 32 位是 4, 64 位是 8,#pragma pack(n)设置了则是对应的 n。 结构体第一个成员的 offset 为 0,以后每个成员相对于结构体首地址的 offset 都是 min{该成员大小, 有效对齐值}的整数倍,如有需要编译器会在成员之间加上填充字节。 结构体的总大小为 有效对齐值 的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。 C++内存对齐 常见类型占用内存大小 类型/编译器 16 位编译器 32 位编译器 64 位编译器 bool 1 1 1 char 1 1 1 char* 2 4 8 int 2 4 4 float 4 4 4 double 8 8 8 long l...阅读全文

博文 2020-05-20 16:45:32 玖零儛

golang 学习笔记 1.2 常量

1.2 常量 常量值必须是编译期可确定的数字、字符串、布尔值。 const x, y int = 1, 2 // 多常量初始化 const s = "Hello, World!" // 类型推断 const ( // 常量组 a, b = 10, 100 c bool = false ) func main() { const x = "xxx" // 未使用局部常量不会引发编译错误。 } 不支持 1UL、2LL 这样的类型后缀。 在常量组中,如不提供类型和初始化值,那么视作与上一常量相同。 const ( s = "abc" x // x = "abc" ) 常量值还可以是 len、cap、unsafe.Sizeof 等编译期可确定结果的函数返回值。 const ( a = "abc" b...阅读全文

博文 2019-03-22 05:34:41 Diogoxiang

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

Golang学习笔记5——数组array

1.array的定义 定义数组的格式: var a[4]int //元素自动初始化为零 a := [...]int{19:1} //编译器按照初始化值数量确定数组长度 a := [5]int{1,2} //未提供初始值的元素自动初始化为零 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 数组在go中为值类型 2.数组指针和指针数组 //数组指针是指获取数组变量的地址。 //此时变量p就是指向数组的指针。特别注意p定义的类型为长度为100的数组的指针。 长度必须相等才能赋值。 func main() { var a = [...]int{99:1} var p *[100]int = &a fmt.Println(p) } //指针数组是指元素为指针类型的数组 func main(...阅读全文

博文 2017-10-25 16:00:05 marks-gui

go gl 彩色的三角形

go 彩色三角形 之前在网上想找一个能渲染颜色的go gl图形编程例子,,找了半天都是白色的三角形。。。于是自己研究了半天,大概是研究出来的样子,记录到这里来分享一下。 作者用的是mac开发的,windows的go gl需要麻烦一点的操作,读者自行裁决吧。 配置 1.go下载 2.配置mac go环境请自行搜索一下。 3.IDE。作者用的是goland,破解的话,也请自行搜索一下。 go开发包 由于国内的墙比较严重,建议用github上的镜像下载,然后本地配置一下。 借助github的golang下载 下载下来之后把包拖动到指定的目录,比如golang.org中: 配置 核心开发包 "github.com/go-gl/gl/v4.1-core/gl" "github.com/go-gl/gl...阅读全文

博文 2019-02-08 16:34:43 不求甚解_4703

Golang中容易出现的一个赋值bug

Golang中,:=同时进行了变量声明和赋值。 当:=左边有多个变量时,编译器只检查左边至少有一个新变量。 如果其中有的变量已经声明,则只做赋值操作。 比如: _ := 1 // error. Nothing New declared a, _ := foo() // ok. Declare a a, b := foo() // ok. Declare b, assign a _, b := foo() // error. Nothing New declared 设想下面这种状况: func main() { var err error if true { data, err := strconv.Atoi("x") if err == nil { fmt.Println("Atoi su...阅读全文

博文 2019-03-21 19:34:41 平仄_pingze

[系列] - 使用 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-27 11:34:29 訢亮

Go安装使用

引言: 上篇 《Golang快速入门(不用急,但要快)》 我们大致过了一遍Go语言的基本语法,但在开始正式的项目创建前,有必要选择一个比较顺手的 IDE (编辑器),由于之前一直都是做Java相关的开发,自然而然地想着能否用一样的编辑器来进行开发,毕竟 Eclipse 还是挺强大的,但是它并不具备跨平台特性,目前只支持Windows平台。不过,对于日常开发已经够用了,最后发布的时候再将项目部署到Linux即可,通常我们也不会直接在Linux环境进行开发。接下来我们就来配置一下我们的 Eclipse ,让它支持Go项目的开发。 安装配置: 进行此操作的前提是你已经安装好了Eclipse,假如还没有,可以到官方下载指定版本的安装包,先完成Eclipse的安装:Eclipse下载页 1.安装goc...阅读全文

博文 2019-06-13 18:32:42 Saxon_323e

Elasticsearch初识

开源分布式搜索分析引擎, 基于Java语言开发, 采用Lucene内库构建 近实时 分布式存储, 搜索, 分析引擎 特性 支持分布式, 可水平扩展, 集群规模可以单个扩展到数百个节点 降低全文检索的学习曲线 可以被任何编程语言调用 生态圈 ELK 日志套件(Elasticsearch, Logstash, Kibana) Logstash 数据处理管道, 支持从不同来源采集数据, 转换数据, 并将数据发送到不同的存储库中. Kibana 可视化分析利器,帮助用户解开对数据的任何可疑问题 Beats是轻量的数据采集器.基于golang开发 Elasticsearch的应用 搜索 日志管理 指标分析 安全分...阅读全文

博文 2020-01-18 15:32:40 百里江山

go语言环境搭建

安装 软件的安装常用三种方式1. 在线安装这种安装方式是通过系统提供的安装工具,自动下载安装包,并自动安装到系统的固定目录下2. 离线二进制安装通过手动下载官方提供编译好的二进制执行程序压缩包,在本地手动的解压到指定的目录下,并将可执行程序的路径加入到环境变量PATH中,使得在命令行工具中,可以在任意目录中使用该命令行工具。3. 离线源码安装在本地对源码进行make操作,将其编译为二进制的可执行程序。并将其copy到执行的目录下并加入到PATH环境变量中 以上对三种安装的原理做了简单的阐述。go语言环境同样适用。 选择喜欢的安装方式,在go语言中文网下载对应的包,安装以上的说明进行安装 GOPATH GOPATH是一个go语言的环境变量,官方给出的说明 The GOPATH environm...阅读全文

使用GDB等验证Golang的“编译器会为某些场合进行专门优化,避免字符串转换时的额外分配和复制操作”

编译器会为某些场合进行专门优化,避免字符串转换时的额外分配和复制操作: 将[]byte转换为string key,去map[string]查询的时候。 将string转换为[]byte,进行for range迭代时,直接取字节赋值给局部变量。 Example Code package main func main() { m := map[string]int { "abc" : 123, } key := []byte("abc") x, ok := m[string(key)] println(x, ok) } ➜ go build -gcflags "-N -l" example.go GDB go1.7.6 验证成功 地址都是0xc420047ee0 ➜ gdb example GN...阅读全文

博文 2018-03-23 11:34:40 Anderson_liu

问个游览器缓存问题

~~~ 用户中心URL都是验证session存在不 ,不存在返回登录页面 如果此时程序重启了,当再次访问URL,URL就会自动退出【此时游览器也记录了缓存】,当重新登录 这个页面始终无法访问,必须清理本地缓存才行,, 这个如何解决不让进游览器缓存? 是不是要设置头文件之类的 ~~...阅读全文

# golang JWT的简单使用

golang JWT的简单使用 JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。 JWT和session有所不同,session需要在服务器端生成,服务器保存session,只返回给客户端sessionid,客户端下次请求时带上sessionid即可。因为session是储存在服务器中,有多台服务器时会出现一些麻烦,需要同步多台主机的信息,不然会出现在请求A服务器时能获取信息,但是请求B服务器身份信息无法通过。JWT能很好的解决这个问题,服务器端不用保存jwt,只需要保存加密用的secret,在用户登录时将jwt加密生成并发送给客户端,由客户端存储,以后客户端的请求带上,由...阅读全文

博文 2019-02-05 17:34:41 w85278161

Go语言的变量、函数、Socks5代理服务器

Go语言中变量的声明和JavaScript很像,使用var关键字,变量的声明、定义有好几种形式 1. 变量和常量 // 声明并初始化一个变量 var m int = 10 // 声明初始化多个变量 var i, j, k = 1, 2, 3 // 多个变量的声明(注意小括号的使用) var( no int name string) // 声明时不指明类型,通过初始化值来推导 var b = true // bool型 // := 隐含声明变量并赋值 str := "mimvp.com" // 等价于var str string = "mimvp.com" Go 语言中 = 和 := 有什么区别? = 是赋值, := 是声明变量并赋值 // = 使用必须使用先var声明例如: var a a ...阅读全文

博文 2017-09-28 12:34:49 mimvp

搭建网站,和把大象装冰箱一样简单?

摘要: 一个流行了很多年的梗,至今仍然热度不减,当年本山大叔在春晚上说出这个段子时,不知是不是预料到了很多人这辈子都指着这个笑话活着了。 一个流行了很多年的梗,至今仍然热度不减,当年本山大叔在春晚上说出这个段子时,不知是不是预料到了很多人这辈子都指着这个笑话活着了。 Q:“要把大象装冰箱,总共分几步?” A:“分三步。1. 把冰箱门打开;2.把大象放进冰箱;3.把冰箱门关上”。 一个听上去很困难的事情,在脑筋急转弯的世界里,不用考虑它的实现成本和实现可行性,其实只需分三步即可完成。其实生活中的很多事,换个角度,也是如此。 搭建网站,这个词,很多人都听说过,但是当你还未了解建站的具体步骤时,你会觉得这件事好难,没有技术底子很难实现。其实,当你勇敢的打开冰箱门以后,你会发现...阅读全文

好程序员分享如何看待CSS中BEM的命名方式?

好程序员分享如何看待CSS中BEM的命名方式?BEM的意识就是块(block)、元素(element)、修饰符(modifier),是由yandex团队提出的一种CSS Class命名方法。 任何一个东西的存在都有其存在的道理,如果他毫无价值,那么肯定会被淘汰,后人可能都不了解,甚至都不会出现在后人的世界里。 关于BEM命名其最大的争议就是其命名风格,它鼓励一级一级的写的非常具体,但是会很长。如此常的命名会影响书写效率,名称过长代码量就会增多,文件体积就会变大(在gzip下这个不算是个问题),从而会影响传输速度,用户体验度就低,但是作为一个职业人我们都不能单纯把个人喜好和习惯作为借口来拒绝或否定其用途。 风格对于使用者来说并不是很重要,关键的是看其效果。正所谓人们常说的“不看疗程,看疗效”。...阅读全文

Golang 开发环境配置-Windwos

下载安装Go语言 下载地址:https://golang.google.cn/dl/ 下载完成后,直接双击 msi 文件进行安装,一路点击Next即可 打开wind+R 输入cmd,打开命令行工具,输入 go version 查询安装的go版本。 $ go version go version go1.14.2 windows/amd64 配置go环境变量 GOPATH是一个环境变量,用来表明你写的go项目的存放路径。使用msi安装的golang,会为你配置默认的环境变量,我们需要修改GOPATH的路径,设置为一个比较明显的路径。 创建GOPATH目录,在目录下创建三个文件夹 bin:用来存放编译后生成的可执行文件 pkg:用来存放编译后生成的归档文件 src:用来存放源码文件 配置path...阅读全文

博文 2020-05-05 18:32:43 进击的小白

解决go get golang.org/x 包失败

## GOPROXY 环境变量 知道从 Go 1.11 版本开始,官方支持了 go module 包依赖管理工具。 其实还新增了 GOPROXY 环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。 更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的 GOPROXY 代理服务。同时,也提供了公用的代理服务 https://goproxy.io,我们只需设置该环境变量即可正常下载被墙的源码包了: ``` 命令 export GOPROXY=https://goproxy.io ``` 不过,需要依赖于 go module 功能。可通过 export GO111MODULE=on 开启 M...阅读全文

代码不debug的时候接口正常返回数据,一旦debug服务器就崩溃了.各位大佬进来看看

`//解析查询结果; func DealResultDb(this ITableVisitor, rslt []map[string]interface{}) (interface{}, int) { result, n := ParseDbResult(this, rslt) if n < 0 { return nil, 0 } list, ok := result.([]InvestSupervisorReq) if !ok { return nil, 0 } stack := make([]InvestSupervisorReq, len(list)) flag := make([]int, len(list)) index:=0 Find(stack, list, 1, 0, fla...阅读全文

博文 2019-12-24 15:35:27 blackdinosuar

简单工厂模式--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

基于consul构建golang系统分布式服务发现机制

文地址-石匠的Blog: http://www.bugclosed.com/post/5 在分布式架构中,服务治理是一个重要的问题。在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进行服务关系管理,遇到服务关系变化或者增加服务的时候,人肉配置极其麻烦且容易出错。 之前在一个C/C++项目中,采用ZooKeeper进行服务治理,可以很好的维护服务之间的关系,但是使用起来较为麻烦。现在越来越多新的项目采用consul进行服务治理,各方面的评价都优于ZooKeeper,经过几天的研究,这里做一个总结。 zookeeper和consul比较 开发语言方面,zookeeper采用java开发,安装的时候需要部署java环境;consul采用golang开发,所有依赖都编译到了可执行程序...阅读全文

博文 2018-07-26 14:30:00 williamjie

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 朱柿子

数人云|90%产品服务化,细说豆瓣的5年变革之路

背景 今天主要分享下微服务中的Auto Scale,豆瓣2005年3月上线,是一家历史比较悠久的互联网公司,主要覆盖文化综合领域的Web、APP等各种产品,现在有豆瓣读书、豆瓣电影、豆瓣音乐等等。 Markdown 〓 豆瓣简介 在技术方面,豆瓣主要的开发语言是Python和Golang,豆瓣拥有自研私有云平台Douban App Engine(以下简称“DAE”),上面托管豆瓣网所有应用使用配置来描述应用:应用依赖MQ、Daemon,以及Cron,这样开发者使用一个配置文件就可以描述对资源的所有需求,平台拿到描述文件后可以在上面做需要的资源管配。 Markdown 〓 Douban App Engine 在DAE上会统一调度所有资源,产品开发人员不必关心具体的机器设备,比如无需关心某个业务...阅读全文

博文 2017-09-30 04:04:59 数人云

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 陌无崖

理解Kubernetes网络:ingress篇

在本系列的第一篇文章中,我讲了Pod跨Kubernetes集群中的节点相互连接的网络。第二篇重点讲了服务网络如何为Pod提供负载平衡,以便群集内的客户端可以与它们可靠地通信。对于这第三篇也是最后一篇文章,我想以这些概念为基础来展示集群外的客户端如何使用同一服务网络连接到Pod。由于各种原因,这很可能是三篇涉及最多的,并且掌握前两篇关于pod和service的内容是理解本篇的的前提。 路由并不是负载均衡 在上一篇文章中,我们创建了一个具有两个Pod的部署,并为该服务分配了一个IP,称为“集群IP”,针对Pod的请求已发送到该IP。我将在此处继续根据该示例进行构建。回想一下,该服务的群集IP 10.3.241.152位于与Pod网络以及节点本身所在的网络不同的IP地址范围内。我称这个地址空间为“...阅读全文

使用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

您需要了解的有关Kubernetes服务质量(QoS)

服务质量(QoS)类是Kubernetes的概念,它确定Pod的调度和驱逐优先级。 Kubernetes调度程序使用QoS类来做出有关将Pod调度到节点上的决策。 Kubelet使用它来管理驱逐pod的顺序,以及使用高级CPU管理策略允许更复杂的pod调度决策。 QoS类由Kubernetes本身分配给Pod。但是,DevOps可以通过处理Pod内各个容器的资源请求和限制来控制分配给容器的QoS类。 在kubernetes 中存在三种QoS类: Guaranteed Burstable BestEffort 让我们看一下不同的QoS类,看看它们如何与Kubernetes Scheduler和Kubelet一起工作。 Guaranteed 如何分配Pod的QoS Guaranteed 等级? ...阅读全文

《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大表哥