数据类型
文章平均质量分 57
gcglhd
这个作者很懒,什么都没留下…
展开
-
GO之面向对象编程注意事项是否引用类型做参数
背景: 面向对象编程时当前开发的设计思想,虽然Go语言并不是面向对象编程语言,但是可以通过编程设计实现面向对象的编程效果。下面不是讲解如何设计出面向对象编程,而是去说明一下,如何选择使用指针类型还是普通数据类型进行函数实现,了解本质去选择。1. 采用的是普通数据类型:type User struct { Name string Age int}type A interface { Hello()}// 采用的是普通数据类型func (n User) Hell...原创 2021-09-18 14:47:12 · 299 阅读 · 0 评论 -
不区分语言开发工具(缓存的设计探讨,ps查看进程内存,cpu,堆栈内存资源那些事,HTTP和WebSocket,TCP那些事,GraphQL的简介,prometheus+grafana(通用做法))
1. 缓存的设计探讨(很有启发的博客)https://blog.csdn.net/weixin_34124651/article/details/88768849原创 2021-07-07 14:08:23 · 91 阅读 · 0 评论 -
Go项目中调用C库函数
背景: 在很多场景下,在Go的程序中需要调用c函数或者是用c编写的库(底层驱动,算法等,不想用Go语言再去造一遍轮子,复用现有的c库)。我们在使用Golang开发项目或系统的时候难免会遇到Go和C语言混合编程,这时很多人都会选择使用cgo。然后近期有项目需要在Go项目中调用设备模块同事写的C库函数,所以经过查询资料进行一下总结。1. 环境的依赖安装:https://blog.csdn.net/u012278016/article/details/1011014862. 实例...原创 2021-07-01 10:27:03 · 1317 阅读 · 0 评论 -
Go之工具3(数组追加,go版本的升级,go限流设计)
1. Go的数组追加:根据需求存在两种的追加方式:A :采用的是单个元素的追加,这个也是比较常见的需求:原创 2021-06-15 13:53:37 · 836 阅读 · 0 评论 -
Go之Json的转换(json官方包和jsoniter)
背景: 由于项目中大量使用Json的转换工作,但是发现官方包在大量的转换过程中效率是很低的,下面以实际情况进行验证:1. json官方包type NumberRange struct { Min int `json:"min"` Max int `json:"max"`}func Benchmark1Pro1(b *testing.B) { s := "{\n \"deviceDataType\":\"int\",\n \"body\":{\n ...原创 2021-05-20 10:14:04 · 1246 阅读 · 0 评论 -
SpringBoot之对外Health心跳校验接口
背景: 当前因为业务需求,对外需要暴露一个Health接口,用于检测当前的服务是否挂掉,然后通知相关项目负责人员,进行及时的补救,但是因为只是暴露了一个接口,没有相关的安全校验,存在安全漏洞,为了防止不能让任何人都可以成功访问该接口,就需要进行相关的处理,这里采用的是一个比较成熟的wxpay的依赖包校验函数。具体如下:1. Maven依赖 <dependency> <groupId>com.github.w...原创 2021-03-20 15:14:51 · 3284 阅读 · 2 评论 -
Java工具集2(在线获取Maven库,AES加解密,线程池的使用,零拷贝,JVM调优,git拉取项目无法启动,SpringBoot环境配置)
1. Maven库的使用: 1)在开发中,如果遇到一个非Java的JDK系统库,而且我们使用的使用Spring的方式进行开发,那么我们就需要Maven的相关信息了;当然第一步是配置Maven,一般公司都有自己的Maven库,所以要使用公司提供的Maven配置文件,然后就是在IDEA中进行配置一下相关的设置,如下: 2)以上配置完成后,我们就可以愉快的进行Maven的使用了,例如我们要使用json工具包:通过百度了解到 fastjson是最快的转Json工具,但是他的依赖包...原创 2021-03-02 16:31:27 · 416 阅读 · 0 评论 -
Go工具集-2(定时任务,TCP客户端,RPC基本实现,PProf 调优工具,map转Struct,以及Json转Struct工具包,二进制的位处理)
1.golang 定时任务time.Sleep和time.Tick实现结果比较https://blog.csdn.net/zkt286468541/article/details/894033062. GoLand开发一个性能不错的TCP客户端https://blog.csdn.net/niyuelin1990/article/details/77868574原创 2021-02-24 16:18:58 · 201 阅读 · 0 评论 -
Java工具集1(深浅拷贝,抽象类和接口,常量创建,ResponseEntity,回调实现线程数据传输,SpringBoot配置文件,线程池,同步队列,netty,ConcurrentHashMap)
1.深浅拷贝问题:在开发中遇到一个问题就是关于拷贝的,通过学习,发现,拷贝分为深浅两种类型(主要是针对引用类型),具体的学习网址如下所示:深浅拷贝只是针对Array与Object这样的引用数据类型。简单来说,浅拷贝只是拷贝了它在栈中存储的指针,它们指向的都是同一个堆内存地址,所以浅拷贝在某些情况会造成改变数据后导致别的另一份数据也同步被改变的情况;而深拷贝是直接将堆内存中存储的数据直接复制一份,不会有浅拷贝互相影响的问题。Object.assign() 实现的是浅拷贝。拷贝对象中的属性如果...原创 2020-12-10 09:51:11 · 213 阅读 · 0 评论 -
不区分语言开发工具2(Mysql表名大小写那些事,检测IP是否可用,MongoDB的安装,阿里云OSS,手机短信验证码,Goole插件下载,mysql联合索引,查看Docker中项目日志)
1. Mysql表名大小写那些事: 由于最近在做项目的时候开发环境是Windows,但是后面部署的环境是Linux,之前开发后执行的服务一点没有问题,但是部署后发现,sql语句报错:具体就是表名找不到,最后发现是Mysql自带的大小写表名敏感问题,在Windows环境下默认是大小写不区分:但是Linux环境下默认是区分大小写的,所以这个就会造成表查找不到的问题。具体查看是否敏感的方式:具体的分析:lower_case_table_names = 0表示大小写敏感,可...原创 2021-02-06 16:49:46 · 109 阅读 · 0 评论 -
Java的Redis如何选择
背景:(使用Jedis和RedisTemplate如何选择) SpringBoot自带redis处理方式,那就是RedisTemplate,可以快速上手,只需要简单的配置和注解就可以了,但是它的底层原理使用的还是JedisAPI,并且Jedis是Redis官方提供的工具,在性能上面‘Jedis比RedisTemplate要快很多,但是如果项目中是Cache和Redis一起使用的话,那就是建议直接使用SpringBoot自带的RedisTemplate方式,因为这种方式在Spring...原创 2021-01-28 09:22:49 · 95 阅读 · 0 评论 -
SpringBoot设计对象池的那些事commons-pool2工具(注意事项)
背景: 现在开发过程中需要一个需求,那就是使用SpringBoot采用的是原生的单例模式进行设计,哪个类需要复用就直接将其注解注入容器,下次使用的时候直接进行@Autowired注入就可以了,很是方便。但是这种单例模式并不是适合所有的场景,如果该类涉及到全局变量或者其他的可能调用修改一个地方而影响其他地方使用的时候,就非常的不安全,还有就是如果要保持tcp多个连接提高性能的话也是需要进行优化的,下面我们就针对这个问题,可以采用对象池的方式进行优化,也就是我们的处理连接可以有多个连接同...原创 2021-01-22 11:47:33 · 1543 阅读 · 0 评论 -
Go-核心设计-sync.map实现并发安全使用、类型断言的应用
1.系统自带map和sync.Map的由来 map的使用在GO语言中非常的实用,但是系统自带的map直接使用,如果不涉及到并发读写业务,性能很强大,但是一旦出现并发读写的时候,就不建议使用,除非自己手动的进行加锁控制,不过性能不高,所以go推出了sync.map可以解决这种并发读写的问题。具体的使用:方式很简单: var sm sync.Map //存储Map sm.Store(u.age, u) // 获取数据...原创 2021-01-08 15:22:30 · 550 阅读 · 0 评论 -
Go之按照模板实现文件的创建和更新实例(一般用于自动化代码实现)
背景: 近期学习了一下Go-Admin开源项目,里面的亮点就是可以自动配置化实现数据库的增删改查工作,然后自己看了一下源码其实实现原理很简单,就是采用IO流实现文件的创建和更新工作。里面主要就是根据模板语言的数据交互,这样就会实现按照不同的数据生成不同的文件:下面以一个很简单的实例进行解析实现的原理:步骤: 首先就是要撰写模板文件:文件名为 test1.template ,模板语言就是采用{{.}}的形式进行数据的交互,后台数据要传输的类型为map类型。pa...原创 2020-12-07 11:17:13 · 930 阅读 · 0 评论 -
Go语言之变量区分以及new()和make()的差异
背景: 关于Go语言的变量主要分为值类型和引用类型两种:1. Go语言中的值类型和引用类型值类型:int,float,bool,string,struct和数组(数组要特别注意,别搞混了)变量直接存储值,分配栈区的内存空间,这些变量所占据的空间在函数被调用完后会自动释放。引用类型:slice,map,chan和值类型对应的指针变量存储的是一个地址(或者理解为指针),指针指向内存中真正存储数据的首地址。内存通常在堆上分配,通过GC回收。注意: ...原创 2020-12-03 10:55:57 · 216 阅读 · 0 评论 -
JWT后台实现旧Token失效的问题(添加黑名单方式)
背景: 在开发设计中涉及到JWT的校验问题,但是发现一个漏洞同时也是JWT设计的理念,那就是后端不进行相关的Token存储,后端只进行相关的Token验证,同时还有就是token的生成和刷新,那么问题来了,那就是后端校验不会知道是否是最新的token也就是说,可能已经刷新过了token,但是发现旧的token还没过期,这个时候还可以进行使用,在我看来还是有安全风险的,我想要的设计是用户退出登录或者刷新Token后,旧的token要立即失效,这样才够安全,不然一旦被黑客拿到旧的token,那么它就可以..原创 2020-11-30 15:22:59 · 5962 阅读 · 0 评论 -
不区分语言开发工具1(服务压力测试,跨域问题解决,Redis进行密码的设置,设计模式,搭建FTP局域网服务,redis热key,redis哨兵,VueRouter模式)
1. Apache的ab工具:(压测的具体使用,可以实现添加参数进行相关的测试)压测的概念: 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。 计算公式:总请求数 / 处理完成这些请求数所花费的时间,即 Request per second = Complete requests / Time taken for tests原创 2020-11-28 16:26:27 · 159 阅读 · 0 评论 -
Go之panic异常捕获处理
背景: 在项目开发中我们经常会遇到一个问题那就是,程序处理异常,但是我们捕获到异常又不想终止整个项目程序,简单点说就是一个业务出现问题,不想影响其他的业务。下面具体参考相关的代码:业务代码1连接数据库操作:func PanicTest2() { fmt.Println("测试捕获异常!") db, err := gorm.Open("mysql", "root:###@/gcg?charset=utf8&parseTime=True&loc=Loca...原创 2020-11-26 16:26:24 · 4138 阅读 · 0 评论 -
SpringBoot热部署配置
背景: 因为开发过程中会遇到进场的调试程序代码,进行小部分的修改,但是每次都要自己进行重新启动项目,太麻烦,这里就可以用到SpringBoot自带的热部署机制进行相关的配置,和我之前使用的Go框架Beego差不多都是只做一点点的修改就可以实现代码的重新编译运行。相关的Maven依赖: <!-- 启动热部署--> <dependency> <groupId>org.springfra...原创 2020-11-26 09:20:58 · 2824 阅读 · 0 评论 -
Go之文件夹路径生成(先判断后生成)
背景: 自己在开发时候使用的Log4go日志包的时候,发现在指定日志文件夹路径的时候需要先确定有该文件夹,否则会进行报错,所以我们就需要提前进行相关的文件夹创建,下面就是一个小的方案,实现运行程序的时候先进行判断,是否需要进行相关的文件夹创建,如果查询没有该文件夹就会进行相关的创建,否则就不创建:具体的步骤:首先判断文件夹是否存在的方法: 如果存在就会返回true,否则返回false//判断文件夹是否存在func PathExists(path string) (bo...原创 2020-11-18 09:21:27 · 529 阅读 · 0 评论 -
Go之Gorm连接池的配置,解决更新空值问题
背景: 在开发过程中遇到一个瓶颈那就是,数据库的连接池设置,有两个需求第一个就是大量用户同时并发操作数据库的时候,会出现连接超时问题。其次就是用户少量的时候如何实现快速的实现数据的相关操作:针对这两个问题,我们需要进行相关的数据库的配置。首先我们采用的是Go语言开发,然后使用的就是Gorm包进行相关的数据库操作。1. Grom相关的学习文档如下:http://gorm.book.jasperxu.com/https://gorm.io/docs/generic_interf...原创 2020-11-16 14:06:28 · 24310 阅读 · 3 评论 -
Gin中Next和Abort的理解:(挂起和终止运行)
背景: 在项目开发中,我们会遇到一些需求,比如开发中我们可能在服务器与客户端交互的时候,通过中间件验证客户的合法性,如果合法则正常执行相关的操作,但是不合法的话,我们需要终止本次的请求。那么针对这个需求我们采用GO语言中的Web框架Gin进行简单的说明。首先Gin实现上面的功能就是通过Next和Abort这两个函数。next()顾名思义就是挂起继续向下走,然后执行完成下面的函数,会反过来最后执行该中间件abort()顾名思义就是终止的意思,也就是说执行该函数,会终止后面所有的...原创 2020-11-14 15:52:48 · 6234 阅读 · 0 评论 -
Go之JWT工具的开发使用(基于Gin框架)
背景: 开发中可能会存在客户端与服务器交互过程中数据安全问题,现在比较常见的方式有文件的签名校验,方式有很多,但是我感觉针对不同的业务需求我们用不同的加密校验方式:比如Oauth2:该方式适合第三方授权获取用户信息的业务需求,原理认证的Token存储在服务器端,然后用户根据服务器分配的ClientId和CllientSecret进行获取对应的Token信息,然后每次访问服务器将Token放在请求头,服务器验证是否有效,如果有效则返回对应的请求信息。 JWT:是一种...原创 2020-11-13 10:21:46 · 1368 阅读 · 0 评论 -
Go之Cobra的命令行应用开发使用
环境搭建请参照如下博客: https://blog.csdn.net/gcglhd/article/details/109572324具体的开发设计使用:原创 2020-11-10 14:04:40 · 665 阅读 · 0 评论 -
Go之Cobra的命令行应用开发环境搭建(里面的环境搭建方式可用于其他go get拉取下载失败的包安装)
背景: 在学习开源项目go-admin的时候,看到作者采用了cobra命令行包的形式进行相关的命令行操作,所以对此技术很感兴趣,通过百度才知道,该包的使用非常的广泛,包括现在比较火的Kubernetes和Docker里面都涉及到该技术的使用。Cobra项目的gitHub地址:https://github.com/spf13/cobra。首先就是开发前的环境搭建: 它类似于go,git等的命令,所以我们先安装一下它的命令行执行依赖包:https://g...原创 2020-11-09 11:40:29 · 868 阅读 · 2 评论 -
WebStom和Vscode前端编译器的插件配置安装
背景: 在开发前端项目的时候大佬介绍就是Vscode和Webstom这两种是比较火的编译器软件,所以我们下面就是介绍一下相关编译软件的插件安装,因为这些东西就是在开发前端的时候必须使用的插件,下面分别介绍吧相关链接都是可以行的,本人亲测效果很好。1. Webstom搭建Vue环境:https://blog.csdn.net/thumbs_up_sign_ygj/article/details/1049792722. Vscode搭建Vue环境:https://blog.cs...原创 2020-11-05 15:16:18 · 119 阅读 · 0 评论 -
SpringBoot之FastJson实现封装的Json数据指定字段属性隐藏小工具
背景: 在开发项目中发现有个需求,那就是传输的Json数据中在字段值为空或者int属性值为0的时候自动实现该字段值的隐藏,然后传输,便于接收服务的处理,我们将会采用FastJson来实现该功能。步骤:首先:测试代码如下所示,核心部分就是在需要过滤字段的地方进行一下判断。apply函数参数分别表示对象,要过滤的属性字段,以及字段的值。 @Test void test4() { Book book = new Book(); bo...原创 2020-11-04 18:23:27 · 1330 阅读 · 1 评论 -
Java之对象内属性值获取小工具
背景: 根据开发需求,需要对封装后的对象属性进行判断,同时也利于接收对象的时候进行属性的判断,以此来实现开发的需求。步骤: 首先是主要的功能函数撰写:其中GcgUtils就是我们的主要功能函数,fname : 为属性的名称ftype: 为属性的类型,就像代码中所写的,可以针对不同数据类型进行不同的业务处理。@Componentpublic class PropertyFilterImp implements PropertyFilter { pub...原创 2020-11-04 15:32:01 · 188 阅读 · 0 评论 -
Casbin权限管理的知识以及实例应用
背景: 针对应用中可能会存在权限的要求,就是存在不同的角色分别要有不同的权限。下面大概介绍一下相关的知识:学习网址:https://my.oschina.net/u/4314328/blog/3338677 (实例网址)https://casbin.org/docs/zh-CN/overview (API官网)1. 概念:Casbin 是一个强大的,开源的访问控制框架,权限管理机制支持多种访问控制模型; 并且支持多种编程语言;2.规则介绍:[req...原创 2020-11-02 15:21:45 · 2111 阅读 · 0 评论 -
SpringBoot/Go之Json传输过程中自动去除对象中未赋值的字段(Go语言的Json优化)
背景: 在开发过程中,我们需要传输一些Josn数据,但是在Json传输中,要求结构体或者对象中,为赋值的字段变量,自动的去除,便于接收端的处理。针对这个需求,一共有Java的开发需求同时也有Go的开发需求。一. SpringBoot的方案设计:首先我们要使用Json的Maven依赖,这里采用阿里的FastJson <!-- 该依赖是针对Json的处理,可以实现Object转Json,也可以实现Json转Object(主要是使用在HTTP接收请求的时...原创 2020-11-02 10:28:29 · 680 阅读 · 0 评论 -
GoLand编译器配置mod代理和gopath两种获取依赖包配置方式的比较
背景:1. 下载go依赖包可能被网络封锁,下载不了,所以需要配置国内代理:2. 项目中我发现之前使用的Beego框架可以正常的使用go工作目录,但是当我使用gin框架开发的时候发现问题,那就是已经有的包,显示找不到,会报错。配置ctrl+alt+s->Go->Go Modules(vgo)->设置proxy为https://goproxy.io/->点击Apply->重启GoLand即可具体的Proxy,可以根据具体的需求进行相关的配置,可能有其他的代.原创 2020-10-20 14:25:50 · 2128 阅读 · 0 评论 -
Go 和通道上手资源分享
背景:对于新手来说,go语言上手主要核心的管道和协程处理是最大的问题,也是核心问题:下面推荐的资源如下:https://gobyexample.com/channels https://tour.golang.org/concurrency/2 http://guzalexander.com/2013/12/06/golang-channels-tutorial.html https://www.golang-book.com/books/intro/10 https://www.goi原创 2020-10-19 11:19:08 · 58 阅读 · 0 评论 -
SpringBoot之@Autowired和static静态资源的那些事
Spring中@Autowired注解和静态方法关联应用一、业务场景首先我们的类对象在创建方法的时候如果使用static进行修饰,那么就可以实现可以在外部进行调用。如下所示如果没有static修饰,外部将不能使用该方法:public class GetToken { public static String Signature(String access_token, String timestamp) { //下面的"& timestamp"之间没有空格原创 2020-10-19 10:40:04 · 5326 阅读 · 0 评论 -
SpringBoot之打Jar包部署以及Linux下后台部署(以及外部配置文件的使用)
背景:首先因为项目需求需要打Jar在linux下运行,所以就需要了解如何打Jar。1. SpringBoot打Jar包:当上面执行完成会生成相关的Jar文件:最后执行:首先执行语句大家都比较熟悉,那就是: java -jar XXX.jar就可以执行了。但是有一点那就是我们在linux环境中都是需要后台启动运行,所以采用下面的shell脚本来执行。具体的运行如下:[root@edgeprod ~]# nohup ./run.sh &然后查看日志...原创 2020-10-19 09:41:03 · 941 阅读 · 0 评论 -
Java之参数传递(基本类型和引用类型)
背景:两类参数传递参数传递主要分为两种:一种是参数是基本类型,一种是参数为引用类型。基本数据类型这个相信大家都没什么问题,基本类型作为参数传递的时候是在一个方法栈中开辟了一块新内存,拷贝了原来的数据值,所以无论我们如何修改,原来的数据值不会受到任何影响。例如:public class Practice2 { public static void main(String[] args) { // TODO Auto-generated method stub int原创 2020-10-19 09:05:52 · 5488 阅读 · 0 评论