RabbitMQ基础知识(转载)

工作中经常和RabbitMQ打交道,但是一直停留在使用阶段,没有更多的去了解RabbitMQ的原理以及集群方面的知识,这个笔记主要用于逐步深入学习RabbitMQ 原文地址:https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html 这个文档的后面golang代码是自己添加的 背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理...

阅读全文 〉

TCP-IP详解卷一第一章笔记

分层 TCP/IP 通常被认为是一个四层协议系统 链路层:也称数据链路层或网络接口层 网络层:也称互联网层,TCP/IP协议簇中,网络层协议层协议包括IP协议(网际协议),ICMP协议(Ineternet互联网控制报文协议),以及IGMP协议(Internet组管理协议) 传输层:为两台主机上的应用程序提供端到端的通信。这里主要包含两种协议:TCP(传输控制协议)和UDP(用户数报协议),TCP为两台主机提供高可靠性的数据通信。 应用层:负责处理特定的应用程序细节 在TCP/IP协议簇中,网络IP层提供的是一种不可靠的服务,它只是尽可能快的把分组从源节点送到目的节点,但是并不提供任何可靠...

阅读全文 〉

Gin 接入zap 日志中间件

在https://www.syncd.cn/post/6 这边文章中整理关于日志包zap的使用,那么在Gin web框架中如何接入zap的日志中间件呢? Gin 的 zap中间件 gin的中间件中其实有zap的中间件:https://github.com/gin-contrib/zap 并且也给了简单的例子 不过官网给的例子确实太简单了,不过还在我在之前的博客中已经整理了关于zap包的使用,那么就可以把它的这个例子写的比较完善了,代码如下: package main import ( ginzap "github.com/gin-contrib/zap" ...

阅读全文 〉

Golang日志包zap的使用

一、缘由 最近在尝试用golang写简单的项目,但是之前一直忽略了一个重要的问题:==golang的日志包常用的是哪个?== 网上找了一些资料也问了一些目前做golang开发的朋友,目前使用最多的就是uber开源的一个日志模块:https://github.com/uber-go/zap start数量已经高达7k多,这篇文章主要就是整理如何使用这个包 二、安装 go get go.uber.org/zap 三、基础知识 关于Logger zap 包中有两种类型的logger: SugaredLogger:在性能要求不是很严格的情况下,可以使用SugaredLogger...

阅读全文 〉

linux环境快速安装python3

之前在linux上安装python3的时候,为了让不影响linux环境原有的python2的环境,选择的方法都是下载对应的linux环境的python包,不过 这里需要注意的是,不要更改linux默认输入python 进入python2的方法,自己安装python3的时候做软链接的时候要做成python3,否则系统的很多工具依赖于python2, 而他们使用的是python2 但是编译安装还是非常慢的,推荐下面一种快速的方法 快速安装python3 这里以centos 为例子,先执行 yum install python36 因为我这里环境用的是python3.6 你通过上面这...

阅读全文 〉

golang接口笔记

关于接口的认识 接口类型,是一种抽象的类型。不会暴露出它所代表的对象内部值的结构和这个对象支持哪些基础操作。 概括来说就是,当我们看到一个接口的时候,我们不会知道它是什么,只能知道的就是可以通过它的方法来做什么 实现接口的条件 一个类型如果拥有了一个接口需要的所有方法,那么这个类型就实现了这个接口。 表达一个类型属于某个接口,只要这个类型实现了这个接口。所以我们可以将任意一个值赋值给空接口 interface{} 被称为空接口类型,空接口类型对实现它的类型没有要求 对于创建一个interface{} 值持有一个boolean, float, string, map, pointer...

阅读全文 〉

golang终端操作和文件操作

日常的开发中关于终端的输入以及文件的操作还是比较多的,这篇文章主要把关于这两方面的操作进行整理 终端操作 格式化输入 获取终端的输入,这里需要注意的是当在终端输入的时候默认是以空格做分割的,就像我们下面三个值,我们每个输入之间需要通过空格进行隔开 package main import "fmt" func main() { var a int var b string var c float64 fmt.Scanf("%d%s%f",&a,&b,&c) fmt.Printf("...

阅读全文 〉

golang反射笔记

reflect.Type 和 reflect.Value reflect包定义了两个非常重要的类型,Type 和Value, 一个Type表示一个Go类型,它是一个接口。 函数reflect.TypeOf接受任意的interface{} 类型,并返回对应动态类型的reflect.Type 注意:如果我们把一个具体的值转换为接口类型会有一个隐式的接口转换操作,它会创建一个包含两个信息的接口值:操作数的动态类型和它的动态的值 reflect.ValueOf 接受任意的interface{} 类型, 并返回对应动态类型的reflect.Value 和reflect.TypeOf类似,refle...

阅读全文 〉

golang常用的http请求操作

之前用python写各种网络请求的时候写的非常顺手,但是当打算用golang写的时候才发现相对来说还是python的那种方式用的更加顺手,习惯golang的用法之后也就差别不大了,下面主要整理了常用的通过golang发起的GET请求以及POST请求的代码例子 golang发起GET请求 基本的GET请求 //基本的GET请求 package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get(&#...

阅读全文 〉