自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wzbwzt的博客

个人邮箱:shsxywzb131@163.com

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

原创 cockroach如何备份数据和导入sql文件

数据导出#将xxx.xxx.xxx.xxx:36257中的数据库corp给导出成backup.sql文件cockroach dump corp --insecure --host xxx.xxx.xxx.xxx:26257 > backup.sql数据导入#将backup.sql文件导入到xxx.xxx.xxx.xxx:36257中的数据库corpcockroach sql url postgresql://root@xxx.xxx.xxx.xxx:26257/corp?sslmode=

2020-11-05 11:23:54 786 4

原创 cockroach如何修改字段为is_nullable属性、默认值设置、字段类型、字段删除与重命名

修改is_nullable属性#设置字段为非null属性:(表subscriptions中字段 newsletter 为非null)ALTER TABLE subscriptions ALTER COLUMN newsletter SET NOT NULL;#删除字段原先的非null设置:(删除表subscriptions中字段 newsletter 可以为null)ALTER TABLE subscriptions ALTER COLUMN newsletter DROP NOT NULL;

2020-11-05 11:10:36 900

原创 cockroach如何删除、添加主键

e.g.当前的表中主键设为;corp_id和stuff_qr_code;需要删除这两个主键;并设置id为主键type StuffPos struct { ID int64 CorpID int64 `gorm:"primary_key;index;not null"` StuffQrCode string `gorm:"primary_key;index;not null"` StuffFilesID int64 `gorm:".

2020-11-03 19:15:55 293

原创 Shell学习-流程控制if、for、while、until、case、函数

If格式:if [ condition ]thencommands #代码块 一行或者多行代码fi

2020-10-28 00:32:56 202

原创 Shell学习-变量、数组、比较运算符、test命令

变量类型根据作用域及生命周期可以分为四类:本地变量、环境变量、全局变量、内置变量本地变量(临时变量):用户自定义的变量,定义在脚本或者当前终端中,脚本执行完毕或终端结束变量失效(当前进程中有效,其他进程及当前进程的子进程无效)。环境变量:定义在用户家目录下的.bashrc或.bash_profile文件中,用户私有变量,只能本用户使用(能够被子进程调用)全局变量:所有用户及shell都可以使用,可以在/etc/profile /etc/bashrc下永久定义内置变量:系统变量(内置bash中

2020-10-25 00:46:34 249

原创 Shell学习-特殊符号、运算符、颜色代码、标准输入输出

Shell

2020-10-24 00:54:58 337

原创 gRPC接口调试工具-grpcui

Go gRPC 调试工具 -grpcui概述当我们在写 HTTP 接口的时候,使用的是 Postman 进行接口调试,那么在写 gRPC 接口的时候,有没有类似于 Postman 的调试工具呢?当然是有的 ~咱们一起看下 grpcui,源码地址:https://github.com/fullstorydev/grpcui看下官方描述:grpcui is a command-line tool that lets you interact with gRPC servers via a bro

2020-10-16 22:44:06 3239

原创 Docker的使用-docker-compose

Docker-compose运行一个docker 需要大量的参数,可以通过docker-compose来编写这些参数;docker-compose 可以批量的管理容器;只需要通过一个docker-compose.yml文件去维护即可;下载docker-composegithub:https:【版本:1.24.1】//github.com/docker/compose/releases/tag/1.24.1给予docker-compose文件一个可执行的权限chmod 777 文件名配

2020-10-12 22:29:24 218

原创 Docker的使用-数据卷

Docker数据卷实现持久化存储数据安全性;不会存在当容器挂掉时,容器中的数据丢失数据卷:将宿主机的一个目录给映射到容器的一个目录中(相当于共享目录);手工交互数据[root@localhost html]# docker container cp demo.html demo1:/usr/share/nginx/html/ //将文件给cp到指定容器的指定路径[root@localhost html]# docker container cp demo1:/usr/share/ngin

2020-09-28 00:41:10 3459

原创 关于在windows下使用cockroach数据报错: ERROR: failed to initialize node: unable to load named timezones

首先windows启动cockroach服务时,路径中不可以有中文;对于报时区错误;可以用Go代码在中设置环境变量,也可以手动设置环境变量再执行在package mainimport ( "fmt" "os/exec" "syscall" "log")func main(){ err:=syscall.Setenv("ZONEINFO",`D:\www\test\zoneinfo.zip`) if err != nil { log.Fatal(err) } cmd:=.

2020-08-29 20:41:00 415

转载 gRPC 调试工具 -grpcui

Go gRPC 调试工具 -grpcui概述当我们在写 HTTP 接口的时候,使用的是 Postman 进行接口调试,那么在写 gRPC 接口的时候,有没有类似于 Postman 的调试工具呢?当然是有的 ~咱们一起看下 grpcui,源码地址:https://github.com/fullstorydev/grpcui看下官方描述:grpcui is a command-line tool that lets you interact with gRPC servers via a bro

2020-08-09 23:41:03 3149

原创 Go生成二维码

使用github.com/skip2/go-qrcode包import ( "fmt" qrcode "github.com/skip2/go-qrcode" "image/color")func main(){ qrcode.WriteFile("https://blog.csdn.net/wzb_wzt",qrcode.Medium,256,"./QRcode/demo.png") //自定义设置二维码样式 //生成一个qrcode struct指针 code, _ := qr

2020-08-08 22:38:28 383

原创 goEmail发送邮件

使用gopkg.in/gomail.v2,发送邮件func SendMail(mailTo []string,subject string, body string ) error { mailConn := map[string]string { "user": "xxxxxx@xxx.com", "pass": "xxxxx", "host": "smtp.xx.com", "port": "465", } port, _ := st

2020-08-08 12:39:59 1626 1

原创 Go中json、map、struct的转换

json与map、json与struct的转换直接通过encoding/json报的序列化与反序列化就可以实现;但是map转struct可以通过github.com/mitchellh/mapstructure包来实现json相比较转换为map,转换为struct在实际使用中更加方便;map需要通过 key 获取数据,可能出现不存在的 key,为了严谨,需要检查 key 是否存在;相对于结构体的方式,map数据提取不便且不能利用 IDE 补全检查,key 容易写错;json与struct.

2020-08-06 18:35:36 970

原创 TCP连接的三次握手和四次挥手详解

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接,客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。在了解三次握手和四次挥手的操作前需要了解下Tcp数据报的结构:重点关注的是数据序号、确认序号、以及标志位(U、A、P、R、S、F);数据序号:Seq(Sequence Numbe

2020-08-05 17:45:42 365

原创 Go基础学习-defer

defer执行的原则defer延迟函数总是在异常panic或者正常return前返回;defer执行顺序按照先入后出的原则,即先入栈的最后执行;但是会先把参数压入栈,具体执行会在函数结束前当defer函数中存在函数时会先执行里面的函数;defer函数调用的参数当存在闭包时,会从外面拿取该参数的最新的值;defer常常与recover一同使用;用来做异常捕捉后的延迟执行;从而将异常给转换为错误error;看几个案例:案例1:func main() { i := 10 defer fmt

2020-08-04 19:56:55 320 1

原创 后缀算法与中缀算法

中缀算法就是日常计算中用到的类似a+b的算法表达式;运算符位于两个运算数中间的位置;后缀算法相比较中缀表达式的结构,不难推出后缀表达式的格式,就是符号位于两个运算量的后边位置,比如ab+表示的就是a+b;后缀表达式又称逆波兰表达式;优点在于:可以配合栈(stack)来完成运算,这种运算只需要按顺序进行而不需要考虑运算符的优先级,并且速度很快。以后缀表达式:abc+de+;为例,他的运算过程是:1.将a,b先后入栈;2.读取到*,将a、b出栈,计算ab;将结果再入栈;3.将c入栈;读取到+;

2020-08-04 14:59:24 1651

原创 KMP算法解析

KMP算法用来匹配一个字符串是否包含一个指定字符串;KMP算法的核心是得到子串的部分匹配表;在计算当出现不匹配时子串要回溯的位置时需要用到;部分匹配值:”就是”前缀”和”后缀”的最长的共有元素的长度。以子串ABCDABD为例,来得到他的部分匹配表首先弄清楚前缀与后缀的概念;前缀指去除尾部字符的全部组合;后缀指去除首部字符的全部组合;比如:ABCDA的前缀有[“A”,“AB”,“ABC”,“ABCD”],后缀有[ “BCDA”, “CDA”, “DA”, “A”]按照部分匹配值的定

2020-08-03 19:31:39 205

原创 判断一个链表是否有环

题目:给定一个链表,判断链表中是否有环。pos 表示链表尾连接到链表中的位置(索引从 0 开始)示例1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。思路:首先判断head不可以为nil对于head.Next节点为nil的返回false对head做赋值,分别给a和b;让a走两步,b走一步;

2020-08-03 17:15:45 128

原创 判断两个链表相交的起始节点

题目:找到两个单链表相交的起始节点;比如:从c1开始相交:输入: listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], 输出: 8思路:首先对于传入的A链、B链判断不能为nil;只要两个节点不相等就循环,知道找到相等的那个节点A、B每次都是走一步,走到头会延续对方的路走,这样他们走的路就是相同的;只要不是平行,必然可以找到那个相交的节点;代码:type ListNode struct { Val int Next *Li

2020-08-03 16:58:25 247

原创 虚拟机centos系统无法ping通网络

虚拟机centos无法ping通;需要查看网络配置是否准确:vi /etc/sysconfig/network-scripts/ifcfg-ens33onboo是否等于yesgateway网关是否和虚拟机的VMnat8网卡网关一致;此外虚拟机的VMnet8网卡是否与本地VMnet8在同一网段;DNS1一般设置的和网关相同...

2020-08-03 13:02:15 260

原创 Go实现Websocket

WebSocketWebSocket 是独立的、创建在 TCP 上的协议。WebSocket在 HTML5 游戏和网页消息推送都使用比较多。WebSocket 是 HTML5 的重要特性,它实现了基于浏览器的远程socket,它使浏览器和服务器可以进行全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的。它与HTTP一样通过已建立的TCP连接来传输数据,但是它和HTTP最大不同是:WebSocket是一种双向通信协议。在建立连接后,WebSocket服务器端和客户端都能主动向对方发送或接收数

2020-08-03 12:43:07 1609

原创 Go实现http(net包)

http协议基于Tcp/ip协议;区别在于Tcp是面向连接的,而http是短连接,一次请求对用一次回应服务端http的开启方式1:func f1(w http.ResponseWriter, r *http.Request) { n, err := ioutil.ReadFile("./home.html") if err != nil { w.Write([]byte("页面丢失了!")) } w.Write(n)}//模拟客户端请求;同浏览器func f2(w http.Re

2020-08-02 22:04:46 261

原创 Go的错误、异常处理机制

错误和异常的区别错误指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中 ;而异常指的是不应该出现问题的地方出现了问题,比如引用了空指针,这种情况在人们的意料之外。可见,错误是业务过程的一部分,而异常不是 。错误和异常从Golang机制上讲,就是error和panic的区别。Golang错误和异常是的互相转换的:错误转异常,比如程序逻辑上尝试请求某个URL,最多尝试三次,尝试三次的过程中请求失败是错误,尝试完第三次还不成功的话,失败就被提升为异常了。异常

2020-08-02 12:08:16 472

原创 Go基础学习-Context

Go中常用的并发模型之一;(一共有三种:通过channel通知实现并发控制;通过sync包中的WaitGroup实现并发控制;Context上下文,实现并发控制)context对goroutine进行跟踪,从而达到控制他们的目的context接口不需要实现,其内置了两个方法帮我们实现了: var ( background = new(emptyCtx) todo = new(emptyCtx) ) func Background() Context..

2020-07-30 00:35:52 148

原创 排序的方法

冒泡排序比较相邻的元素。如果第一个比第二个大,就交换它们两个;第一次下来后最大的元素会排在最右边;下一次重复比较时,不会再去判断最后一个元素,以此讲第二大的元素给筛选出来;重复置只需要判断以此为止;func BubbleSort(x []int)[]int{ for i:=0;i<len(x)-1;i++ { for j:=0;j<len(x)-1-i;j++ { if x[j]>x[j+1] { var tmp int tmp=x[j+1]

2020-07-28 22:10:32 135

原创 go Logrus库的简单使用和进阶使用

go官方日志库log,功能简单,无法对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持;logrus日志级别分6等级;(debug、info、warn、error、fatal和panic) ;此外logrus与golang标准库日志模块完全兼容,因此可以使用log“github.com/sirupsen/logrus”替换所有日志导入。logrus的简单使用func main(){ //以json的形式输出,默认是以TextFormatter文档的形式输出 log.SetFormat

2020-07-25 22:34:23 1091 1

原创 go 定位函数操作位置(文件名、函数名、所在行)

runtime.Caller()返回函数执行程序计数pc、执行的文件名和所在行数runtime.FuncForPC()传入pc,得到运行的函数指针文件结构- runtime- -file1.go- -file2.go- -main.gomain.go文件package mainimport ( "fmt" "path" "runtime")func main(){ name, funcName, line := f2(0) fmt.Printf("file:%v;fun

2020-07-24 21:37:34 1109

原创 go 获取文件执行的路径

方法:path, _ := exec.LookPath(os.Args[0])fmt.Println(path) abs, _ := filepath.Abs(path)fmt.Println(abs)index := strings.LastIndex(abs, string(os.PathSeparator))fmt.Println(path[:index]) os.Args是用来获取命令行执行参数分片当go run 运行时会将文件转移到临时路径下,然后再进行编译和执行,分片0就是

2020-07-24 18:14:06 2995

原创 float转二机制数据

需要用到官方的math包和binary包package mainimport ( "encoding/binary" "fmt" "math")func main(){//float32转[]bytevar sf float32 = 12.12bits := math.Float32bits(sf)res:=make([]byte,4)binary.LittleEndian.PutUint32(res,bits)fmt.Printf("%v\n",res) //[133 23

2020-07-24 00:15:46 194

原创 区块链的简单代码实现,基于Web服务器的Pow实例

区块(生成创世区块、生成新区块)package blockimport ( "crypto/sha256" "encoding/hex" "math/rand" "strconv" "strings" "time")const Diff =3//区块type Block struct { Index int PreHash string HashCode string TimeStamp int Diff int Data string Nonce int}

2020-07-23 16:38:37 1470 1

原创 gorilla/mux的使用

github.com/gorilla/mux:golang自带的http.SeverMux路由实现简单,本质是一个map[string]Handler,是请求路径与该路径对应的处理函数的映射关系。实现简单功能也比较单一:1.不支持正则路由, 这个是比较致命的2.只支持路径匹配,不支持按照Method,header,host等信息匹配,所以也就没法实现RESTful架构而gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信

2020-07-21 13:21:52 774

原创 Go-micro的使用实例

Go-micro创建grpc服务proto文件protoc --go_out=. model.proto //当前文件下生成.go文件protoc --micro_out=. --go_out=. service.proto //当前文件下生成.micro.go文件//model.protosyntax="proto3";package Services;//商品模型message ProdModel{ //@inject_tag:json:"id" int32 Pr

2020-07-20 18:12:52 958 1

原创 Go连接数据库以及sqlx包使用

Mysql使用go自带包"database/sql",连接数据库使用database/sql包时必须注入(至少)一个数据库驱动,mysql使用的是github.com/go-sql-driver/mysql,匿名导入连接//连接func initDB() (err error) { //数据库连接信息:dataSourceName dsn := "root:xxx@tcp(xxx.xxx.xxx.xxx:3306)/go_demo" db, err = sql.Open("mysql",

2020-07-20 00:25:04 1087

原创 Go连接Redis

RedisKV 数据库;是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,主要有:1.字符串(strings)2.哈希(hashes)3.列表(lists)4.集合(sets)5.带范围查询的排序集合(sorted sets)6.位图(bitmaps)7.hyperloglogs8.带半径查询和流的地理空间索引等数据结构(geospatial indexes)推荐书单:<<Redis 实战>>import ( "fmt" "github

2020-07-19 20:26:18 361

原创 Go实现TCP、UPD连接及粘包问题解决

UDP连接//服务端func main() { udpConn, err := net.ListenUDP("udp", &net.UDPAddr{ IP: net.IPv4(127, 0, 0, 1), Port: 30000, }) if err != nil { fmt.Println("udp listen failed err:", err) return } defer udpConn.Close() var tmp [1024]byte for {

2020-07-19 19:53:55 760

原创 互联网分层模型及Socket

互联网分层模型物理层电脑要与外界互联网通信,需要先把电脑连接网络,可以用双绞线、光纤、无线电波等方式。这就叫做”实物理层”,它就是把电脑连接起来的物理手段。它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。数据链路层下层的物理层既然不能规定不同0、1组合的信号代表什么意义,那么我们在数据链路层规定一套协议,专门的给0、1信号进行分组,以及规定不同的组代表什么意思,从而双方计算机都能够进行识别,这个协议就是“以太网协议”;以太网规定,一组电信号构成一个数据包,叫做”帧”(Fra

2020-07-19 19:03:00 435

原创 红黑树介绍

红黑树(又叫黑色完美平衡)既是二叉查找树,也是平衡二叉查找树;红黑树定义和性质:每个节点要么是黑色,要么是红色。根节点是黑色。每个叶子节点(NIL)是黑色。每个红色结点的两个子结点一定都是黑色。任意一结点到每个叶子结点的路径都包含数量相同的黑结点。(如果一个结点存在黑子结点,那么该结点肯定有两个子结点)插入的节点是红色红黑树可视化:http://www.u396.com/wp-content/collection/data-structure-visualizations/RedBlac

2020-07-19 15:52:55 166

原创 pprof性能优化

Go性能优化主要方面CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据Memory Profile(Heap Profile):报告程序的内存使用情况Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈Goroutine Profiling:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的工具型应用使用背景:应用程序是运行一段时间

2020-07-18 16:21:22 2003

原创 SQL语句的优化

对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。应尽量避免在 where 子句中使用!=或<>操作符以及对字段进行 null 值判断,否则将引擎放弃使用索引而进行全表扫描。要是需要null判断,可以在num上设置默认值0,确保表中num列没有null值尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描select id from twhere num=10 or num=20//优.

2020-07-18 14:39:52 152

空空如也

空空如也

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

TA关注的人

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