自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 资源 (6)
  • 问答 (2)
  • 收藏
  • 关注

原创 Laravel7 体验 - 改造

拿到一个框架肯定不能直接进行开发,需要了解情况后对其进行改造,从目录、日志、models、缓存等方面入手。参考文档英文文档中文文档开发规范参考环境配置文件.env.example改名为.env或添加软链ln -s .env.example .env设置目录权限storage与bootstrap/cache/可读可写日志地址/logs/service/log.lognginx配置# web访问location / { try_files $uri $uri/ /in

2020-12-05 10:54:55 401

原创 MacM1使用UTM创建Ubuntu20.04虚拟机

Mac M1使用UTM搭建Ubuntu虚拟机,可以上网

2023-02-27 11:18:35 724 1

原创 Go协程安全用法

在 Go 语言中,我们无法在父协程里捕获子协程的异常(panic)。如果服务有异常没有处理,整个进程都会退出。这会产生很多不可预知的问题。Go语言内置协程,这极大降低了并发编程的门槛。但这并不意味着并发编程的难度降低了。但这个包无法处理协程 panic 的问题。分享一种跨协程的的异常处理方案,当出现。的时候及时返回不再继续执行未执行方法。

2022-08-30 21:13:09 977

原创 Mac M1 安装Jmeter

配置JDK先检查一下有没有安装jdk,打开终端输入java -version出现下面这些提示则是已经安装,直接看配置Jmeter的部分否则会提示这个,看下一步说明未下载Java下载目前适配了M1的 JDK 只有zulu openjdk,官网上可以下载:https://www.azul.com/选择arm版本的dmg下载https://www.azul.com/downloads/?version=java-8-lts&os=macos&architecture=arm

2022-04-11 11:27:17 3348 4

原创 Centos7 Vim7 GO语法高亮

Go语言是谷歌2009发布的一款开源跨平台编程语言,vim7 还没有为golang提供语法高亮功能,要实现go语言vim下语法高亮,可以参考下面设置。随便打开一个目录执行wget https://golang.google.cn/dl/go1.3.3.src.tar.gz tar -zxf go1.3.3.src.tar.gz 然后将解压出来的“go/misc/vim/”目录下的syntax、ftplugin、indent、compiler、ftdetect五个文件夹复制到"/usr/share/

2022-03-22 16:10:58 440 2

转载 Centos7 vim升级vim8

vim7不支持Go的彩色,所以需要将vim升级一下,而且如果需要vim-go插件的话依赖条件也是vim8,所以需要安装vim8RPM安装Vim8不能直接删除vim-minimal需要执行rpm -e --nodeps否则会把依赖sudo删除rpm -Uvh http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpmrpm --import http://mirror.ghettoforge.or

2022-03-21 17:24:58 1106

原创 Linux 安装go

Go 几乎支持 Linux 所有的主流发行版操作系统,常见的包括 Ubuntu、CentOS 等等,Go 在这些主流的 Linux 发行版操作系统上的安装方法都是一样的(当然某个发行版也可能会利用其软件安装管理器提供仅属于其自己的安装方法), 一些Linux的包管理不提供最新的安装包,但我们可以手动安装。你可以参考下面这样的安装步骤。首先,我们需要下载并解压 Go Linux 安装包:wget https://dl.google.com/go/go1.17.8.linux-amd64.tar.gz

2022-03-17 15:08:15 4479 2

原创 Mac安装Go程序及版本切换

选择 Go 版本挑版本之前,我们先来看看 Go 语言的版本发布策略。如今,Go 团队已经将版本发布节奏稳定在每年发布两次大版本上,一般是在二月份和八月份发布。Go 团队承诺对最新的两个 Go 稳定大版本提供支持,比如目前最新的大版本是 Go 1.17,那么 Go 团队就会为 Go 1.17 和 Go 1.16 版本提供支持。如果 Go 1.18 版本发布,那支持的版本将变成 Go 1.18 和 Go 1.17。支持的范围主要包括修复版本中存在的重大问题、文档变更以及安全问题更新等。基于这样的版本发布策

