go
文章平均质量分 56
RSABLOCKCHAIN
Anything is possible.
展开
-
Java虚拟机的运行时数据区-go语言实现
线程私有的区域包括了PC(程序计数器)和java虚拟机栈,Java虚拟机栈又由栈帧构成,帧保存了局部变量和操作数栈信息。一类时多线程共享的,一类时线程私有的。对于Java虚拟机栈,我们常用链表数据结构来实现,这样栈就可以按需使用内存空间,而且弹出来的帧可以被Go的垃圾收集器回收。虚拟机栈可以时连续的空间,也可以时不连续的,可以时固定大小,也可以时在运行时动态扩展。多线程共享的区域包括类和实例对象,实例对象保存在堆中,类保存在方法区中,其中类数据包含了类的方法、字段、方法字节码还有常量池信息。原创 2023-03-05 17:30:22 · 429 阅读 · 0 评论 -
解析Java中的class文件
解析class文件需要把class文件当成文件流来处理,定义ClassReader结构体go语言中的reslice语法可以跳过已经读过的数据。ClassFile结构体如实反映了Java虚拟机规范定义的class文件格式。class文件的魔数为0xCAFEBABE占四个字节minorVersion为class文件的次版本号majorVersion为class文件的主版本号constantPool为常量池acessFlags为class的可访问标识。原创 2023-02-22 13:00:10 · 436 阅读 · 0 评论 -
Go语言处理命令行参数
java命令行的选项可以分为两种:标准选项和非标准选项。标准选项比较稳定,不会轻易变动,非标准的选项以-X开头。非标准选项中有一部分是高级选项,以-XX开头。go语言的os包中定义了一个Args变量,用来存放传递给命令行的全部参数。如果给出了-jar选项,则第一个非选项参数表示JAR文件名,java命令必须从这个JAR文件中寻找主类。javaw和java命令唯一的区别在于,javaw显示命令行窗口后不会堵塞,会继续执行接下来的命令。选项由减号(-)开头,第一个非选项名给出了主类的完全限定名。原创 2023-01-27 22:27:54 · 372 阅读 · 0 评论 -
golang命令模式
命令模式概述命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。同时命令模式也支持可撤销的操作。模式实例比如餐厅里的女招待,一整天下来参数化许多的订单。又比如一个简单的遥控器,这个遥控器的按键command被抽象化为一个接口,只需要用譬如“打开电灯”、“打开车库门”之类的命令实现这个接口。就可以轻易的实现命令模式。UML图示例如上所示的图中,声明了一个Command接口,ConcreteCommand实现了Command接口,Invoker是一个调用者,它不需要了解C原创 2021-01-24 16:41:51 · 220 阅读 · 0 评论 -
go判断接口是够为空
func InterfaceIsNil(i interface{}) bool {ret := i == nilfunc InterfaceIsNil(i interface{}) bool { ret := i == nil if !ret { defer func() { recover() }() ret = reflect.ValueOf(i).IsNil() // there will exit so.原创 2021-01-24 16:34:43 · 536 阅读 · 0 评论 -
golang读取证书中的SubjectAlternativeNames(扩展字段)
简述任务:在实际开发中需要使用golang读取证书中SubjectAlternativeNames字段的内容。标准证书是由ASN1编码生成的,Java可以使用java.security.cert包中的X509Certificate类中getSubjectAlternativeNames()方法来提取这个扩展字段的内容。golang官方库中提供了X509这个包来实现asn1编码,其所对应的证书字段为:// A Certificate represents an X.509 certificate.t原创 2021-01-24 16:28:23 · 1683 阅读 · 0 评论 -
golang结构体转json(序列化与反序列化)
golang结构体转json读取json文件,并将该json文件转换成代码中的结构体输入一个json文件,结构如下所示:{ "kekMap" : { "1" : { "version" : 1, "cipherKey" : "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" } }}输出可以转换成的结构体为:type KekData struct { KekMap map[int64] K原创 2021-01-08 00:44:49 · 1144 阅读 · 0 评论 -
golang将pkcs1格式的公钥转换为pkcs8格式的公钥
前言在工作中遇到golang编写的sdk作为客户端,java语言编写程序作为服务器端的情况,需要使用go生成一个RSA公钥发送给服务器端,此公钥用于加密某些消息,使用的是RSAOAEP的相关算法,该具体算法包含了两次哈希函数,建议都采用sha256作为哈希的函数。具体互通方法我会在后续博客中更新。此文主要介绍将pkcs1格式的公钥转成pkcs8格式公钥的方法。密钥格式下表为常见的密码学术语:TermDefinitionPKIPublic Key Cryptography. Pu原创 2020-12-23 00:03:56 · 1977 阅读 · 3 评论 -
Go语言实现装饰者模式
装饰者模式简介类图代码实现总结简介装饰着模式是这样的一种模式,即在原有类的基础上进行装饰,然后添加新的功能模式,比如一家咖啡连锁店卖咖啡,可能需要按照顾客的要求进行个性化配置,需要添加多种原料并计算价格。类图我们构造的类图如下所示:这里是个简单的装饰器模型,利用组合和实现的联系,以要添加的原料作为主对象完成对深色烘培咖啡的加料和价格的计算,其中摩卡和牛奶对象被称为装饰者。代码实现package mainimport "fmt"type component interface {原创 2020-11-14 01:18:01 · 216 阅读 · 0 评论 -
观察者模式Go语言实现
观察者模型观察者模式类图模式实例代码总结观察者模式观察者模式是一种行为设计模式,目的在于定义一种订阅机制,在对象事件发生时通知“观察”该对象的对象。例如:商店和顾客,顾客要购买新款手机但未到货,顾客在商店进行了订阅,只要商店新款手机到货,就立即发送短信通知顾客。这里顾客是观察者(Observer),商店被观察者(subject)。类图模式对应类图可用如下表示:该设计模式共有四类角色:1、抽象主题(Subject):该角色可以增加或者删除观察者对象。2、具体发布者(ConcreteSubjec原创 2020-11-13 22:43:22 · 176 阅读 · 0 评论 -
在Goland中测试go文件-构建http请求
前置条件go语言所包含的测试框架gotest让开发人员可以很方便的测试构建好的代码。这个测试框架以Mainstart方法作为测试函数的入口,利用M.Run方法作为实际执行测试的函数,并在tRunner方法中启动一个goroutine,执行目标测试文件里包含的测试函数。详见博客link。实验目标针对go文件中的单个方法,构建一个测试文件,完成单元测试。 func (client *StsClient) execute(req *http.Request, output interface{},)原创 2020-09-03 15:16:37 · 980 阅读 · 0 评论