自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鹿晓鹏的博客

生命不息,学习不止

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

原创 18.Go语言基础之单元测试

不写测试的开发不是好程序员。我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分。这篇文章主要介绍下在Go语言中如何做单元测试和基准测试。

2022-10-14 14:01:18 1020

原创 17.Go语言基础之网络编程

互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。我们理解了这些协议,就理解了互联网的原理。由于这些协议太过庞大和复杂,没有办法在这里一概而全,只能介绍一下我们日常开发中接触较多的几个协议。

2022-10-14 13:55:58 194

原创 16.Go语言基础之处理并发错误

我们可以在Go语言中十分便捷地开启goroutine去并发地执行任务,但是如何有效的处理并发过程中的错误则是一个很棘手的问题,本文介绍了一些处理并发错误的方法。

2022-10-14 13:52:10 402

原创 15.Go语言基础之并发

下面的表格中总结了对不同状态下的通道执行相应操作的结果。**注意:**对已经关闭的通道再执行 close 也会引发 panic。

2022-10-14 13:49:37 166

原创 14.Go语言基础之反射

反射是指在程序运行期间对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期间将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期间获取类型的反射信息,并且有能力修改它们。Go程序在运行期间使用reflect包访问程序的反射信息。在上一篇博客中我们介绍了空接口。

2022-10-14 13:45:41 84

原创 13.Go语言基础之error接口

Go 语言中的错误处理与其他语言不太一样,它把错误当成一种值来处理,更强调判断错误、处理错误,而不是一股脑的 catch 捕获异常。

2022-10-14 13:44:08 229

原创 12.Go语言基础之接口

type 接口类型名 interface {方法名 1(参数列表 1) 返回值列表 1 方法名 2(参数列表 2) 返回值列表 2 … }接口类型名:Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有关闭操作的接口叫closer等。接口名最好要能突出该接口的类型含义。方法名:当方法名首字母是大写且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问。参数列表、返回值列表:参数列表和返回值列表中的参数变量名可以省略。

2022-10-14 13:41:14 113

原创 11.Go语言基础之包

Go语言中支持模块化的开发理念,在Go语言中使用包(package)来支持代码模块化和代码复用。一个包是由一个或多个Go源码文件(.go结尾的文件)组成,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。例如,在之前的章节中我们频繁使用了fmt这个内置包。") }上面短短的几行代码就涉及到了如何定义包以及如何引入其它包两个内容,接下来我们依次介绍一下它们。我们可以根据自己的需要创建自定义包。一个包可以简单理解为一个存放.go文件的文件夹。该文件夹下面的所有.go。

2022-10-14 12:07:25 497

原创 10.Go语言基础之结构体

在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。//将MyInt定义为int类型 type MyInt int通过type关键字的定义,MyInt就是一种新的类型,它具有int的特性。类型别名与类型定义表面上看只有一个等号的差异,我们通过下面的这段代码来理解它们之间的区别。

2022-10-13 12:18:14 98

原创 9.Go语言基础之指针

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。

2022-10-13 12:04:14 83

原创 8.Go语言基础之函数

func 函数名(参数)(返回值) {函数体 }函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概念详见后文)。参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔。返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用()包裹,并用,分隔。函数体:实现指定功能的代码块。fmt . Println("Hello 沙河") }

2022-10-13 11:52:00 107

原创 7.Go语言基础之map

其中,KeyType:表示键的类型。ValueType:表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用make()函数来分配内存。其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。

2022-10-13 11:40:56 364

原创 6.Go语言基础之切片

其中,name:表示变量名T:表示切片中的元素类型// 声明切片类型 var a [ ] string //声明一个字符串切片 var b = [ ] int {} //声明一个整型切片并初始化 var c = [ ] bool {false , true } //声明一个布尔切片并初始化 var d = [ ] bool {

2022-10-13 11:15:04 104

原创 5.Go语言基础之数组

var 数组变量名 [ 元素数量 ] T比如:var a [5]int, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。[5]int和[10]int是不同的类型。var a [ 3 ] int var b [ 4 ] int a = b //不可以这样做,因为此时a和b是不同的类型数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。{"北京" , "上海" } , {

2022-10-13 10:58:27 109

原创 4.Go语言基础之流程控制

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。