2021-12-14 17:28:54 9486

原创 Go 标准库-双向链表 (container/list) 源码解析

container/list双向链表解析概述container/list包实现了基本的双向链表功能,包括元素的插入、删除、移动功能。链表链表是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系。列表有多种实现方法,如单链表、双链表等列表的原理可以这样理解:假设 A、B、C 三个人都有电话号码,如果 A 把号码告诉给 B,B 把号码告诉给 C,这个过程就建立了一个单链表结构,如下图所示。如果在这个基础上,再从 C 开始将自己的号码给自己知道号码的人,这样就形成了双链表结构,

2021-10-31 19:59:27 681 1

原创 Mac安装Kubernetes

安装参考地址:https://codechina.csdn.net/mirrors/AliyunContainerService/k8s-for-docker-desktopKubernetes helm配置国内镜像源1、删除默认的源helm repo remove stable2、增加新的国内镜像源helm repo add stable https://burdenbear.github.io/kube-charts-mirror/3、查看helm源添加情况helm repo list

2021-10-16 22:27:27 420

原创 Docker 四种制作镜像方式

Docker 镜像的构建原理和方式Docker构建镜像的方式有多种,先介绍下最常用的两种通过docker commit命令,基于一个已存在的容器构建出镜像。编写 Dockerfile 文件,并使用docker build命令来构建镜像。上面这两种方法中,镜像构建的底层原理是相同的,都是通过下面 3 个步骤来构建镜像:基于原镜像,启动一个 Docker 容器。在容器中进行一些操作,例如执行命令、安装文件等。由这些操作产生的文件变更都会被记录在容器的存储层中。将容器存储层的变更 commit

2021-10-16 20:20:37 19269 3

转载 docker stop 与 pause

docker stop container_id与docker pause container_id都可以起到停止容器运行的目的但其中有一些不同。docker pausedocker pause命令暂停指定容器中的所有进程。在 Linux 上,这使用 cgroups freezer。传统上,当挂起一个进程时,会使用 SIGSTOP 信号,这个信号可以被被挂起的进程观察到https://docs.docker.com/engine/reference/commandline/pause/docker

2021-10-16 18:50:01 1103

原创 Go interface{} 转 切片类型

遇到这样一个情况想将变量v转化为[]string类型var v interface{}a := []interface{}{"1", "2"}v = a // v 这时还是interface{} 但其实是个 []interface{}newValue := v.([]string)fmt.Println(newValue)提示:panic: interface conversion: interface {} is []interface {}, not []string [recovere

2021-08-17 17:28:40 4286

翻译 Go的内存模型 - The Go Memory Model

介绍如何保证在一个goroutine中看到在另一个goroutine修改的变量的值,这篇文章进行了详细说明。建议如果程序中修改数据时有其他goroutine同时读取,那么必须将读取串行化。为了串行化访问,请使用channel或其他同步原语,例如sync和sync/atomic来保护数据。先行发生 (Happens Before)在一个gouroutine中,读和写一定是按照程序中的顺序执行的。即编译器和处理器只有在不会改变这个goroutine的行为时才可能修改读和写的执行顺序。由于重排,不同的g

2021-08-16 17:19:17 306

原创 Go 设计模式之模板模式

模版模式 (Template Pattern) 定义一个操作中算法的骨架,而将一些步骤延迟到子类中。这种方法让子类在不改变一个算法结构的情况下,就能重新定义该算法的某些特定步骤。简单来说,模板模式就是将一个类中能够公共使用的方法放置在抽象类中实现,将不能公共使用的方法作为抽象方法,强制子类去实现,这样就做到了将一个类作为一个模板,让开发者去填充需要填充的地方。以下是模板模式的一个实现:package templateimport "fmt"// 社畜接口type CompanySlave i

