自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序猿的世界

「WHY」每一个你不满意的当下,都有一个你不曾努力的过去。

  • 博客(19)
  • 收藏
  • 关注

原创 关于PHP函数前面加&

看到项目里大佬写的加载类的单例模式function &load(){ static $class = null; if($class){ return $class; } $class = new Class(); return $class;}一直不明白函数前边加&是做什么的,在网上差了好多,举的例子太乱,也没...

2020-02-25 17:02:58 491

原创 Golang使用有缓冲channel实现协程池限制最大协程数量

package mainimport ( "fmt" "strconv" "time" "sync")var ( maxRoutineNum = 3)type Duration int64const ( Nanosecond = 1 Microsecond = 1000 * Nanose...

2020-02-24 18:35:51 2054 4

原创 部署Golang程序到docker

一、交叉编译参考:https://www.bookstack.cn/read/gin-EDDYCJY-blog/golang-gin-2018-03-26-Gin%E5%AE%9E%E8%B7%B5-%E7%95%AA%E5%A4%96-Golang%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91.md在项目目录中运行下面命令:GOOS=linux GOARC...

2020-02-22 22:17:01 1197

原创 业务表单后端控制,减少APP发版

一般我们做开发时,都是根据产品的需求和UI的设计图,前端确定样式布局,后端确定接口返回格式,最粗暴的方法就是前端写成死的格式,后端只传动态改变的数据,但是我们都知道APP发版是需要时间的,IOS周期更长,所以我们有些文本,url等都是可以靠后端控制的,这是最基本的用法。其实还有更方便的用法,可以让后端控制表单格式,信息,排序等可控的属性,这样我们可以在app不发版的情况下调整顺序,更改必填项、默认...

2020-02-20 19:59:42 549

原创 PHP开启强类型检验

PHP是世界上最好的语言,开发快是它最大的优势,凡事有利必有弊。众所周知,PHP是弱类型语言,在传递参数时,不会检查变量的类型,再加上动态语言的特性,如果写代码不注意,很容易造成类型不符,自动转换类型,并且程序不会报错,造成数据错误和不完整。在PHP7之后,通过在文件开头用 declare(strict_types = 1) 定义强类型检验后,当函数传参类型不符时,将会抛出错误。...

2020-02-19 20:25:38 749

转载 PHP实现IOC依赖注入

<?phpclass A{ public function doAction($a) { echo __CLASS__ . ":" . 'hello' . "\n"; var_dump($a); }}class B{ private $a; public function __construct(A $...

2020-02-18 21:07:35 733

转载 理解golang调度之三:并发

简介当我在解决一个问题尤其是新问题的时候,我开始不会去考虑并发(concurrency)是否合适。我首先会去找一系列的解决方式然后确保它有效。然后在可读性和技术方案评估之后,我会开始去考虑并发是否实际合理。有些时候并发的好处是显而易见的,但是有时候并不是很明显。第一篇文章,我解释了OS调度器的相关内容,我觉得这部分对于你写多线程代码很重要。第二篇里,我讲解了一些Go调度器的一些内容,这部分...

2020-02-16 20:21:04 375

转载 理解golang调度之二 :Go调度器

简介第一篇文章解释了关于操作系统层级的调度,我认为这对于理解Go的调度是很重要的。这一部分我会在语义层级解释Go调度器是如何工作的,并且着重关注它的一些高级行为。Go 调度器是一个十分复杂的系统,细节不重要,重要的是对于其工作和行为有一个好的理解,这会让你做出更好的工程方面的决定。从一个程序开始当你的go程序启动,主机上定义的每一个虚拟内核都会为它分配一个逻辑处理器(P),如果你的处理...

2020-02-16 20:20:12 960

转载 理解golang调度之一 :操作系统调度

简介golang调度器的设计行为能够使你的多线程go程序更有效率、性能更好,这要归功于golang调度器对于操作系统调度器的支持。对于一个golang开发者来说,同时深刻理解操作系统调度和golang调度器工作原理,能够让你的golang程序设计和开发走到正确道路上。操作系统调度器操作系统调度器十分复杂,它必须要考虑到它所运行的底层硬件层级结构,包括但不限于处理器数和内核数,cpu c...

2020-02-16 20:19:13 552

转载 GolangGC的实现原理

Golang从1.5开始引入了三色GC, 经过多次改进, 当前的1.9版本的GC停顿时间已经可以做到极短.停顿时间的减少意味着"最大响应时间"的缩短, 这也让go更适合编写网络服务程序.这篇文章将通过分析golang的源代码来讲解go中的三色GC的实现原理.这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版本和gccgo等其他实现,运行环境是Ubu...

2020-02-16 20:07:26 2188

转载 Golang协程的实现原理

Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱,虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的.这篇文章将通过分析golang的源代码来讲解协程的实现原理.这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版本和gccgo等其他实现,运行环境是...

2020-02-16 19:59:09 3724 1

原创 Go数组、字符串、切片原理和优化

数组1、赋值和传参数组本身的赋值和传参都是以整体复制的方式处理的,所以为深拷贝,在函数内对数组进行操作,不会影响原数组。package mainimport ( "fmt")func forRange(a [3]int){ for k,v := range a{ fmt.Printf("%d:%d\n", k, v) } a[2] = 9 fmt.Printl...

2020-02-16 16:05:05 690

原创 解决PHP和GoLang写入csv文件用Excel打开乱码

使用CSV打开文件是正常的,但是使用Excel打开文件就出现了中文乱码。导出的CSV文件是UTF-8无BOM编码格式,而我Excel的UTF-8编码格式都是有BOM的,添加BOM之后,乱码就可解决。 private function _write_csv($data) { file_put_contents($this->_file_d...

2020-02-10 16:28:41 992

原创 关于GoLang服务的平滑重启

引出问题我们在用go开发的过程中,如果修改了代码,都是control+c杀死运行的进程,然后再go run 或者是 go build之后运行,而当我们的项目上线后,直接杀死进程会导致线上服务中断,在生产环境中是绝对不允许的解决思路更改代码之后,重新编译,重启进程时,当前主进程fork出一个子进程,让它运行改动后的程序。实现细节如何通知进程进行平滑重启呢,答案是通过注...

2020-02-08 17:59:41 1579

转载 PHP计算两个经纬度之间的距离

<?phpclass Location{ public function __construct() { $this->_geo_conf = array( 'pi' => pi(), 'EARTH_RADIUS' => 6378.137, ); ...

2020-02-05 18:18:15 2088 6

原创 PHP实现分布式调用链路树

function get_xhop($xhop = "", $reset = false) { static $_bhop = ""; static $_hop_num = 0; if ($reset) { $_bhop = ""; $_hop_num = 0; } if ...

2020-02-04 21:04:30 634

原创 GoLang生成分布式调用树

package xhopimport ( "bytes" "encoding/hex" "errors" "fmt" "strconv")//// Generally speaking,for every http request, the hierarchy of the http rpc calls is a DAG(directed acycline graph)....

2020-02-04 19:54:38 393

原创 GoLang雪花算法和反推

工具代码package logimport ( "crypto/md5" "crypto/rand" "encoding/binary" "encoding/hex" "fmt" "io" "os" "sync/atomic" "time")// LogId is a unique ID identifying a log record. It must be e...

2020-02-04 19:53:21 1457

原创 PHP根据真实客户端IP+微秒时间戳+随机数生成分布式日志id

function getRealIp(){ $ip=FALSE; //客户端IP 或 NONE if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $ip = $_SERVER["HTTP_CLIENT_IP"]; } //多重代理服务器下的客户端真实IP地址(可能伪造),如果没有使用代理,此字段为空 ...

2020-02-04 18:38:38 497

空空如也

空空如也

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

TA关注的人

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