自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 Go中json.Unmarshal对数字类型的处理

JSON的规范中,对于数字类型,并不区分是整型还是浮点型。对于如下JSON文本:{ "name": "ethancai", "fansCount": 9223372036854775807}如果反序列化的时候指定明确的结构体和变量类型package mainimport ( "encoding/json" "fmt")type User struct { Name string FansCount int64}

2021-02-27 15:01:52 2834

原创 Go 函数选项模式

Golang 开发者遇到的许多问题之一是尝试将一个函数的参数设置为可选. 这是一个非常常见的用例, 有些对象应该使用一些基本的默认设置来开箱即用, 并且你偶尔可能需要提供一些更详细的配置.在很多语言中这很容易; 在 C 族语言中, 可以使用不同数量的参数提供相同函数的多个版本; 在像 PHP 这样的语言中, 可以给参数一个默认值,并在调用方法时忽略它们. 但是在 Golang 中, 这两种方式你哪个也用不了. 那么你如何创建一个函数, 用户可以指定一些额外的配置?有很多可能的方法可以做到这一点, 但

2021-02-27 14:34:45 185

原创 Golang中map的安全使用

简单介绍map数据类型在很多语言中都有,是一个key,value形式的hash表,从而将key,value进行一一映射,进行快速查找、添加、删除等操作。在Go语言中也不例外,提供了map数据结构类型。内建map切忌开箱即用Golang中,map是引用类型,如指针切片一样,通过下面的代码声明后指向的是nil。这点在golang官方文档中也说明了,所以千万别直接声明后就使用,开始可能经常会犯下面的错:var m map[string]stringm["result"] = "result"

2021-02-27 11:47:07 517

原创 Channel 是可以控制读写权限