2021-08-12 13:24:52 522 1

原创 Go 设计模式之选项模式 / 优雅添加传参默认值

创建一个文件options.go//意图:通过修改选项,创建出功能不同的实例//解决:由于go语言没有默认值,继承,多态,所有使用选项模式来达到默认值,多态的效果package optionsimport "fmt"// 士兵type Soldier struct { arms string // 兵种 attack int // 攻击力 defense int // 防御力 damageRange int // 伤害范围}f

2021-08-12 13:00:53 451

转载 SOLID原则介绍

SOLID原则介绍SOLID原则是由罗伯特·C·马丁在21世纪早期引入,指代了面向对象编程和面向对象设计的五个基本原则。遵循SOLID原则可以确保我们设计的代码是易维护、易扩展、易阅读的。SOLID原则同样也适用于Go程序设计。具体SOLID编码原则见下表:简写全称中文描述SRPThe Single Responsibility Principle单一功能原则OCPThe Open Closed Principle开闭原则LSPThe Liskov Subst

2021-08-11 20:13:53 2018 1

原创 Mac VirtualBox安装centos8 ssh访问

下载CentOS第一步:下载镜像地址 https://mirrors.aliyun.com/centos/8.4.2105/isos/x86_64/第二步:下载VirtualBox 官方下载地址VirtualBox配置CentOS第一步:VirtualBox新建虚拟机 CentOS-8,配置电脑名称和操作系统类型 ;第二步:配置内存大小;自行设置最好不要超过二分之一第三步: 虚拟硬盘第四步 硬盘类型第五步:虚拟硬盘存储在物理硬盘的配置,动态分配;第六步:虚拟硬盘存储在物理硬

2021-08-07 13:33:17 342

原创 docker-compose搭建consul集群

docker-compose.yamlversion: "3.6"services: # server consul_server_master: image: consul:latest ports: - "8501:8500" networks: consul_net: ipv4_address: 172.100.100.101 container_name: consul_server_master comma

2021-08-05 16:48:41 243

原创 Go 使用consul服务治理 rpc通讯

本篇使用到了RPC通讯 可以看这里服务端代码package mainimport ( "fmt" "github.com/hashicorp/consul/api" "log" "net" "net/rpc" "strconv")// curl http://127.0.0.1:8501/v1/agent/servicesconst ( ConsulAddr = "127.0.0.1:8501" ServerPort = "1234" ServerHost =

2021-08-05 15:58:14 469

原创 Go 字符串转化

golang中字符串和各种int类型之间的相互转换方式:string转成int:int, err := strconv.Atoi(string)string转成int64:int64, err := strconv.ParseInt(string, 10, 64)int转成string:string := strconv.Itoa(int)int64转成string:string := strconv.FormatInt(int64,10)...

2021-08-05 13:40:03 355

原创 Go 指针类与变量的*(星号)与&(取址符)

*(星号) : 对指针取值指针类型golang中,指针是一种类型,指向变量所在的内存单元(不是内存地址)。申明: 在变量名前加上星号字符,比如 *age ,指向变量age所在的内存单元&(取址符): 对变量取址& :获取变量在计算机内存中的地址, &age,取出变量age所在内存地址,一般地址是十六进制。*(声明指针) : 对指针取值申明指针*age, 打印指针内存单元的值**age.如下面 x *int, *x就是指针所对应的值。package mainimp

2021-08-04 11:33:05 11526 1

原创 Go rpc通讯 示例/分析

服务端代码func HandleHTTP()HandleHTTP函数注册DefaultServer的RPC信息HTTP处理器对应到DefaultRPCPath,和DefaultServer的debug处理器对应到DefaultDebugPath。HandleHTTP函数会注册到http.DefaultServeMux。之后,仍需要调用http.Serve(),一般会另开线程:"go http.Serve(l, nil)"注: 其实就相当于调用NewServer函数生成一个*Server,然后再调用其

