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

好程序员大数据培训技术分享: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

图解kubernetes中informer机制基础设计原理

kubernetes中的informer机制可能是实现集群控制模块的最核心的设计之一了,本文从informer如何获取数据开始,然后介绍了为了减少apiserver而设计的缓存、索引、无界队列、共享informer等机制欢迎一起交流学习 1. informer的本质 1.1 设计目标 之前说到kubernetes里面的apiserver的只负责数据的CRUD接口实现,并不负责业务逻辑的处理,所以k8s中就通过外挂controller通过对应资源的控制器来负责事件的处理,controller如何感知事件呢?答案就是informer 1.2 基于chunk的消息通知 watcher的设计在之前的文章中已经介绍,服务端是如何将watcher感知到的事件发送给informer呢?我们提到过apise...阅读全文

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 Channel 详解

目录 [−] Channel类型blockingBuffered ChannelsRangeselecttimeoutTimer和Tickerclose同步参考资料 Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 它的操作符是箭头 <- 。 12ch <- v // 发送值v到Channel ch中v := <-ch // 从Channel ch中接收数据,并将数据赋值给v (箭头的指向就是数据的流向) 就像 map 和 slice 数据类型一样, channel必须先创建再使用: 1ch := make(chan int) Channel类型 Channel类型的定义格式如下: 1Channel...阅读全文

[系列] - 使用 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 訢亮

Golang语言并行设计的核心goroutine

