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

golang-nsq系列(三)--nsqlookupd源码解析

上一篇 介绍了 nsqd 的代码逻辑与流程图,本篇来解析 nsq 中另一大模块 nsqlookupd,其负责维护 nsqd 节点的拓扑结构信息,实现了去中心化的服务注册与发现。 1. nsqlookupd 执行入口 在 nsq/apps/nsqlookupd/main.go 可以找到执行入口文件,如下: main.png 2. nsqlookupd 执行主逻辑 主要流程与上一篇讲的 nsqd 执行逻辑相似,区别是运行的具体任务不同。 2.1 通过第三方 svc 包进行优雅的后台进程管理,svc.Run() -> svc.Init() -> svc.Start(),启动 nsqlookupd 实例; func main() { prg := &program{} if err := svc.R...阅读全文

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

【代码篇】从零开始一步步搭建自己的golang框架(六)

基本上这个基础框架拿到手之后就可以做一些自己想要做的改动了,比如你想添加个队列的插件,你可以在相应的目录里面进行修改了,但我想让它更通用一些,本篇文章将会启动一个websocket服务,并且把配置文件改成yaml格式。 修改配置 之所以想要把配置从json改为yaml,有以下几点原因: json主要是用于信息传输,而yaml更适合作为配置文件的格式来使用,两者的用途不一样; yaml格式看起来比json更加清晰; 在yaml文件中可以添加注释,让配置更加易懂。 在此,解析yaml文件用的包是"gopkg.in/yaml.v2",例子可以在github上找到,文末可以找到本项目的链接。 为框架添加websocket的服务 我希望这个项目能够尽可能地涵盖一些基础的功能,所以我为它添加了webso...阅读全文

博文 2020-02-15 23:33:42 wx5e1abbbb0a5e5

Go语言实战阅读学习第三章

个人总结 1.go编译时会把名为main的包进行编译为二进制可执行文件,因此main是整个代码项目的程序入口 2.导入包时,标准库的包会在安装go的位置找到,开发者创建或者需要下载的包,会在GOPATH位置寻找寻找的顺序是首先从go安装目录,找到就停止,反之再GOPATH位置继续找。 3.每个包可以包含多个init函数,在导入时加上”_“使其工作 4.go工具有编译build,检测vet,格式化fmt,包文档doc,包依赖工...阅读全文

博文 2020-04-14 16:32:46 赵小毅

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多个应用上进行逻辑处理。 因为有了中间件,使得大型网站在规划有了更好的层次性,维护上更加方便。也可以实现负载均衡、安全防护等。 Nginx是一个开源高性能、可靠的HTTP中间件、代理服务,在目前企业中得到了很大的利用。 今天主要学习下nginx的安装配置,以便于后续学习。 以下在本地虚拟机上搭建学习。 linux环境搭建可以参考: vmware上安装linux过程记录 1、 检查系统网络是否能连通公网: ping www.taobao.com 2、 确认yum源是否配置好,用于下载安装环境基础包: yum源配置可...阅读全文

博文 2019-10-18 10:02:54 小碗汤

常见的排序算法-1.冒泡排序算法

冒泡排序(Bubble Sort) 冒泡排序也叫做起泡排序 执行流程 1 从头开始比较每一对相邻元素,如果第1个比第2个大,就交换它们的位置 ✓ 执行完一轮后,最末尾那个元素就是最大的元素 2 忽略 1 中曾经找到的最大元素,重复执行步骤 1,直到全部元素有序 //最坏、平均时间复杂度:O(n2) 最好时间复杂度:O(n) //空间复杂度:O(1) for end := len(this.Array) - 1; end > 0; end-- { for begin := 1; begin <= end; begin++ { if this.ComWithIndex(begin, begin-1) < 0 { this.Swap(begin, begin-1) } } } 冒泡排序 – 优化1...阅读全文

博文 2020-04-20 15:38:59 SteveKwok

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的稻草

解析DataWorks数据集成中测试连通性失败问题

摘要: 大家好,这里和大家分享的是DataWorks数据集成中测试连通性失败的排查思路。与测试连通性成功与否的相关因素有很多,本文按照多个因素逐步排查,最终解决问题,希望大家以后再遇到此类问题,请参考此文,相信能够顺利解决您的问题。 一、问题现象 此案例中,DataWorks项目位于华东2,RDS Mysql数据源位于华东1(VPC网络),使用DataWorks进行数据同步之前,首先需要建立数据源,但在建立数据源RDS Mysql的配置页面,“测试连通性”失败,即数据源并没有连通。 1 二、问题处理过程 (1)首先,应该判断该数据源是否支持“测试连通性” 遇到测试连通性问题,首先应该判断该数据源是否支持“测试连通性”,请大家参考《各数据源测试连通性支持情况》。...阅读全文

golang源码学习之sync.pool

源码目录 ///sync.pool.go (1.1.4.1) 前言 sync.pool对象池是个好东西,避免对象的反复创建和回收。对于一些需要频繁创建的对象我们可以使用它来避免内存的频繁申请、回收。但应避免用于连接池,因为sync.pool存储的对象仅存活在三次STW之间。 数据结构 //sync.pool.go type Pool struct { noCopy noCopy // 不可复制标准 local unsafe.Pointer // 指向poolLocal数组 localSize uintptr // poolLocal数组长度 victim unsafe.Pointer // 指向poolLocal数组 victimSize uintptr // poolLocal数组长度 N...阅读全文

博文 2020-04-06 21:32:56 ihornet

Tips:如何优雅的使用GDB调试Go

Tips: all for hands-free. Tips 系列:记录日常解决问题、解放双手的一些小技巧。 目的只有一个:不被重复的琐事麻痹,能偷懒的绝不手软。 今天聊聊如何优雅的使用GDB调试Go程序。 GDB有啥用? 想了解代码底层的话,它是一大利器,更别说定位问题啥的。 具体骚操作见曹大的使用 debugger 学习 golang 但GDB从安装到可用,可能有一大堆问题要解决(尤其在Mac上),我们怎么能优雅的使用它,避免陷入问题中,是本文的重点。 (涉及Docker和Mac两个平台上运行) 先来看比较推荐的Docker方式 Docker篇:3步即可调试 docker加持的话,非常方便,随用随起 先上效果:戳 gdb-debug-go-in-docker 可下载命令 具体步骤如下:(...阅读全文

博文 2020-02-20 12:34:18 newbmiao

Go语言学习-helloworld

之前学过一段时间的python,偶然的情况下接触到go语言。得知高性能,高并发,完美跨平台的优势,决定开始入手go语言学习。 首先,需要下载安装go。 https://golang.google.cn/dl/ 安装完成后,可以用命令查看是否安装成功。 打开终端,输入如下 go version // 查看版本 go env // 查看配置 接下来可以开始我们的第一个程序啦。 编写一个 hello world。需要注意文件名需要为 .go 结尾。 package main func main() { print("hello, world\n") } 运行与编译。 在终端中可直接输入 go run 进行编译运行。 在终端中输入go build 可编译为当前系统的可执行文件。 go run 文件名...阅读全文

博文 2020-05-16 21:32:50 阿巴砝特

揭秘!containerd 镜像文件丢失问题,竟是镜像生成惹得祸

导语 作者李志宇,腾讯云后台开发工程师,日常负责集群节点和运行时相关的工作,熟悉 containerd、docker、runc 等运行时组件。近期在为某位客户提供技术支持过程中,遇到了 containerd 镜像丢失文件问题,经过一系列分析、推断、复现、排查,最终成功找到根因并给出解决方案。现将整个详细处理过程整理成文分享出来,希望能够为大家提供一个有价值的问题处理思路以及帮助大家更好地理解相关原理。 containerd 镜像丢失文件问题说明 近期有客户反映某些容器镜像出现了文件丢失的奇怪现象,经过模拟复现汇总出丢失情况如下: 某些特定的镜像会稳定丢失文件; “丢失”在某些发行版稳定复现,但在 ubuntu 上不会出现; v1.2 版本的 containerd 会文件丢失,而 v1.3 不...阅读全文

博文 2020-05-22 12:34:22 腾讯云原生