2021-08-03 16:16:09 285

原创 swoole客户端与go服务端tcp通讯

为防止粘包使用了16位的标志位来进行分包php做客户端使用的同步的tcp<?php$client = new swoole_client(SWOOLE_SOCK_TCP);if (!$client->connect('127.0.0.1', 3333, -1)){ exit("connect failed. Error: {$client->errCode}\n");}$context = "hello world 1";$len = pack("n", s

2021-07-31 17:52:45 196

原创 PHP的IP段匹配、CRID匹配

先补充下计算掩码位数示例1255.255.255.0换成二进制是11111111.11111111.11111111.00000000也就是24位记住一个公式 128 64 32 16 8 4 2 1每一个对应二进制里的一位1,所有加起来正好255(二进制中所有的1加起来的值)。有几个1,就对应的加几个数字示例2255.255.255.240这是几位的掩码呢255对应的肯定是8咯,那么240呢?算算128+64+32+16=240,总共用到了四组数字,那么二进制应该就是11110000完

2021-07-30 20:09:16 916

原创 go实现map有序输出

package mainimport ( "fmt" "sort")func main() { var testMap = make(map[string]string) testMap["B"] = "B" testMap["A"] = "A" testMap["D"] = "D" testMap["C"] = "C" testMap["E"] = "E" for key, value := range testMap { fmt.Println(key, ":", v

2021-07-28 21:09:10 1729

原创 用go实现冒泡排序

package mainimport ( "fmt")func main() { values := []int{8, 100, 3, 88, 33, 37, 90, 93, 27, 66} fmt.Println(values) for i := 0; i < len(values); i++ { for j := i + 1; j < len(values); j++ { if values[i] > values[j] { values[i], v

2021-07-28 21:06:31 91

原创 Docker Alpine镜像安装go问题

go在alpine系统采用的so不同导致的情况:由于alpine镜像使用的是musl libc而不是gnu libc,/lib64/ 是不存在的。但他们是兼容的,可以创建个软连接过去.解决:mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2FROM alpine:3.11RUN mkdir /goRUN cd /go \ && wget https://g

2021-07-28 20:36:04 961

原创 golang互斥锁跟读写锁

Go语言互斥锁与读写锁理解

2021-07-15 20:21:00 645

转载 go的close函数理解

close函数是用于关闭通道的官方解释(摘自close函数源代码注释):The close built-in function closes a channel, which must be eitherbidirectional or send-only. It should be executed only by the sender,never the receiver, and has the effect of shutting down the channelafter the la

2021-07-14 20:36:32 2164

原创 PhpOffice/PhpSpreadsheet 导出csv 阿里云OSS php下载excel

$list = ["123","123","123","123","123","123","123"];$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();$worksheet = $spreadsheet->getActiveSheet();$list = array_chunk($list, 1000);$row = 1;foreach ($list as $k => $mobi

2021-06-22 14:29:24 552

原创 docker创建MariaDB

创建docker-compose.yaml文件version: "3.6" services: mariadb: environment: - MYSQL_ROOT_PASSWORD=123456 # 设置密码,账号默认root image: mariadb:latest ports: - "3306:3306" container_name: mariadb ...

2021-06-19 11:21:22 244

转载 深入理解Golang之context

前言这篇文章将介绍Golang并发编程中常用到一种编程模式:context。本文将从为什么需要context出发,深入了解context的实现原理,以及了解如何使用context。为什么需要context在并发程序中,由于超时、取消操作或者一些异常情况,往往需要进行抢占操作或者中断后续操作。熟悉channel的朋友应该都见过使用done channel来处理此类问题。比如以下这个例子:func main() { messages := make(chan int, 10) done

2021-06-16 18:23:56 183

原创 docker 基于centos创建php73+swoole镜像文件 hyperf

编写Dockerflie文件FROM centos:7.6.1810LABEL maintainer="scw_and@163.com"RUN yum -y install vim gcc automake autoconf libtool make net-tools git lrzsz unzip gcc gcc-c++ curlRUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noa

2021-06-09 15:51:08 298 2

转载 MySQL的锁机制和加锁原理

mysql锁进行划分按照锁的粒度划分:行锁、表锁、页锁按照锁的使用方式划分:共享锁、排它锁(悲观锁的一种实现)还有两种思想上的锁:悲观锁、乐观锁。InnoDB中有几种行级锁类型:Record Lock、Gap Lock、Next-key LockRecord Lock:在索引记录上加锁Gap Lock:间隙锁Next-key Lock:Record Lock+Gap Lock1.行锁​ 行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作

2021-06-08 18:43:49 189

转载 git 查看分支创建时间

git 查看分支创建时间git reflog show --date=iso <branch name>可以查看到指定分支的历次更改记录,最下面一条的时间即是分支创建时间。

2021-06-08 17:00:37 8660

原创 golang 获取env(环境变量)并添加默认值

package mainimport ( "fmt" "os")func main() { host := GetEnvDefault("HOST", "127.0.0.1") fmt.Println(host)}// 获取环境变量信息func GetEnvDefault(key, defVal string) string { val, ex := os.LookupEnv(key) if !ex { return defVal } return val}..

2021-06-08 12:06:44 3574

原创 golang 字符串转大小写

小写全文转化为小写方法一 strings.ToLowerfunc ToLower(s string) string返回将所有字母都转为对应的小写版本的拷贝。package mainimport ( "fmt" "strings")func main() { // 转小写 -> hello world fmt.Println(strings.ToLower("HELLO WORLD"))}方法二 strings.ToLowerSpecialfunc ToLowerSpe

2021-06-08 12:02:24 6527

原创 golang 字符串拼接

go语言中支持的字符串拼接的方法有很多种,这里就来罗列一下常用的字符串拼接方法1. + 连接字符串golang 里面的字符串都是不可变的,每次运算都会产生一个新的字符串,所以会产生很多临时的无用的字符串,不仅没有用,还会给 gc 带来额外的负担,所以性能比较差s1 := "字符串"s2 := "拼接"s3 := s1 + s2fmt.Print(s3) //s3 = "打印字符串"2. sprintf函数内部使用 []byte 实现,不像直接运算符这种会产生很多临时的字符串,但

2021-06-08 11:22:48 659

转载 大神讲解微服务治理的技术演进和架构实践

摘要:随着业务的发展,规模扩大,服务越来越多,需要协调线上运行的各个服务,保障服务的SLA;基于服务调用的性能KPI数据进行容量管理,合理分配各服务的资源占用;对故障业务做服务降级、流量控制、流量迁移等快速恢复业务。怎样的服务治理框架能满足需求?为什么需要服务治理?第一、业务需求随着业务的发展,服务越来越多,如何协调线上运行的各个服务,保障服务的SLA,对服务架构和运维人员是一个很大的挑战。随着业务规模的不断扩大,小服务资源浪费等问题逐渐显现,需要能够基于服务调用的性能KPI数据进行容量管.

2021-06-07 19:18:20 516

静态资源库boost 1.75版本

静态资源库boost 1.75版本

2022-03-11

编译boost静态库 boost 1.58版本资源

编译boost静态库 boost 1.58版本资源

2022-03-11

洞见-领域驱动设计文集.pdf

洞见-领域驱动设计文集.pdf

2021-01-28

多选多级联动插件tntreebox

多选多级联动插件tntreebox 详细信息参考 http://www.jq22.com/jquery-info20589 地址

2020-11-03

JQuery 1.7手册

JQuery是继prototype之后又一个优秀的Javascript库。它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后续版本将不再支持IE6/7/8浏览器。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。jQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需要定义id即可。

2015-07-03

Sublime Text中文破解版

Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器。Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。

2015-07-03

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

TA关注的人

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