goroutine实现并发编程,goroutine之间通信使用channel,channel不管是发送数据还是接收数据都是阻塞的,channel默认无缓冲,但也可以指定缓冲大小变成有缓冲,空间有剩余时是无阻塞,直到空间全部用完时才阻塞。 ``` /** * goroutine实现并发编程 * goroutine之间通信使用channel * channel不管是发送数据还是接收数据都是阻塞的 * channel默认无缓冲,但也可以指定缓冲大小变成有缓冲,空间有剩余时是无阻塞,直到空间全部用完时才阻塞 */ package main import ( "fmt" ) func sum(a []int, c chan int) { total := 0 for _, v := range a {...阅读全文

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就会自动退出【此时游览器也记录了缓存】,当重新登录 这个页面始终无法访问,必须清理本地缓存才行,, 这个如何解决不让进游览器缓存? 是不是要设置头文件之类的 ~~...阅读全文

Go语言:简介(二)

Go语言:简介(二) 对Go语言了解前,我们先来补一些基本概念 基本概念 并发程序 一个并发程序可以在一个处理器或者内核上使用多个线程来执行任务,但是只有同一个程序在某个时间点同时运行在多核或者多处理器上才是真正的并行。 并发程序可以是并行的,也可以不是。 多线程缺点 使用多线程的应用难以做到准确,最主要的问题是内存中的数据共享,它们会被多线程以无法预知的方式进行操作,导致一些无法重现或者随机的结果。 使用多线程需要在意同步问题,可能出现死锁,线程上下文切换带来的开销 单线程中大计算量问题 利用多核CPU,将计算分发到各个子进程,将大量的计算分解掉,然后再通过进程间的事件消息来传递结果。 什么是协程 goroutines(协程) 1.协程与线程关系 在协程和操作系统线程之间并无一对一的关系:...阅读全文

# 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

LollipopGo游戏服务器架构--NetGateWay.go说明

大家好,我是彬,本节继续给大家讲解社区开源游戏服务器框架LollipopGo的说明。 本节着重给大家讲解的是NetGateWay.go,核心内容是针对网关的消息处理机制,直接先上代码 如下: package main import ( "LollipopGo/LollipopGo/log" "LollipopGo/LollipopGo/util" "Proto" "Proto/Proto2" "fmt" ) //------------------------------------------------------------------------------ //-------------------------------------------------------------...阅读全文

博文 2018-12-26 23:34:43 Golang语言社区

GO Channel详解

Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 它的操作符是箭头 <- 。 ch <- v // 发送值v到Channel ch中 v := <-ch // 从Channel ch中接收数据,并将数据赋值给v (箭头的指向就是数据的流向) 就像 map 和 slice 数据类型一样, channel必须先创建再使用: ch := make(chan int) Channel 类型 Channel类型的定义格式如下: ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType . 它包括三种类型的定义。可选的<-代表channel...阅读全文

博文 2018-09-13 16:34:46 空即是色即是色即是空

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.把冰箱门关上”。 一个听上去很困难的事情,在脑筋急转弯的世界里,不用考虑它的实现成本和实现可行性,其实只需分三步即可完成。其实生活中的很多事,换个角度,也是如此。 搭建网站,这个词,很多人都听说过,但是当你还未了解建站的具体步骤时,你会觉得这件事好难,没有技术底子很难实现。其实,当你勇敢的打开冰箱门以后,你会发现...阅读全文

Golang goroutine与channel

使用goroutine的方法很简单,直接在语句前面加go关键字即可,如果是多核处理器的电脑,使用gorountine,就会在另外一个CPU上执行goroutine,子协程不一定会和主协程在一个CPU上执行。 这里有两个注意的地方,使用go关键字的进程称之为子协程,而没有使用go关键字的进程称之为主协程,在多CPU的机器上,如果有多个协程,那么这些协程的执行顺序以及执行完成的顺序都是不确定的,但有一点,如果主协程结束,那么整个进程就结束了,不论子协程是否结束,整个进程都结束了,也就看不到子协程的运行结果了。 示例1 package main import "fmt" func main() { go fmt.Println("hello") //子协程 fmt.Println("world")...阅读全文

好程序员分享如何看待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 channel实现源码分析

go通道基于go的并发调度实现,本身并不复杂,go并发调度请看我的这篇文章:go并发调度原理学习 1.channel数据结构 type hchan struct { qcount uint // 缓冲区中已有元素个数 dataqsiz uint //循环队列容量大小 buf unsafe.Pointer // 缓冲区指针 elemsize uint16 //元素大小 closed uint32 //关闭标记,0没关闭,1关闭 elemtype *_type //数据项类型 sendx uint //发送索引 recvx uint //接收索引 recvq waitq //等待接收排队链表 sendq waitq //等待发送排队链表 lock mutex //锁 } type waitq s...阅读全文

golang 基础(26)select

golang_real.jpg select是Go中的一个控制结构,类似于switch语句,用于处理异步IO操作。select会监听case语句中channel的读写操作,当case中channel读写操作为非阻塞状态(即能读写)时,将会触发相应的动作。 func main(){ c1 := make(chan string) c2 := make(chan string) go func(){ time.Sleep(1 * time.Second) c1 <- "one" }() go func(){ time.Sleep( 2 * time.Second) c2 <- "two" }() for i:= 0; i < 2; i++ { select { case msg1 := <- c...阅读全文

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

Go基础系列:channel入门

Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 channel基础 channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样,一个goroutine_A向channel_A中放数据,另一个goroutine_B从channel_A取数据。 channel是指针类型的数据类型,通过make来分配内存。例如: ch := make(chan int) 这表示创建一个channel,这个channel中只能保存int类型的数据。也就是说一端只能向此channel中放进int类型的值,另一端只能从此channel中读出int类型的值。 需要注意,c...阅读全文

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

简单工厂模式--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实现基于TCP协议的简单的C-S架构

一、SERVER端 package main import ( "fmt" "net" "runtime" "strings" ) func handleConn(conn net.Conn) { defer conn.Close() ip := conn.RemoteAddr() fmt.Println("客户端已连接---", ip) //读取客户端数据 buf := make([]byte, 4096) for { n, err := conn.Read(buf) if n == 0 { fmt.Println("客户端断开连接") runtime.Goexit() } if err != nil { fmt.Println("conn.Read err:", err) return ...阅读全文

博文 2019-07-25 13:32:41 七八个星天

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

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

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

golang遇到docker很简单

本文转自:https://www.cnblogs.com/angelyan/p/11218260.html 一、获取镜像指定版本,该版本包含了web控制页面 docker pull rabbitmq:management 二、运行镜像 方式一:默认guest 用户,密码也是 guest docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management 方式二:设置用户名和密码 docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAU...阅读全文

博文 2019-12-31 14:32:50 mick_

「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

Go基础系列:为select设置超时时间

Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 After() 谁也无法保证某些情况下的select是否会永久阻塞。很多时候都需要设置一下select的超时时间,可以借助time包的After()实现。 time.After()的定义如下: func After(d Duration) <-chan Time After()函数接受一个时长d,然后它After()等待d时长,等待时间到后,将等待完成时所处时间点写入到channel中并返回这个只读channel。 所以,将该函数赋值给一个变量时,这个变量是一个只读channel,而channel是一个指针类型的数据,所以它...阅读全文

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

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

Kafka 重平衡机制

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 当集群中有新成员加入,或者某些主题增加了分区之后,消费者是怎么进行重新分配消费的?这里就涉及到重平衡(Rebalance)的概念,下面我就给大家讲解一下什么是 Kafka 重平衡机制,我尽量做到图文并茂通俗易懂。 重平衡的作用 重平衡跟消费组紧密相关,它保证了消费组成员分配分区可以做到公平分配,也是消费组模型的实现,消费组模型如下: image.png 从图中可以找到消费组模型的几个概念: 同一个消费组,一个分区只能被一个消费者订阅消费,但一个消费者可订阅多个分区,也即是每条消息只会被同一个消费组的某一个消费者消费,确保不会被重复消费; 一个分区可被不同消费组订阅,这里有种特殊情况,加...阅读全文

博文 2019-10-31 20:33:01 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 朱柿子

golang-sync.WaitGroup

使用 go 语言提供的方式处理:sync.WaitGroup package main import ( "fmt" "sync" ) /** channel 例子六: 接收方,接收完毕的时候,通知发送我接收完毕了! 使用 Go 语言提供的 sync.WaitGroup 的方式,来等待任务结束处理!之前处理方式比较繁琐 // 使用 go 语言提供的等待组,等待组 var wq sync.WaitGroup // 表示有多少个任务,比如添加20个任务 wq.Add(20) // 每个任务做完后,在任务做完后调用 wq.Done() // 等待任务做完,在任务开始后调用 wq.Wait() */ // c 这个chan 表示数据 func donWorker6(id int, c chan in...阅读全文

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

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

一次UDP通迅的问题排查

通迅模型 (A-->B-->A):A通过UDP发送数据给B(A可以是指定目的地,也可以是广播发送消息给B),B收到消息后根据来源地址和端口向A回发消息,就这么简单的一个通迅过程。 关于golang udp方面的讲解可以参考下https://colobu.com/2016/10/19/Go-UDP-Programming/这篇文件,讲的挺详细。什么时候udp socket是connected状态,什么时候是unconnected状态,什么时候用read/write,什么时候用readFromUDP/writeToUDP都有说明,写的挺好。 来段code demo吧 服务端: func main() { // 创建监听 sock, err := net.ListenUDP("udp4", &ne...阅读全文

golang-channel

缓冲的 chan, make(chan int, 缓冲大小): 表示满了 缓冲大小后 就开始堵塞,无法在往 管道 塞入数据 不带缓冲区 chan,make(chan int) : 就是放入数据之后,没有取出这个数据就无法在继续放入数据 cap(ch1) 可以查看缓冲区长度 len(ch1) 可以查看缓冲区有多少未读的缓存数据 例子一 package main import ( "fmt" "time" ) // 理念:不要通过共享内存来通信;通过通信来共享内存 /** channel 例子一 channel 既然有了发送方, 就必须要有接收方!!! */ func worker(c chan int) { for { // 从 channel 里面获取数据,赋值给 n n := <-c fm...阅读全文