开发环境: Python 2.x GoLang 1.6 Django 1.6 Bootstrap 3.0 JQuery1.8 架构: 模块介绍: Agent:使用GoLang开发,主要收集主机信息、执行下发任务、主机状态上报、服务检测等 Master:使用GoLang开发,接收Agent上报的信息,存储到MySQL Dashboard:使用Python Django开发,前台展示及管理。前端使用B......
Python
2019年01月26日 17:15:58
package main import ( net fmt log golang.org/x/crypto/ssh github.com/go-sql-driver/mysql gorm.io/gorm/logger sql gorm.io/driver/mysql gorm.io/gorm io/ioutil ) type Dialer struct { client *ssh.Client }......
GoLang,MySQL
2022年06月11日 13:55:00
接着上一篇,这一篇主要介绍对GPM模型的理解,这也是被众多开发者喜爱的原因,Go的横空出世也基于此, 不同于Python基于进程的并发模型,Go采用轻量级的Goroutine来实现并发,可以大大减少CPU的切换。 Goroutine轻量级,主要体现两个方面: 上下文切换代价小:Goroutine 的上下文切换只涉及到三个寄存器(PC/SP/DX)的值修改,而对比线程的上下文切换则需要涉及模式切换(......
GoLang
2022年05月25日 16:28:27
二进制序列化binary库 package main import ( bytes encoding/binary fmt ) type Register struct { ACTION int32 SID int32 } func (r *Register) Write() []byte { buf := new(bytes.Buffer) var info Register info.ACTI......
GoLang
2022年05月24日 13:27:41
在并发编程中同步通常说的锁的主要作用是保证多个线程或者 goroutine在访问同一片内存时不会出现混乱的问题。Go语言的sync包提供了常见的并发编程原语,主要有 Mutex、RWMutex、WaitGroup、Once、Pool、Map 和 Cond 等。我们来看下如何使用这些原语。 sync.Mutex Mutex是sync包中使用比较广泛的原语。它允许在共享资源上互斥访问(不能同时访问):......
GoLang
2022年05月23日 18:58:27
反射是程序执行时检查其所拥有的结构,尤其是类型的一种能力,这是元编程的一种形式,同时也是造成混淆的来源。 每一种语言的反射模型都不同(很多语言根本不支持反射,Python通过hasattr方法实现)Go语言中的反射通过reflect包实现,实现了运行时反射,允许程序操作任意类型的对象。 reflect包中的两个数据类Type和Value: Type:表示一个Go类型(不是所有Go类型的Type值都......
GoLang
2022年05月23日 17:45:16
我们经常会碰到并发读写 map 而造成 panic 的情况,因为在并发读写的情况下,map 里的数据会被混乱(只读是线程安全的,同时读写是线程不安全的),对 map 并发读写时需要加锁,但这样性能并不高,Go语言在 1.9 版本中提供了一种效率较高的并发安全的 sync.Map,sync.Map 和 map 不同,不是以语言原生形态提供,而是在 sync 包下的特殊结构。 sync.Map 特性:......
GoLang
2022年05月23日 16:59:52
Go的select功能和C中的select, poll, epoll类似,就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。 在某些场景下,我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。 使用 select 类似于 switch 语句,每个case会对应一个通道的通信(接收或发送)过程,但是它的 case 涉及到 channel 有关的 I/O 操作......
GoLang
2022年05月20日 21:33:17
在Go语言中可以使用var来声明一个变量,并指明变量的数据类型。通过var声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。声明一个指针类型的变量,系统不会为他分配内存,默认是nil。 new 和 make 都是用来内存分配的,make只能用于内建类型(map、slice、channel)的内存分配和初始化。new只分配内存,可以是任意的数据类型。 从返回值上来说make返回的是引......
GoLang
2022年05月18日 22:26:21
一、前言概述 我们都知道软件运行的最小单位是进程,当一个应用程序启动时操作系统为其创建了一个进程,代码运行的最小单位是线程,我们写的代码片段在程序跑起来后一定是在一个线程中运行的,而这个线程是属于这个进程创建的。 我们常接触到的并发模型是多线程并发模型,而 Go 语言中的并发模型是 CSP 并发模型,简单介绍这两种并发模型: 1、多线程并发模型 多线程并发模型是在一个应用程序中同时存在多个执行流,......
GoLang
2022年05月18日 09:31:14
为了提高服务器的并发处理能力,编程模式从原来串行模式升级到并发模型,并发模型主要有IO多路复用、多进程、多线程等。为什么会演化出协程?比多线程又有那些优势?它们之间又有那些区别?我们将带着这些问题深入了解其背景。 一、串行、并行、并发、同步、异步 串行(serial):任务依次顺序执行与并行相对应,优点:由于任务在一个线程执行即不存在线程不安全情况,也就不存在临界区的问题。缺点:不能很好的利用多C......
GoLang
2022年05月17日 11:17:59