2022-10-13 10:50:35 91

原创 3.Go语言基础之运算符

运算符用于在程序运行时执行数学或逻辑运算。

2022-10-13 10:21:53 67

原创 2.Go语言基础之变量和常量

程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。定义数量级 (这里的

2022-10-13 09:53:48 95

原创 1.Go语言基础之基本数据类型

Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。

2022-10-13 09:45:35 127 1

原创 Go语言基础之变量和常量

标识符与关键字标识符在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。关键字关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。Go语言中有25个关键字:break defaul...

2022-10-12 22:28:13 54

原创 Go依赖管理及Go module使用

依赖管理为什么需要依赖管理最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决?godepGo语言从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么go工具链会优先使用vendor内的包进行编译、测试等。godep是一个通过vender模式实现...

2022-10-12 11:13:28 227

原创 切片操作的技巧

复制将切片a中的元素复制到切片b中。最简单的、最常用的方法就是使用内置的copy函数。b = make([]T, len(a)) // 一次将内存申请到位copy(b, a)除了使用内置的copy函数外,还有下面两种使用append函数复制切片的方法。b = append([]T(nil), a...)b = append(a[:0:0], a...)这两种方法通常比使用copy...

2022-10-02 23:30:09 196

原创 使用Go实现广度优先算法实现走迷宫

package mainimport ( "fmt" "os")func readMaze(fileName string) [][]int { file, err := os.Open(fileName) if err != nil { panic(err) } var row, col int fmt.Fscanf(file, "%d %d", &row,...

2022-10-02 14:49:40 44

原创 Go语言基础知识

定义变量变量类型写在变量名之后var a int = 2var a, b int = 3, 4// 使用 ":=" 来代替var,这个语法只能在func内使用,在保内变量是不能使用的// 可以不声明参数类型,编译器会自动判断类型a, b, c, d := 1, 2, true, "def"// 在包内部可以使用var批量定义var ( aa = 3 bb = "ss")内...

2022-10-01 14:18:15 130

原创 面试中关于MySQL十连问

1、SQL语句执行流程MySQL大体上可分为Server层和存储引擎层两部分。Server层:连接器:TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经创建的链接权限,必须重新登陆。查询缓存:查询后的结果存储位置,MySQL8.0版本以后已经取消,因为查询缓存失效太频繁,得不偿失。分析器:根据语法规则,判断你输入的这个SQL语句是否满足My...

2020-12-15 14:43:59 62

原创 SQL四种语言:DDL,DML,DCL,TCL

1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema.DDL是SQL语言的四大功能之一。用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束DDL不需要commit.CREATEALTE...

2020-12-08 14:58:25 36

原创 IDEA快捷键

快捷键可实现功能:自动代码、查询快捷键、其他快捷键、调试快捷键、重构自动代码常用的有fori/sout/psvm+Tab即可生成循环、System.out、main方法等boilerplate样板代码 。例如要输入for(User user : users)只需输入user.for+Tab ;再比如,要输入Date birthday = user.getBirthday()只需输入user....

2020-11-26 10:31:12 34

原创 @RestController详解

注释详解1. @RestController官网给出的说明:This code uses Spring 4’s new @RestController annotation, which marks the class as a controller where every method returns a domain object instead of a view. It’s shor...

2020-10-26 14:11:35 99

原创 定时备份Redis数据

使用shell脚本进行数据备份将command.txt和脚本放到一起,command.txt中保存的是redis命令:command.txt内容如下:saveredis_backup.sh内容如下:-h linux主机ip -p redis端口号 -a redis登录密码(若设置了)#! /bin/shecho "redis数据开始备份!"date=$(date +%Y-%m-%...

2020-06-04 12:30:52 202

原创 redis导出导入

直接使用redis自带的导出和导入功能即可:1、原Redis服务器登录redis服务器,然后通过redis的客户端进行连接redis,命令如下:[root@ ~]# redis-cli127.0.0.1:6379> 注释:如果没有将redis-cli安装成服务,可以进入redis的src目录下进行客户端的连接连接成功后,我们可以通过下面的命令找到redis的文件存放目录127...

2020-06-04 12:03:03 57

原创 PHP-redis常用方法集合

<?php##################### Redis方法 #####################/** * 连接 * Connection */$redis = new Redis;$redis->connect('127.0.0.1', 6379, 1); //短链接,本地host,端口为6379,超过1秒放弃链接$redis-...

2020-06-04 11:56:49 40

原创 Mac下安装php-redis扩展

下载php-redis,地址:https://nodeload.github.com/n...下载完成得到phpredis-master.zip移动到/usr/local/目录中sudo cp phpredis-master /usr/local/进入/usr/local/目录cd /usr/local解压phpredis-master.ziptar -zxvf phpredis-...

2020-06-04 11:52:05 45

原创 Docker之容器网络

容器网络一、为什么要学习容器网络?如果要使用Docker来搭建redis集群或者别的集群需要制定Docker容器的IP地址,但是每次容器重启都会修改容器的IP地址,所以需要了解如何设置容器的网络。二、Docker默认网络Docker安装后,会默认创建三种网络类型,可使用如下命令来查看:docker network ls在启动容器时使用--network bridge 制定网络类型,b...

2020-03-15 22:40:55 61

原创 Docker之Compose

Dcoker-ComposeCompose介绍Compose是 Docker 的服务编排工具,主要用来构建基于Docker的复杂应用Compose 通过一个配置文件来管理多个 -Docker 容器,非常适合组合使用多个容器进行开发的场景。Compose 中有两个重要的概念:服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。项目 (project)...

2020-03-12 22:28:52 157

原创 nginx设置X-Frame-Options的两种方法

本文介绍nginx分别通过http和server设置 X-Frame-Options ,防止网站被别人用iframe嵌入使用。需要说明的是,只需用其中一个方法即可,在http配置代码块或server配置代码块里设置。在http配置里设置X-Frame-Options在server配置里设置X-Frame-Options在http配置里设置X-Frame-Options打开nginx.con...

2020-03-10 17:27:47 209

原创 Docker之构建项目

Docker构建环境常用命令:导入/导出镜像export&import 占用空间小,不能回滚到历史层save&load 占用空间大,可回滚到历史层查看镜像历史的操作docker history imageName基础镜像系统ubuntucentosDebianalpine查看容器详细信息docker inspection查看容器日志docker lo...

2020-03-02 22:24:31 614

原创 Docker之初体验

macOS-Docker初体验Docker常用命令:生成镜像:docker build -t imagesName .查看镜像:docker images删除镜像:docker rmi `imagesName`启动容器:docker run -itd --name imagesName nginx查看容器列表:docker ps -a进入容器内部:docker exec -it im...

2020-02-26 23:49:47 32

原创 初识Docker

一、Docker 入门Docker是什么?Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。为什么要使用 Docker?作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。更高效的利用系统资源由于容器不需要进行硬件虚拟以及运行完整操作系统...

2020-02-26 20:28:12 25

原创 使用MySQLdumpslow统计慢日志

目的:统计慢日志,优化SQL;工具:MySQLdumpslow,MySQLdumpslow是mysql自带的用来分析慢查询的工具;Option NameDescription-aDo not abstract all numbers to N and strings to 'S'不要将所有数字都抽象为N,将字符串抽象为“ S”-nAbstract numbe...

2020-02-20 00:14:43 75

原创 MySQL开启慢查询日志

目的:为了更好的优化接口的加载速度;适用环境:MySQL慢查询主要用于开发环境或本地,不适用于生产环境;参数说明:slow_query_log: 慢查询日志开启状态slow_query_log_file: 慢查询日志存放位置long_query_time: 查询超过多少秒才记录一、打开MySQL慢查询日志:登录MySQL查询是否开启慢查询mysql> show varia...

2020-02-19 22:42:30 25

原创 Mac系统下安装Swoole

Swoole是什么?作者:韩天峰解答(资深PHP程序员,Swoole开源项目创始人,PHP官方扩展开发组成员。)Swoole是一个为PHP用C和C++编写的基于事件的高性能异步&协程并行网络通信引擎;一直以来在其他编程语言程序员心目中PHP就是个套HTML页面的。所谓PHP程序员就是搞WordPress、discuz二次开发,一个月拿三五千的loser,和我大Java工程师相比简直l...

2019-12-08 23:01:16 62

空空如也

空空如也

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

TA关注的人

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