go func(c chan int) { //读写均可的channel c } (a)go func(c <- chan int) { //只读的Channel } (a)go func(c chan <- int) { //只写的Channel } (a)package mainimport ( "fmt" "time")func main() { c := make(chan int, 10) go fibo..

2021-02-27 11:11:46 202

原创 error

fmt.Println 打印结构体的时候,会把其中的 error 的返回的信息打印出来。type User struct { username string password string}func (p *User) init(username string ,password string) (*User,string) { if ""==username || ""==password { return p,p.Error() } p.user.

2021-02-27 10:32:57 457

原创 go的且切片append后的len和cap的变化

https://www.runoob.com/go/go-slice.html这个是我看的最简洁清晰也和实际符合的,还没有看到原理部分关于 cap 为何变为 6 的问题,我认为楼上解释也不对,哈哈。1、当同时添加多个元素时:len(list)+len([params]) 为偶数:cap=len(list)+len([params])len(list)+len([params]) 为奇数:cap=len(list)+len([params])+1即 cap 始终为偶数。2、当一个

2021-02-26 16:11:39 503 2

原创 Go 切片Slice的长度len与容量cap

切片拥有长度和容量。切片的长度是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。这篇写的不错:https://sunzhy.blog.csdn.net/article/details/88770501...

2021-02-26 10:01:45 710

原创 go的值传递和引用传递

package mainimport "fmt"type Books struct { title string author string subject string book_id int}func changeBook(book Books) { book.title = "book1_change"}func main() { var book1 Books book1.title = "book1" book1.

2021-02-25 16:39:14 207

原创 go局部变量反人类的操作

package mainimport "fmt"func main(){ var a int = 0 fmt.Println("for start") for a:=0; a < 10; a++ { fmt.Println(a) } fmt.Println("for end") fmt.Println(a)}输出为:for start0123456789for end0在 for 循环的 initialize(a:=0.

2021-02-25 15:13:12 356 1

原创 go 的fmt的对比说明

package mainimport "fmt"func main() { var a int = 4 var ptr *int ptr = &a println("a的值为", a); // 4 println("*ptr为", *ptr); // 4 println("ptr为", ptr); // 824633794744 ss := fmt.Sprintf("类型是:%T", a) //S表示只是格式化不输出 fmt.Println(ss) .

2021-02-25 11:38:14 141

原创 golang中,unsafe.sizeof到底是干嘛的?

小生初学Go,有一点不懂,今天为了知道空结构体到底占多大的空间的时候,去百度说用unsafe.sizeof,但是对于unsafe.sizeof好像和其它语言的sizeof有些不一样?比如:var str string = "hello"var str2 stringfmt.Println(unsafe.SizeOf(str), unsafe.SizeOf(str2))结构两个打印出来都是16,这是为啥?到底怎样来获取结构体占的空间大小?空结构体占多大的空间?共 1 个回复.

2021-02-25 10:39:59 730

原创 Go内存分配机制-TCMalloc

本文是《循序渐进go语言》第四篇-Go内存分配机制。golang的内存采用了TCMalloc 这种分配机制。go是在多种语言诞生N多年之后,才由几个大神开发的。每种语言都有自己的内存分配机制,那么作为后起之秀,go为什么选用TCMalloc呢?因为TCMalloc(Thread-Cache Malloc) 在内存分配上性能做的更好,而且对内存的利用率也有所提高。先简单说一下TCMalloc在这两方面是如何做到的?性能提升主要从两点来看,第一点线程内部小对象的使用不存在锁竞争,减少了竞争带...

2021-02-23 19:40:09 583

原创 如何深入浅出地解释并发模型中的 CSP 模型?

作者:匿名用户链接:https://www.zhihu.com/question/26192499/answer/46345499来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。好像没什么人回答,因为Node.js的缘故导致我在业余时对消息传递系统很感兴趣,所以抛砖引玉,先来简单谈谈Actor和CSP以及它们的区别?CSP(Communicating Sequential Process)模型和Actor模型是两门非常复古且外形接近的并发模型。但CSP与Act.

2021-02-23 19:14:03 883

原创 Go 定时器NewTimer、NewTicker 和time.After

1、定时器(time.NewTimer)Go语言的定时器实质是单向通道,time.Timer结构体类型中有一个time.Time类型的单向chan,源码(src/time/time.go)如下type Timer struct { C <-chan Time r runtimeTimer}初始化 Timer 方法为NewTimer示例package mainimport ( "fmt" "time")func main() { t := t

2021-02-23 18:50:12 1626

原创 十大经典排序算法(动图演示)

转载自:https://www.cnblogs.com/onepixel/articles/7674659.html0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原.

2021-02-23 16:55:22 208

原创 理解go的function types

今天看Martini文档,其功能列表提到完全兼容http.HandlerFunc接口,就去查阅了Go: net/http的文档,看到type HandlerFunc这部分,顿时蒙圈了。由于之前学习的时候没有关注过function types的知识点,就Google了一些文章,才算是有了个大概的了解。从golang的官方文档得知function types的解释是这样的。A function type denotes the set of all functions with the same pa

2021-02-23 16:52:52 205

原创 mongodb常用语句

db.wd_monitor_data_202012.find({timeKey:/20201209/})db.stats(1073741824);db.wd_monitor_data_202101.find()db.wd_monitor_data_202101.find({schemaId:"187",timeKey:/^20210113/})db.channel_succ_rate_history.distinct("schemaId")db.wd_monitor_data_202012

2021-02-23 14:51:18 183

原创 Git 工作区和缓存区

工作区和暂存区1.工作区(working directory)简单来说,电脑中能看到的目录,就是一个工作区。2.版本库(repository)工作区中有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存在很多东西,其中最为重要的是stage(或者叫index)的暂存区。还有Git为我们自动创建的第一个分支master,以及指向master的第一个指针叫HEAD。Git中添加,是分两步执行的;第一步是用git add把文件添加进去,实际上...

2021-02-22 21:01:26 995

原创 golang substring方法的几种实现

1.原生方法,直接使用slice切片实现,但此方法对于包括中文字符就截取错误s:="abcde"fmt.Println(s[0:2]);//输出//ab//包含中文的字符串s2 := "我是中国人"fmt.Println(s2[0:2])//输出// ��//有乱码呀2.如下是我实现的几种方法,最主要还是通过rune来实现的//获取source的子串,如果start小于0或者end大于source长度则返回""//start:开始index,从0开始,包括0/.

2021-02-22 20:42:48 1572

原创 golang的SHA1withRSA的实现

java 采用的SHA1withRSAGoogle好久也没找到go的解决方案,查到某位大神说SHA1withRSA 是JAVA特有的封装,是先进行一个SHA1的散列,再进行一次RSA的加密,使用SHA散列包。这会产生一个小的32字节哈希字符串,便于快速计算 使用您的私钥对该字符串进行签名golang解决##参考资料##大神解决代码func main() { block, _ := pem.Decode([]byte(`-----BEGIN RSA PRIVATE KEY.

2021-02-20 17:44:42 928 2

原创 golang中实现RSA(PKCS#1)加密解密

RSA非对称加密算法,基于PKCS#1规范, 我们在使用RSA的时候需要提供 公钥和私钥 , 我们可以通过openss来为我们生成对应的pem格式的公钥和私钥匙。关于pkcs相关标准如下,摘自百度:PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封[22]。PKCS#3:定义Diffie-Hellman密钥交换协议[23]。PKCS#5:描述一种利用从口令派生出来的安全密钥加密字符串的方法。使用MD2或MD5 从口令中派生密钥..

2021-02-20 14:32:47 796

原创 openssl提取pfx证书密钥对

刚做银联的项目,对方给了1.pfx和1.cer两个测试文件,总结一下利用这两个文件提取出文本银联提供两个测试证书 1.pfx 和 1.cer .其中 pfx证书包含RSA的公钥和密钥;cer证书用于提取pfx证书中密钥时允许当前电脑进行合法操作。提取步骤如下:1. 点击1.cer,安装cer证书2.从pfx提取密钥信息,并转换为key格式(pfx使用pkcs12模式补足) (1)提取密钥对 openssl pkcs12 -in 1.pfx -nocert...

2021-02-20 14:31:53 800

原创 golang 前置补0

package main import ( "fmt") func main() { a := 1 fmt.Println(a) //前置补0 fmt.Printf("%03d", a) fmt.Println("") fmt.Printf("%0*d", 3, a)}和java基本一样

2021-02-19 17:01:22 1725

原创 RSA加密too much data for RSA block

RSA加密时报错:java.lang.ArrayIndexOutOfBoundsException: too much data for RSA bloc:按照下面顺序先后进行:1.RSA加密2.Base64编码:String password_front_end = Base64.getEncoder().encodeToString(encodeData);3.Base64解码:byte[] encodedPwd = Base64.getDecoder().decode(passw

2021-02-19 16:58:21 1208

原创 golang AES/ECB/PKCS5 加密解密 url-safe-base64

因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享:我自己的代码中对key需要进行base64的解码,一点点区别decodeBytes, _ := base64.StdEncoding.DecodeString(key)/*描述 : golang AES/ECB/PKCS5 加密解密*/package mainimport ( "bytes" "cryp

2021-02-19 16:56:49 1804

原创 golang中自带base64编码和解码

package main import ( "encoding/base64" "fmt" "log") func main() { input := []byte("hello golang base64 快乐编程http://www.01happy.com +~") // 演示base64编码 encodeString := base64.StdEncoding.EncodeToString(input) fmt.Println(e.

2021-02-19 11:47:06 442

转载 【IntelliJ IDEA】idea修改文件的file is read-only

我也直接chmod了,最后发现修改的是编译后的文件。。。。。。。。。。。。。。。今天碰到一个问题,不知怎么弄的,IDEA文件变成只读了,不能编辑修改。如图文件的图标有这样的变化:当我想要编辑修改这个文件的时候,出现下图所示的提示:此处的弹框是问你“是否清除只读状态”,此时点击OK可以将这个文件的只读状态改为可编辑状态。以上是第一种解决办法,简单,快速,方便,但有时候不会出现此弹框;另一种清除只读状态的解决办法是:选中此文件 --> File --> Make Fi

2021-02-18 11:42:22 5603 1

原创 Arrays.copyOf() 用法:

Arrays.copyOf() 用法:Arrays的copyOf()方法传回的数组是新的数组对象,改变传回数组中的元素值,不会影响原来的数组。copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值,例如:代码块:import java.util.Arrays;public class ArrayDemo {public static void main(String[] args) { int[] arr1 = {1, 2,

2021-02-09 20:21:03 525

原创 Java复制数组的方法

 java数组拷贝主要有四种方法,分别是循环赋值,System.arraycopy(),Arrays.copyOf()(或者Arrays.copyOfRange)和clone()方法。下面分别介绍一下这几种拷贝。一、循环拷贝(速度相对比较慢)  循环拷贝其实没什么好说的啦,就是用一个for循环进行元素的逐个拷贝,进行深拷贝或者浅复制这个大家可以自己把握。二、System.arraycopy(浅拷贝)  这个是系统提供的拷贝方式,也是我们推荐使用的拷贝方式,它是浅拷贝,也就是说对于非基本类型而

2021-02-09 20:20:27 389

原创 java System.arrayCopy 参数意义,使用

放假前看点小知识点下面是 System.arrayCopy的源代码声明 :public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)代码解释:  Object src : 原数组 int srcPos : 从元数据的起始位置开始  Object dest : 目标数组  int destPos : 目标数组的开始起始位置  int length : 要cop.

2021-02-09 20:19:48 259

原创 今日报错Cannot access java.lang.String

首先说下背景:公司的项目jdk全是1.6,然后我自己有个1.8的java项目,今天打开我自己的项目然后各种报错,很明显是jdk的问题,我检查了好几遍,配置是没有问题的。真是奇了怪了,然后发现是由于无效的缓存导致编译器无法识别jdk。eclipse和idea同样适用public java.long.Long getId() {  returnid;  }public void setId(java.lang.Long id) {  this.id = id;}手动删了java...

2021-02-09 19:39:52 4843 6

原创 form表单提交和JSON区别

form表单是“键值对”的数据格式,例如:a=1&b=2&c=3而json格式则与之不同,如下:{"a":1,"b":2,"c":3}传递的数据比较简单,那么两种方式基本上没什么大区别(当然后台接收数据的方式肯定是不同的),但是如果数据比较复杂,比如包含数组、对象等时,就只有json才能胜任了。此外,如果数据是通过表单提交的,那么当然使用默认的form即可,因为它会自动构建数据结构,无需手工拼接;而如果是通过ajax发送数据,则最好使用json,因为可以通过简单的方法把对象转换为.

2021-02-09 14:43:31 6605 2

原创 进程、线程和协程之间的区别和联系

一、进程  进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。【进程间通信(IPC)】:管道(Pipe)、命名管道(FIFO)、消息队列(Message Queue) 、信号量(Semaphore) 、共享内存(Shared Memory);套接字(Socket)。二、线程  线程,有时被称为轻

2021-02-09 14:41:53 202

原创 golang学习笔记之-context详细理解篇

context.Background():可以简单理解我们知道这个上下文要去干什么 context.TODO():可以简单理解我们不清楚要使用哪个上下文、或者还没有可用的上下文下面代码演示:1.context.WithCancel():返回Context和取消函数用来取消Contextpackage mainimport ( "context" "log" "os" "time")var ( logg *log.Logger)...

2021-02-09 14:26:12 1053

原创 MySQL 是如何解决幻读的

一、什么是幻读在一次事务里面,多次查询之后,结果集的个数不一致的情况叫做幻读。而多或者少的那一行被叫做幻行二、为什么要解决幻读在高并发数据库系统中,需要保证事务与事务之间的隔离性,还有事务本身的一致性。三、MySQL 是如何解决幻读的如果你看到了这篇文章,那么我会默认你了解了脏读、不可重复读与可重复读。1. 多版本并发控制(MVCC)(快照读/一致性读)多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。以InnoDB为例。可以理解为每一行中都冗余...

2021-02-07 15:45:05 472 1

原创 【设计模式】简单工厂、工厂方法与抽象工厂的区别

前言为什么会出现工厂,工厂方法与简单工厂还有抽象工厂到底有啥区别,什么时候能用到这些呢,如果你对于这些不是很清晰,那么你可以看看小编的这篇博客!这里所有的类图均用基本算法为例子,这样会有明显的对比!一、简单工厂模式1、我们在实例化对象的时候通常用的是New关键字,但是有了工厂,我们在声明对象的时候就可以用工厂了,用new导致代码不够灵活,用工厂来实例化对象很灵活!2、简单工厂类图3、部分代码(1)简单工厂类 public class OperationFact.

2021-02-07 14:49:40 233

原创 Redis分布式锁的正确实现方式

前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持

2021-02-07 14:46:07 71

原创 Linux命令发送Http的get或post请求(curl和wget两种方法)

Http请求指的是客户端向服务器的请求消息,Http请求主要分为get或post两种,在Linux系统下可以用curl和wget命令来模拟Http的请求。下面就来介绍一下Linux系统如何模拟Http的get或post请求。一、get请求:  1、使用curl命令:  curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地  curl -i “http://www.baidu.com” 显示全部信息  curl -l “h.

2021-02-02 20:56:49 4360

原创 Linux curl命令详解

命令:curl在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。语法:# curl [option] [url]常见参数:-A/--user-agent <string> 设置用户代理发送给服务器-b/--cookie <name=string/file> cookie字符串或文件读取位置-

2021-02-02 20:56:01 151

空空如也

空空如也

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

TA关注的人

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