自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 常见的几种排序算法(golang实现)

常见的几种排序算法冒泡排序插入排序选择排序归并排序快速排序冒泡排序package sortimport ( "fmt" "testing")func TestBubbleSort(t *testing.T) { bubbleSort([]int{4, 5, 6, 1, 7, 3})}func bubbleSort(arr []int) { if arr == nil || len(arr) < 2 { return } length := len(arr) f

2021-06-13 16:32:29 312

原创 golang struct的tag

golang struct的tag1.Tag规则2.Tag是Struct的一部分3.获取Tag4.Tag存在的意义5.Tag常见用法Go的struct声明允许字段附带Tag来对字段做一些标记。Tag不仅仅是一个字符串那么简单,因为其主要用于反射场景,reflect包中提供了操作Tag的方法,所以Tag写法也要遵循一定的规则。1.Tag规则Tag本身是一个字符串,但字符串中却是:以空格分隔的 key:value 对。key: 必须是非空字符串,字符串不能包含控制字符、空格、引号、冒号。value:

2021-06-06 18:36:47 845 1

原创 golang中channel的实现原理

golang中channel的实现原理1. 前言2. chan数据结构2.1 环形队列2.2 等待队列2.3 类型信息2.4 锁3. channel读写3.1 创建channel3.2 向channel写数据3.3 从channel读数据3.4 关闭channel4. 常见用法4.1 单向channel4.2 select4.3 range1. 前言channel是Golang在语言层面提供的goroutine间的通信方式,比Unix管道更易用也更轻便。channel主要用于进程内各goroutine间

2021-05-15 16:32:09 3019 1

原创 Golang中的Defer必掌握的7知识点

文章目录Golang中的Defer必掌握的7知识点知识点1:defer的执行顺序知识点2: defer与return谁先谁后知识点3:函数的返回值初始化知识点4: 有名函数返回值遇见defer情况知识点5: defer遇见panicA. defer遇见panic,但是并不捕获异常的情况B. defer遇见panic,并捕获异常知识点6: defer中包含panic知识点7: defer下的函数参数包含子函数练习:defer面试真题练习题分析DeferFunc1DeferFunc2DeferFunc3Defe

2021-05-09 15:36:10 248

原创 golang的几个注意事项

1.使用值为 nil 的 slice、map会发生啥允许对值为 nil 的 slice 添加元素,但对值为 nil 的 map 添加元素,则会造成运行时 panic。// map 错误示例func main() { var m map[string]int m["one"] = 1 // error: panic: assignment to entry in nil map // m := make(map[string]int)// map 的正确声明,分配了实际的内存

2021-04-25 21:02:26 162

原创 关于redis的一些总结

1. redis为什么快1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;4、使用多路I/O复用模型,非阻塞IO;这里“多路”指的是多个

2021-04-05 14:54:56 77

原创 关于一些常用计算机网络协议的总结

1. 网络模型OSI七层模型OSI七层模型及其包含的协议如下:物理层: 通过媒介传输比特,确定机械及电气规范,传输单位为bit,主要包括的协议为:IEE802.3 CLOCK RJ45数据链路层: 将比特组装成帧和点到点的传递,传输单位为帧,主要包括的协议为MAC VLAN PPP网络层:负责数据包从源到宿的传递和网际互连,传输单位为包,主要包括的协议为IP ARP ICMP传输层:提供端到端的可靠报文传递和错误恢复,传输单位为报文,主要包括的协议为TCP UDP会话层:建立、管理和终止会话,

2021-03-28 15:01:55 1161

原创 Go语言GMP 调度器的原理

1

2021-03-21 14:49:38 297 1

原创 golang垃圾回收器 GC

提问:请简述 Go 语言的垃圾回收器(Garbage Collector, GC)?1 | 标记阶段该阶段对以 span-object 为载体的内存进行扫描。由于 GC 与 Go 语言主程序一起并发执行,所以须要在扫描时监控内存可能出现的状态改变。写屏障(Write Barrier)算法便应运而生,启动写屏障的唯一途径就是短暂停止 Go 语言主程序,称之为 STW(Stop the World),并以 Start the World 恢复:在 GC 工作开始时,Go 语言随即为每个处理机 P 配置一

2021-03-14 15:32:02 270

原创 Golang CSP并发模型

CSP并发模型CSP模型是上个世纪七十年代提出的,用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。 CSP中channel是第一类对象,它不关注发送消息的实体,而关注与发送消息时使用的channel。Golang CSPGolang 就是借用CSP模型的一些概念为之实现并发进行理论支持,其实从实际上出发,go语言并没有,完全实现了CSP模型的所有理论,仅仅是借用了 process和channel这两个概念。process是在go语言上的表现就是 goroutine

2021-03-08 17:55:48 93

原创 Go分配内存规则

Go分配内存规则全局变量引用类型的分配在堆上,值类型的分配在栈上。局部变量一般分配在栈上。如果局部变量太大,则分配在堆上。如果函数执行完,仍然有外部引用此局部变量,则分配在堆上。什么是逃逸把本该分配在栈上的变量分配到了堆,则发生了逃逸。案例var global *intfunc fn() { var x int x = 1 global = &x}func fn2() { y := new(int) *y = 1}函数里

2021-02-21 12:06:36 261

原创 redis快速了解

1. 前言1.1 NoSQL:一类新出现的数据库(not only sql)泛指非关系型的数据库不支持SQL语法存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据都是KV形式NoSQL的世界中没有一种通用的语言,每种nosql数据库都有自己的api和语法,以及擅长的业务场景NoSQL中的产品种类很多:RedisMongodbHbase hadoopCassandra hadoop1.2 Redis简介Redis是 NoSQL技术的一员,它通过多种键值数

2021-02-16 14:59:56 88

原创 基于eladmin前端,设计的golang后端用户缓存方案

// GetUserJobData 获取用户岗位数据func GetUserJobData(jobs *[]models.SysJob, userId int) (err error) { cacheJob, err := cache.GetUserCache(userId, cache.KeyUserJob) if err != nil { err = models.GetUserJob(jobs, userId) if err != nil { return } cache.

2021-02-07 16:18:28 215

原创 casbin快速上手

1. PERM原模型定义一个策略,定义一个匹配规则,通过请求参数与策略通过规则进行匹配,获得一个eft影响,拿到影响的结果,进到影响的表达式,返回一个布尔值。1.1 基本参数subject(sub访问实体)object(obj访问的资源)action(act访问方法)eft(策略结果,一般为空,默认指定allow,还可以定义为deny,是硬编码写死,只能是这两个值)1.2 模型介绍Policy 策略 p={sub,obj,act,eft}策略一般存放在数据库,因为会有很多

2021-01-31 23:06:14 182

原创 享元模式

享元模式从对象中剥离出不发生改变且多个实例需要的重复数据,独立出一个享元,使多个对象共享,从而节省内存以及减少对象数量。flyweight.gopackage flyweightimport "fmt"type ImageFlyweightFactory struct { maps map[string]*ImageFlyweight}var imageFactory *ImageFlyweightFactoryfunc GetImageFlyweightFactory() *

2021-01-23 22:16:47 70

原创 golang组合模式

组合模式统一对象和对象集,使得使用相同接口使用对象和对象集。组合模式常用于树状结构,用于统一叶子节点和树节点的访问,并且可以用于应用某一操作到所有子节点。composite.gopackage compositeimport "fmt"type Component interface { Parent() Component SetParent(Component) Name() string SetName(string) AddChild(Compo

2021-01-17 08:34:16 383 1

原创 golang代理模式

代理模式用于延迟处理操作或者在进行实际操作前后进行其它处理。代理模式的常见用法有虚代理COW代理远程代理保护代理Cache 代理防火墙代理同步代理智能指引等。。。proxy.gopackage proxytype Subject interface { Do() string}type RealSubject struct{}func (RealSubject) Do() string { return "real"}type Proxy stru

2021-01-09 21:00:11 172

原创 golang适配器模式

适配器模式用于转换一种接口适配另一种接口。实际使用中Adaptee一般为接口,并且使用工厂函数生成实例。在Adapter中匿名组合Adaptee接口,所以Adapter类也拥有SpecificRequest实例方法,又因为Go语言中非入侵式接口特征,其实Adapter也适配Adaptee接口。adapter.gopackage adapter//Target 是适配的目标接口type Target interface { Request() string}//Adaptee 是被

2020-12-27 17:22:35 321

原创 golang外观模式

goland外观模式API 为facade 模块的外观接口,大部分代码使用此接口简化对facade类的访问。facade模块同时暴露了a和b 两个Module 的NewXXX和interface,其它代码如果需要使用细节功能时可以直接调用。facade.gopackage facadeimport “fmt”func NewAPI() API {return &apiImpl{a: NewAModuleAPI(),b: NewBModuleAPI(),}}//API is f

2020-12-13 17:32:22 327 3

原创 goland单例模式

使用懒惰模式的单例模式,使用双重检查加锁保证线程安全singleton.gopackage singletonimport "sync"//Singleton 是单例模式类type Singleton struct{}var singleton *Singletonvar once sync.Once//GetInstance 用于获取单例模式对象func GetInstance() *Singleton { once.Do(func() { singlet

2020-12-06 16:40:29 248

原创 goland原型模式

原型模式使对象能复制自身,并且暴露到接口中,使客户端面向接口编程时,不知道接口实际对象的情况下生成新的对象。原型模式配合原型管理器使用,使得客户端在不知道具体类的情况下,通过接口管理器得到新的实例,并且包含部分预设定配置。prototype.gopackage prototype//Cloneable 是原型对象需要实现的接口type Cloneable interface { Clone() Cloneable}type PrototypeManager struct {

2020-11-22 15:59:05 188

原创 golang创建者模式

将一个复杂对象的构建分离成多个简单对象的构建组合builder.gopackage builder//Builder 是生成器接口type Builder interface { Part1() Part2() Part3()}type Director struct { builder Builder}// NewDirector ...func NewDirector(builder Builder) *Director { return

2020-11-15 15:22:41 161

原创 golang抽象工厂模式

抽象工厂模式用于生成产品族的工厂,所生成的对象是有关联的。如果抽象工厂退化成生成的对象无关联则成为工厂函数模式。比如本例子中使用RDB和XML存储订单信息,抽象工厂分别能生成相关的主订单信息和订单详情信息。如果业务逻辑中需要替换使用的时候只需要改动工厂函数相关的类就能替换使用不同的存储方式了。abstractfactory.gopackage abstractfactoryimport "fmt"//OrderMainDAO 为订单主记录type OrderMainDAO interfa

2020-11-08 10:32:23 452

原创 golang工厂方法模式

工厂方法模式使用子类的方式延迟生成对象到子类中实现。Go中不存在继承 所以使用匿名组合来实现factorymethod.gopackage factorymethod//Operator 是被封装的实际类接口type Operator interface { SetA(int) SetB(int) Result() int}//OperatorFactory 是工厂接口type OperatorFactory interface { Create() Ope

2020-11-01 17:59:46 370

原创 golang工厂模式

go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。在这个simplefactory包中只有API 接口和NewAPI函数为包外可见,封装了实现细节。package simplefactoryimport "fmt"//API is interfacetype API interface { Say(name string) string}//NewAPI ret

2020-10-24 21:18:45 445

原创 gin基于logrus的日志+rotatelogs日志拆分的中间件

gin基于logrus的日志+rotatelogs日志拆分的中间件func Logger() gin.HandlerFunc { filePath := "log/gin" linkName := "latest_log.log" src, _ := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0755) logger := logrus.New() logger.Out = src logger.SetLevel(logrus.DebugLev

2020-10-19 20:40:51 1151

原创 菜鸟手撸基于gin的jwt+reids登录

菜鸟手撸基于gin的jwt+reids登录var store = base64Captcha.DefaultMemStore// @Tags Auth// @Summary 用户登录// @accept json// @Produce json// @Param data body sys_model.RegisterAndLoginStruct true "用户登录接口"// @Success 200 {string} string "{"success":true,"data":{},

2020-10-11 15:12:31 637

原创 讲解快速排序

快速排序涉及到一种常见的编程方法-递归递归简单来说就是分而治之,找到重复的子问题。初学算法对递归可能比较难理解,建议多动手将 人脑递归逐渐减少。递归的出现本身就是简化思维的,但这种调用方式也增加了bug的概率。排序数组一个最短的有序数组是怎样的?[] and [n] and[n,k]当这个数组的长度小于2的时候那么这个数组就可以称之为有序。这也是递归的基条件。举一个简单的递归例子,数组求和。我们可以轻松地使用循环解决这个问题,并且性能更高。那为什么不呢? 因为循环会增加思考的难度。。这时候

2020-09-20 15:02:29 91

原创 gin项目环境搭建

在 API 端使用 Gin 框架时,项目的目录。├─ Project Name │ ├─ config //配置文件 │ ├── ... │ ├─ controller //控制器层 │ ├── ... │ ├─ service //业务层 │ ├── ... │ ├─ repository //数据库操作层 │ ├─

2020-09-06 14:29:15 391

原创 go-admin

简介说明go-admin 是基于 Gin + Vue + Element UI 的中后台管理系统开发脚手架。go-admin 在线 DEMO:http://www.zhangwj.comgo-admin 在线文档国际go-admin 在线文档国内go-admin 源码仓库国际go-admin 源码仓库国内go-admin 是一个 go 语言开发的企业级快速开发平台,使用了 Gin,casbin,gorm,Vue,Element UI,并且也内置了一些模块,如:用户管理、部门管理、角色用户、菜

2020-08-30 11:50:27 563

原创 golang使用syncmap与互斥锁实现聊天室

package mainimport ( "bufio" "fmt" "net" "strconv" "sync")const BUFFSIZE = 1024var ( connection = sync.Map{} mutex sync.Mutex conneciton_count int)func process(conn net.Conn) { defer conn.Close() if username, err := readUserData(conn)

2020-08-23 11:50:13 178

原创 Beego框架简介

beego官方文档:https://beego.me/一、beego简介:1. beego是一个使用Go语言来开发WEB引用的GoWeb框架,该框架起始于2012年,由一位中国的程序员编写并进行公开,其目的就是为大家提供一个高效率的web应用开发框架。该框架采用模块封装,使用简单,容易学习。方便技术开发者快速学习并进行实际开发。对程序员来说,beego掌握起来非常简单,只需要关注业务逻辑实现即可,框架自动为项目需求提供不同的模块功能。2.Beego框架的主要特性:1)简单化:RESTful支.

2020-08-16 11:35:56 5856

原创 golang中的Goroutine

Goroutine1.1 什么是Goroutinego中使用Goroutine来实现并发concurrently。Goroutine是Go语言特有的名词。区别于进程Process,线程Thread,协程Coroutine,因为Go语言的创造者们觉得和他们是有所区别的,所以专门创造了Goroutine。Goroutine是与其他函数或方法同时运行的函数或方法。Goroutines可以被认为是轻量级的线程。与线程相比,创建Goroutine的成本很小,它就是一段代码,一个函数入口。以及在堆上为其分配的一

2020-08-09 14:27:51 507

原创 golang异常panic捕获及recover恢复

go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理在一个主进程,多个go程处理逻辑的结构中,这个很重要,如果不用recover捕获panic异常,会导致整个进程出错中断package mainimport "fmt"func main() {defer func() { //必须要先声明defer,否则不能捕获到panic异常fmt.Println("c")if err := recover(); err !...

2020-08-05 23:14:01 631

原创 大数据技能大赛部分环境快速搭建

配置源(三台机器执行)pkill -9 yumcd /etc/yum.repos.drm -rf *wget http://172.16.47.240/bigdata/repofile/bigdata.repoyum clean all47.92.1.221安装包下载(master执行)mkdir -p /softwarescd /softwarejdkwget http://172.16.47.240/bigdata/bigdata_tar/jdk-8u171-linux-x6

2020-07-26 09:49:08 745

原创 JavaScript回顾

JavaScriptJavaScript嵌入页面的方式<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=e

2020-07-19 11:22:21 136

原创 jquery初级

jqueryjQuery介绍jQuery是目前使用最广泛的JavaScript函数库。据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库。微软公司甚至吧jQuery作为他们的官方库。jQuery的版本目前分为1.x系列和2.x、3.x系列,1.x系列兼容低版本的浏览器,2.x、3.x系列放弃支持低版本浏览器,目前使用最多的是1.x系列的。jQuery是一个函数库,一个js文件,页面使用script标签引入这个js文件就可以使用。<!DOCTYPE html&gt

2020-07-12 10:20:13 260

原创 ajax与JavaScript对象

JavaScript对象JavaScript中的对象,可以理解成是一个键值对的集合,键是调用每个值的名称,值可以是基本变量,还可以是函数和对象。创建JavaScript对象有两种方法,一种是通过顶级Object类来实例化一个对象,然后在对象上面添加属性和方法:var person = new Object();// 添加属性:person.name = 'tom';person.age = '25';// 添加方法:person.sayName = function(){ ale

2020-07-05 14:12:18 341

原创 hadoop相关环境简单配置

关闭防火墙systemctl stop firewalld查看防火墙状态systemctl status firewalld主机名与映射hostnamectl set-hostname<主机名> master slave1 slave2bash 立即生效vim /etc/hosts时区tzselectAsiachinaBeijing Timeyes生成的命令写入/etc/profilesource /etc/profileyum i

2020-06-28 14:07:17 236

原创 数据分析方法总结

数据分析数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这一过程也是质量管理体系的支持过程。在实用中,数据分析可帮助人们做出判断,以便采取适当行动。数据可视化数据可视化是关于数据视觉表现形式的科学。其中,这种表现形式被定义为一种包括相应信息单位的各种属性和变量的信息抽取和提炼。数据集网站https://www.cia.gov/library/publications/the-world-factbook/美国 DATA.g

2020-06-21 11:32:04 1008

全国2014-2018年空气质量csv数据集文件数据

全国2014-2018年空气质量csv数据集文件数据,包含字段time(时间),city(城市),AQI,PM2.5,PM10,SO2,NO2,CO,O3,primary_pollutant(主要污染物),共计55万条数据。

2019-06-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除