
开源
文章平均质量分 62
无风的雨
这个作者很懒,什么都没留下…
展开
-
Go切片排序
Go 语言标准库提供了sort包,用于对切片和用户定义的集合进行排序。原创 2022-11-04 14:58:53 · 2684 阅读 · 1 评论 -
Go语言sync.Map
Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。原创 2022-10-27 21:09:50 · 2644 阅读 · 0 评论 -
Go-map、切片、数组循环常见问题总结
开发人员在日常开发中经常会遇到for range循环需求,因其类型的特殊性,用起来有别于其他语言,需要注意,这里对map、切片、数组循环遇到常见问题进行整理。### map1、for range map 在开始执行循环的时候,底层做了随机种子,故其循环是随机的。原创 2022-10-26 16:09:07 · 954 阅读 · 0 评论 -
Go xml文件处理
在开发中会常遇到xml数据序列化和反序列化,这里我们介绍go语言处理xml数据。encoding/xml 包实现了一个简单的xml 1.0解析器,可以理解xml名称空间。读取xml示例:package mainimport ( "encoding/xml" "fmt")type Note struct { XMLName xml.Name `xml:"note"` To string `xml:"to"` From string `xml:"from"` Heading st原创 2022-03-15 13:46:58 · 1075 阅读 · 0 评论 -
Go 操作kafka包sarama
概述sarama 是一个纯 Go 客户端库,用于处理 Apache Kafka(0.8 及更高版本)。它包括一个用于轻松生成和使用消息的高级 API,以及一个用于在高级 API 不足时控制线路上的字节的低级 API。在github上stars上比较多(推荐)。开源包:https://github.com/Shopify/sarama文档地址:https://pkg.go.dev/github.com/shopify/sarama闲话少叙,上示例package mainimport (原创 2021-10-16 14:23:56 · 2340 阅读 · 0 评论 -
Go之time包用法
time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。time 类型type Time struct {// wall and ext encode the wall time seconds, wall time nanoseconds,// and optional monotonic clock reading in nanoseconds.//// From high to low bit position, wall encodes a 1-bit flag (hasMon原创 2021-09-23 15:32:48 · 392 阅读 · 0 评论 -
解决github下载慢的问题
前言github对于从事技术的同学并不陌生,在日常使用的过程中经常遇到众所周知的原因,一些优秀项目无法下载或下载奇慢无比。这里给大家几个比较靠谱的解决办法:1、通过国内的开源项目平台码云(https://gitee.com/)码云镜像了很多github上的优秀项目,大家可以通过在码云上搜索你想下载项目的关键词找到,再通过码云clone。这里以opencv为例解决github下载慢的问题2、GitHub代下载服务(http://gitd.cc/)解决github下载慢的问题输入你想下载项原创 2020-08-22 22:13:49 · 431 阅读 · 0 评论 -
gin websocket 一对一聊天
依赖包github.com/gin-gonic/gingithub.com/gorilla/websocket代码创建ws/ws.gopackage wsimport ( "encoding/json" "github.com/gin-gonic/gin" "github.com/gorilla/websocket" "log" "net/http")// ClientManager is a websocket managertype ClientManager stru原创 2020-08-11 16:06:57 · 3750 阅读 · 0 评论 -
golang 单点登录系统(go-sso)
这是一个基于Go语言开发的单点登录系统,实现手机号注册、手机号+验证码登录、手机号+密码登录、账号登出等功能,用户认证采用cookie和jwt两种方式。收发短信相关方法已提供,仅需根据短信通道提供商提供的接口做相应的参数配置即可使用。环境介绍golang语言:go1.13.3+ 、数据库:mysql5.7缓存:redis3.0项目地址https://github.com/guyan0319/go-sso依赖包:github.com/dgrijalva/jwt-gogithub.com/gi原创 2020-06-11 22:00:49 · 7152 阅读 · 1 评论 -
golang之JWT实现
什么是JSON Web Token?JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。直白的讲jwt就是一种用户认证(区别于session、cookie)的解决方案。出现的背景众所周知,在jwt出现之前,我们已经有session、cookie来解决用户登录等认证问题原创 2020-05-30 23:53:22 · 2220 阅读 · 0 评论 -
golang之数据验证validator
前言在web应用中经常会遇到数据验证问题,普通的验证方法比较繁琐,这里介绍一个使用比较多的包validator。原理将验证规则写在struct对字段tag里,再通过反射(reflect)获取struct的tag,实现数据验证。安装go get github.com/go-playground/validator/v10示例package mainimport ( "fmt"...原创 2020-05-04 15:50:44 · 22629 阅读 · 7 评论 -
go-admin 开源后台管理系统
go-admin是一个go语言开发的后台管理系统,该系统以角色为基础的权限管理设计(RBAC),完成了系统管理模块功能的开发(其他示例模块后续加上),采用前后端分离实现方式,服务端基于go开源gin框架,前端开源框架vue-element-admin。设计原则采用比较流行开源框架gin、vue-element-admin,这些项目维护和更新比较好。尽量少修改vue-element-admi...原创 2020-01-23 09:27:04 · 20801 阅读 · 8 评论 -
Golang 正则表达式(regexp)
Go内置了(regexp包)对正则表达式的支持,这里是一般的正则表达式常规用法的例子。示例: package mainimport ( "bytes" "fmt" "regexp")func main() { //是否匹配字符串 // .匹配任意一个字符 ,*匹配零个或多个 ,优先匹配更多(贪婪) match, _ := regexp.MatchString(&quo原创 2019-02-22 10:10:35 · 15762 阅读 · 2 评论 -
Go 单元测试和性能测试
测试对于互联网应用软件开发来说非常重要,它对软件可靠性保证具有重要意义,通过测试能够尽可能发现并改正软件中的错误,提高软件质量。这里我们主要讲解Go语言如何实现单元测试和性能测试。go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试,testing框架和其他语言中的测试框架类似,你可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的...原创 2019-03-07 16:22:09 · 1042 阅读 · 0 评论 -
Go 堆栈的理解
在讲Go的堆栈之前,先温习一下堆栈基础知识。什么是堆栈?在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈。数据结构的堆栈:堆:堆可以被看成是一棵树,如:堆排序。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。栈:一种先进后出的数据结...原创 2018-12-24 17:17:27 · 5185 阅读 · 1 评论 -
Go 函数可变参数传参
众所周知,Go语言是严格类型语言,而开发的时候又遇到传入参数不定的情况,怎么办?golang 为我们提供了接入多值参数用于解决这个问题。示例:package mainimport "fmt"func main() { //multiParam 可以接受可变数量的参数 multiParam("jerry", "herry") multiParam("php", "mysql", ".原创 2018-12-12 14:08:07 · 2243 阅读 · 1 评论 -
Go 各版本特性
Go 各版本特性Go 1.11 新特性 详细最新的Go版本1.11版本在Go 1.10之后六个月到达。它的大部分变化都在于工具链,运行时和库的实现。与往常一样,该版本保持了Go 1 的兼容性承诺。我们希望几乎所有的Go程序都能像以前一样继续编译和运行。**Go 1.10 新特性 详细**最新的Go版本1.10版本在Go 1.9发布六个月后推出。它的大部分变化都在于工具链,运行时和库的实...原创 2018-12-12 11:05:52 · 8058 阅读 · 0 评论 -
导出mysql表结构生成grpc需要的proto文件工具
使用过grpc的同学都知道,写proto文件比较繁琐,尤其是写message,对应很多字段,为此写了一个简单的从mysql直接读取表结构,生成proto文件的工具。工具的使用很简单,需要简单的配置,即可运行生成proto文件。项目地址:https://github.com/guyan0319/mysql-to-proto使用说明:func main() { //模板文件存放路径 tpl...原创 2019-08-03 18:39:36 · 1024 阅读 · 0 评论 -
Go 指针和内存分配详解
9.3 指针和内存分配详解定义了解指针之前,先讲一下什么是变量。每当我们编写任何程序时,我们都需要在内存中存储一些数据/信息。数据存储在特定地址的存储器中。内存地址看起来像0xAFFFF(这是内存地址的十六进制表示)。现在,要访问数据,我们需要知道存储它的地址。我们可以跟踪存储与程序相关的数据的所有内存地址。但想象一下,记住所有内存地址并使用它们访问数据会有非常困难。这就是为什么引入变量。...原创 2018-12-21 16:16:27 · 2034 阅读 · 0 评论 -
docker 安装rabbitmq + php实例
1、拉去镜像也可以进入docker hub镜像仓库地址:https://hub.docker.com/ ,选一个镜像,这里用docker pull rabbitmq:management2、创建运行容器docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --h...原创 2019-03-27 17:49:35 · 1744 阅读 · 0 评论 -
GO 匿名函数和闭包
匿名函数:顾名思义就是没有名字的函数。很多语言都有如:java,js,php等,其中js最钟情。匿名函数最大的用途是来模拟块级作用域,避免数据污染的。今天主要讲一下Golang语言的匿名函数和闭包。匿名函数示例:1、package mainimport ( "fmt")func main() { f:=func(){ fmt.Println("hello ...原创 2019-03-28 15:35:45 · 312 阅读 · 0 评论 -
Go语言new和make的区别
Go语言中new和make都是用来内存分配的原语(allocation primitives)。简单的说,new只分配内存,make用于slice,map,和channel的初始化。newnew(T)函数是一个分配内存的内建函数。我们都知道,对于一个已经存在变量,可对其指针进行赋值。示例var p intvar v *intv = &p*v = 11fmt.Println...原创 2019-04-18 22:42:33 · 922 阅读 · 0 评论 -
golang 通过reflect 获取struct信息
本示例主要通过反射,了解struct或变量的相关信息,方便在查看代码中某个变量信息。示例: package main import ( "fmt" "reflect" ) type Users struct { Id int Name string Age int Mark...原创 2019-05-06 17:14:48 · 5129 阅读 · 0 评论 -
Go channel 实现原理分析
前言channel一个类型管道,通过它可以在goroutine之间发送和接收消息。它是Golang在语言层面提供的goroutine间的通信方式。众所周知,Go依赖于称为CSP(Communicating Sequential Processes)的并发模型,通过Channel实现这种同步模式。Go并发的核心哲学是不要通过共享内存进行通信; 相反,通过沟通分享记忆。下面以简单的示例来演示Go...原创 2019-05-14 10:31:48 · 8975 阅读 · 3 评论 -
Go 并发控制
前言提到Go语言的并发,就不得不提goroutine,其作为Go语言的一大特色,在日常开发中使用很多。在日常使用场景就会涉及一个goroutine启动或结束,启动一个goroutine很简单只需要前面加关键词go即可,而由于每个goroutine都是独立运行的,其退出有自身决定的,除非main主程序结束或程序崩溃的情况发生。那么,如何控制goroutine或者说通知goroutine结束运行...原创 2019-05-19 23:33:55 · 1560 阅读 · 0 评论 -
Golang不同类型比较
在日常开发过程中难免会遇到各个类型的变量的比较以及运算操作,这里我们做了一些简单的汇总,希望能给各位同学在开发中带来帮助。这里先上一波关系运算符==,!=,<,<=,> 和 >=。float浮点数比较golang 支持两种浮点float32和float64,众所众知,涉及浮点数比较或运算是会遇到精度问题,具体要根据golang实现IEEE 754的情况定。默认情况下...原创 2019-07-29 16:03:37 · 3393 阅读 · 0 评论 -
centos7 下 安装git 并实现自动部署
1、首先需要安装Git,可以使用yum源在线安装:yum install -y git2、创建一个git用户,用来运行git服务adduser gitpasswd git3、初始化git仓库:这里我们选择/data/git/learngit.git来作为我们的git仓库mkdir /data/git -pcd /data/gitgit init --bare原创 2018-01-20 00:52:00 · 11636 阅读 · 0 评论 -
Go Redis连接池
1、创建配置文件存放在conf配置文件夹,可以跟你的需要存在相应。redis.gopackage confvar RedisConf = map[string]string{ "name": "redis", "type": "tcp", "address": "127.0原创 2018-12-10 18:06:52 · 5763 阅读 · 1 评论 -
Go 日志
golang 的log包使用起来挺简单,这里做一些简单介绍。示例:package mainimport ( "log")func main() { arr := []int{1, 2} log.Print("Print array ", arr, "\n") log.Println("Println array", arr) log.Printf("Pri...原创 2018-12-15 17:06:47 · 2436 阅读 · 0 评论 -
centos7下gitlab的安装步骤
配置yum源 新建/etc/yum.repos.d/tsinghua.repo[gitlab-ce]name=Gitlab CE Repositorybaseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/gpgcheck=0enabled=1缓存相关包yum makecache...原创 2018-09-07 11:22:24 · 10183 阅读 · 0 评论 -
go之自定义包(package)
包是函数和数据的集合原创 2018-08-21 17:26:00 · 6723 阅读 · 0 评论 -
go之官方依赖管理工具dep安装和使用
前言 大家都知道go没有一个自己的包管理平台。社区里go的第三方包托管在各个git托管平台。需要用到包时通过go get 命令工具安装,但这个工具没有版本描述性文件,在go的世界里没有“package.json”这种文件。这个给我们带来直接的影响就是依赖放在外网,而且没有版本约束,这个月下的版本,可能下个月更新了。有道是“工欲善其事,必先利其器”,这个时候我们就需要一个依赖管理工具。 目前依赖...原创 2018-08-14 16:49:02 · 28734 阅读 · 8 评论 -
centos7 下grpc的go服务端和PHP客户端实现
前言 gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部...原创 2018-06-07 19:10:23 · 2665 阅读 · 1 评论 -
docker 之基于Dockerfile构建 Nginx+ php7
前言本文是将Nginx 和PHP7安装在不同容器,同–link实现交互通信,网上查有些资料将LNMP装在一个容器,我认为装在一起固然简单一些,但不够灵活(纯个人看法,有不同观点,欢迎回复)。 系统环境:CentOS Linux release 7.4.1708 一、构建nginx 1、创建目录/var/docker/mkdir -p /var/docker从 github 拉取相...原创 2018-03-21 17:09:25 · 9431 阅读 · 0 评论 -
创建一个自己的composer包
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管理器。是的,它涉及 “packages” 和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。这种想法并不新鲜,Composer ...原创 2018-03-17 23:04:05 · 2695 阅读 · 0 评论 -
yii2之学习笔记
如下内容为平时学的时候搜集内容,比较碎,现打包送上。希望能给学习yii2朋友些许帮助。 引入第三方库 composer http://www.yiichina.com/doc/guide/2.0/tutorial-yii-integration布局 不带布局return $this->renderPartial('index');带布局return $this->re原创 2018-01-20 22:55:50 · 420 阅读 · 0 评论 -
go语言开发环境搭建
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 学习Go一部分是兴趣,一部分是为了通过熟悉另一种语言来接触更多的应用场景。 安装步骤如下: 1、下载程序安装包: 安装程序 下载地址:https://golang.org/dl/ (墙内下原创 2018-01-02 23:29:00 · 12055 阅读 · 1 评论 -
centos7 安装elk日志分析系统
架构图 Elasticsearch:搜索,提供分布式全文搜索引擎; Logstash: 日志收集,管理,存储; Kibana :日志的过滤web 展示; Filebeat:监控日志文件、转发,其已取代 logstash forwarder;一、准备工作 设置 yum源,采用官网提供的源 https://www.elastic.co/guide/en/elasticsearch/ref原创 2017-12-13 18:57:42 · 6146 阅读 · 1 评论 -
php 读取超大文件
PHP开发很多时候都要读取大文件,比如csv文件、text文件等。这些文件如果很大,比如10个G。这时,直接一次性把所有的内容读取到内存中计算不太现实。 遇到这种情况,往往觉得PHP太弱,实则不然。利用生成器(关键字yield)就能解决。 好了,上代码。<?php/** * Created by PhpStorm. * User: Administrator * Date: 2017原创 2017-12-08 23:16:59 · 8014 阅读 · 0 评论 -
centos7 配置gitlab自动部署
前言 gitlab安装,移步 gitlab安装 利用gitlab的webhook(钩子)调用外部url可以实现代码自动部署,本例通过PHP程序实现代i码自动部署,也可以通过其他方式。例如:node.js、jenkins(这种方式比较推荐的,后续有时间补上)等。添加项目test 点击 new project 填写相关信息权限等级分三种:Private 私有的,只有你自己或...原创 2018-09-07 14:40:19 · 1751 阅读 · 0 评论