开发者
文章平均质量分 86
微不足道的进步也是进步,学习是一个不断积累的过程。
无风的雨
这个作者很懒,什么都没留下…
展开
-
Golang不同类型比较
在日常开发过程中难免会遇到各个类型的变量的比较以及运算操作,这里我们做了一些简单的汇总,希望能给各位同学在开发中带来帮助。这里先上一波关系运算符==,!=,<,<=,> 和 >=。float浮点数比较golang 支持两种浮点float32和float64,众所众知,涉及浮点数比较或运算是会遇到精度问题,具体要根据golang实现IEEE 754的情况定。默认情况下...原创 2019-07-29 16:03:37 · 3393 阅读 · 0 评论 -
Go socket实现多语言间通信
前言socket提供了在传输层进行网络编程的方法,它比基于http协议的接口传输更高效,RPC(Remote Procedure Call)是远程过程调用,常用于分布式系统等,而rpc很多是基于socket实现的。不了解socket、http等协议请阅读https://blog.youkuaiyun.com/guyan0319/article/details/79404216。Socket 都可以用“打...原创 2019-06-27 22:08:11 · 1072 阅读 · 0 评论 -
Go之context包的分析
context是Go语言官方定义的一个包,称之为上下文。Go中的context包在与API和慢进程交互时可以派上用场,特别是在提供Web请求的生产级系统中。在哪里,您可能想要通知所有goroutines停止工作并返回。这是一个基本教程,介绍如何在项目中使用它以及一些最佳实践和陷阱。先决条件在了解上下文之前,请先了解以下概念goroutinechannelContext在Go语言...原创 2019-05-22 14:29:01 · 687 阅读 · 2 评论 -
Go 并发控制
前言提到Go语言的并发,就不得不提goroutine,其作为Go语言的一大特色,在日常开发中使用很多。在日常使用场景就会涉及一个goroutine启动或结束,启动一个goroutine很简单只需要前面加关键词go即可,而由于每个goroutine都是独立运行的,其退出有自身决定的,除非main主程序结束或程序崩溃的情况发生。那么,如何控制goroutine或者说通知goroutine结束运行...原创 2019-05-19 23:33:55 · 1560 阅读 · 0 评论 -
GO中间件(Middleware )
中间件是一种计算机软件,可为操作系统提供的软件应用程序提供服务,以便于各个软件之间的沟通,特别是系统软件和应用软件。广泛用于web应用和面向服务的体系结构等。纵观GO语言,中间件应用比较普遍,主要应用:记录对服务器发送的请求(request)处理服务器响应(response )请求和处理之间做一个权限认证工作远程调用安全等等中间件处理程序是简单的http.Handler,它包装...原创 2019-04-10 15:12:26 · 6943 阅读 · 0 评论 -
Go channel 实现原理分析
前言channel一个类型管道,通过它可以在goroutine之间发送和接收消息。它是Golang在语言层面提供的goroutine间的通信方式。众所周知,Go依赖于称为CSP(Communicating Sequential Processes)的并发模型,通过Channel实现这种同步模式。Go并发的核心哲学是不要通过共享内存进行通信; 相反,通过沟通分享记忆。下面以简单的示例来演示Go...原创 2019-05-14 10:31:48 · 8975 阅读 · 3 评论 -
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 评论 -
centos7下部署Docker+Jenkins+Gitlab+Golang持续集成环境
前言持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。随着DevOps理念和敏捷理念的发展,以及微服务方案的通过采用自动化工具,实现项目的持续集成,加快项目的迭代。...原创 2019-04-17 16:47:33 · 3719 阅读 · 1 评论 -
Go goroutine理解
Go语言最大的特色就是从语言层面支持并发(Goroutine),Goroutine是Go中最基本的执行单元。事实上每一个Go程序至少有一个Goroutine:主Goroutine。当程序启动时,它会自动创建。为了更好理解Goroutine,现讲一下线程和协程的概念线程(Thread):有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程...原创 2019-02-14 14:54:24 · 496 阅读 · 0 评论 -
Go 指针和内存分配详解
9.3 指针和内存分配详解定义了解指针之前,先讲一下什么是变量。每当我们编写任何程序时,我们都需要在内存中存储一些数据/信息。数据存储在特定地址的存储器中。内存地址看起来像0xAFFFF(这是内存地址的十六进制表示)。现在,要访问数据,我们需要知道存储它的地址。我们可以跟踪存储与程序相关的数据的所有内存地址。但想象一下,记住所有内存地址并使用它们访问数据会有非常困难。这就是为什么引入变量。...原创 2018-12-21 16:16:27 · 2034 阅读 · 0 评论 -
Go 堆栈的理解
在讲Go的堆栈之前,先温习一下堆栈基础知识。什么是堆栈?在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈。数据结构的堆栈:堆:堆可以被看成是一棵树,如:堆排序。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。栈:一种先进后出的数据结...原创 2018-12-24 17:17:27 · 5185 阅读 · 1 评论 -
Golang 读、写文件
文件的读写是编程语言的常见操作之一,这里将Goang 读取文件的相关操作。读取文件读取文件有三种方式:将文件整个读入内存按字节数读取按行读取具体实现如下:1、将文件整个读入内存package mainimport ( &quot;os&quot; &quot;io/ioutil&quot; &quot;fmt&quot;)func main() { file,原创 2019-01-16 20:38:26 · 1643 阅读 · 0 评论 -
go之官方依赖管理工具dep安装和使用
前言 大家都知道go没有一个自己的包管理平台。社区里go的第三方包托管在各个git托管平台。需要用到包时通过go get 命令工具安装,但这个工具没有版本描述性文件,在go的世界里没有“package.json”这种文件。这个给我们带来直接的影响就是依赖放在外网,而且没有版本约束,这个月下的版本,可能下个月更新了。有道是“工欲善其事,必先利其器”,这个时候我们就需要一个依赖管理工具。 目前依赖...原创 2018-08-14 16:49:02 · 28734 阅读 · 8 评论 -
用swoole framework 实现远程接口调用RPC
最近用swoole framework开发个项目,想实现远程接口调用RPC,无奈swoole框架坑点太多,资料又少的可怜,只能自己研究。利用swoole框架的RPCServer类 实现服务端,RPC类实现客户端。实现步骤如下:服务端在examples/ 目录下创建rpc_server.php PHP代码<?phpdefine('DEBUG', 'on');define('WEBPATH...原创 2017-05-26 17:57:50 · 5154 阅读 · 0 评论 -
Linux 下监控文件自动实现swoole framework热更新
swoole是以cli运行的,然后长驻内存的。整个生命周期只有在启动的时间可以一次执行RINT过程, 之后所有的请求都在第三步以内完成。(这也是swoole更快的原因之一),这样的话,相关的php脚本如果被执行了一次,就永久性的长驻内存了,更新代码就没有效果了。如果想让代码生效就要重启swoole服务,这种做法是比较粗暴和繁琐。如何才能实现自动检测代码文件?代码自动生效?在网上查到说使用runkit原创 2017-06-24 00:03:41 · 843 阅读 · 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 评论 -
进程 线程 协程的相关理解
一、进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。组成进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text...原创 2018-03-02 17:19:58 · 927 阅读 · 1 评论 -
git tag使用详解
用途 Git 可以对某一时间点上的版本打上标签。人们在发布某个软件版本(比如 v1.0 等等)的时候,使用tag标签,给仓库中的项目添加每期的tag,方便进行管理.显示所有标签$ git tag标签分类Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标...原创 2018-03-17 21:18:46 · 2477 阅读 · 0 评论 -
创建一个自己的composer包
Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管理器。是的,它涉及 “packages” 和 “libraries”,但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。这种想法并不新鲜,Composer ...原创 2018-03-17 23:04:05 · 2695 阅读 · 0 评论 -
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 评论 -
go之web框架 iris
前言最近开始学习GO的WEB框架,IRIS号称是Go最快的后端Web框架,目前发展最快的Go Web框架。提供完整的MVC功能并且面向未来。 所以先从它开始。github地址 https://github.com/kataras/iris 文档 https://iris-go.com/安装go get -u github.com/kataras/iris编辑main...原创 2018-06-08 17:37:34 · 24982 阅读 · 1 评论 -
免费申请https网站ssl证书--支持通配符
大家都知道从一些大型公司购买HTTPS证书,一个域名每年都几千个大洋。那么有没有免费,答案是有。现隆重推荐(Let’s Encrypt 免费证书) EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个...原创 2018-06-29 18:55:29 · 12937 阅读 · 8 评论 -
GO 依赖管理工具go Modules(官方推荐)
以前写过一篇关于go管理依赖包工具 dep的文章,当时认为dep将会成为官方依赖工具,现在看来是自己图样图斯内幕破了,正如官方一直提到dep是“official experiment”官方实验项目的那样,随着go modules 在go1.11版推出,go1.12版功能不断改进,再到go1.13版完善优化,正式扶正。预计dep将来也只能定格在“official experiment”了。Go M...原创 2019-09-30 17:54:43 · 17483 阅读 · 2 评论