(13)go-micro微服务公用函数开发

目录
  • 一 前言
  • 二 SwapTo 通过json tag 进行结构体赋值
  • 三 UserForResponse 类型转化
  • 四 最后

一 前言

  • 在utils目录中新建一个swap.go文件

  • swap.go中主要存放一些可以使用到的一些公共函数

  • 导包:

import (
   "account/domain/model"
   . "account/proto/account"
   "encoding/json"
   "google.golang.org/protobuf/types/known/timestamppb"
)

二 SwapTo 通过json tag 进行结构体赋值

  • 此函数主要用于将客户端传来的数据解析到结构体中
  • 还用于将数据解析传给客户端
// SwapTo 通过json tag 进行结构体赋值
func SwapTo(request, category interface{}) (err error) {
   dataByte, err := json.Marshal(request)
   if err != nil {
      return
   }
   return json.Unmarshal(dataByte, category)
}

三 UserForResponse 类型转化

  • 此函数用于将数据库查出的数据赋值给Response传给客户端
// UserForResponse 类型转化
func UserForResponse(response *UserInfoResponse, userModel *model.User) *UserInfoResponse {
   response.UserId = userModel.ID
   response.Username = userModel.UserName
   response.FirstName = userModel.FirstName
   response.LastName = userModel.LastName
   response.Email = userModel.Email
   response.IsActive = userModel.IsActive
   response.Permission = userModel.Permission
   response.CreateDate = timestamppb.New(userModel.CreateDate)
   response.UpdateDate = timestamppb.New(userModel.UpdateDate)
   return response
}

四 最后

  • 至此,go-micro微服务公用函数开发工作就正式完成。

  • 接下来就开始服务层Handle层的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击 夏沫の梦学习交流

本文转载于网络 如有侵权请联系删除

相关文章

  • JAVA HD japan_E3X-HD光纤放大器_欧姆龙继电器_欧姆龙PLC_欧姆龙接近开关「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。欧姆龙E3X-HD光纤放大器特点免维护免维护,长期稳定检测【智能功率控制】针对LED常年老化造成的投光量降低及脏污等导致的受光量降低现象,通过智能功率控制功能,自动感知并保持最佳检测状态。环境适应性强,免维护。想要检测各种颜色,大小的工件在所有检测场合中游刃有余搭载发光元件GIGARAYⅡE3X-HD特点6同级最高水准的GIGARAYII的压倒性大功率,黑橡胶等低反射率检测及大型被检测体,以及以往检测不稳定的工件也能稳定检测。零位线连接的光线放大器,大幅削减配线工时可从外部变更设定,大幅削减设定工时可连接多台光纤放大器(E3X-CRT:16台、E3X-CRT:30台)欧姆龙E3X-HD光纤放大器型号种类形状连接方式型号NPN输出PNP输出标准型导线引出型(2m)E3X-HD112ME3X-HD412M省配线接插件型E3X-HD6E3X-HD8M8接插件型E3X-HD14E3X-HD44通信单元连接型通信单元用接插件型E3X-HD0欧姆龙E3X-HD光纤放大器省配线接插件(另售)(省配线接插件型必需)放大器不附带,请务必订购。种类形状导线长芯线数型

  • Python多线程多进程实例对比解析

    多线程适合于多io操作多进程适合于耗cpu(计算)的操作#多进程编程 #耗cpu的操作,用多进程编程,对于io操作来说,使用多线程编程 importtime fromconcurrent.futuresimportThreadPoolExecutor,as_completed fromconcurrent.futuresimportProcessPoolExecutor deffib(n): ifn<=2: return1 returnfib(n-2)+fib(n-1) if__name__=='__main__': #1.对于耗cpu操作,多进程优于多线程 #withThreadPoolExecutor(3)asexecutor: #all_task=[executor.submit(fib,num)fornuminrange(25,35)] #start_time=time.time() #forfutureinas_completed(all_task): #data=future.result() #print(data) #print(&q

  • 完美解决jupyter由于无法import新包的问题

    jupyter因为其在python框架下具有一个较为人性化的设计,从而在数据分析,python教学,以及python的快速学习中大放光彩.jupyter作为一个类似于spyder的一种编译器,其美观实用,而且还易于写博客吸引我.但是由于在jupyter模式下写代码的时候,会发现通过pipinstallpackage命令行安装package完成之后,无法在jupyter模式下importpackage,这点一直很困惑,进过百般google,还是找不到原因,或者说大家好像根本觉得这个不是事,因此,我在这里先写个备忘,以免以后忘了jupyter模式下实用的python编译路径与其他模式下的python编译路径是不一样的在jupyter模式下,使用sys包的自省模式,找到自己的编译路径….(找了半天,发现有这个东西)[1]importsys[2]sys.path['', '/home/zhangll/anaconda3/envs/ipykernel_py3/lib/python36.zip', '/home/zhangll/anaconda3/

  • TypeScript 类型系统

    ❝这是脑洞前端第「102」篇原创文章TypeScript的学习资料非常多,其中也不乏很多优秀的文章和教程。但是目前为止没有一个我特别满意的。原因有: 它们大多数没有一个清晰的主线,而是按照API组织章节的,内容在「逻辑上」比较零散。大多是“讲是什么,怎么用“,而不是”讲为什么,讲原理“。大多数内容比较枯燥,趣味性比较低。都是干巴巴的文字,没有图片,缺乏能够引起强烈共鸣的例子。因此我的想法是做一套不同市面上大多数的TypeScript学习教程。以人类认知的角度思考问题,学习TypeScript,通过通俗易懂的例子和图片来帮助大家建立TypeScript世界观。而本篇文章则是这个系列的开篇。系列安排:上帝视角看TypeScript[1](已发布)TypeScript类型系统(就是本文)types和@types是什么?你不知道的TypeScript泛型(万字长文,建议收藏)[2](已发布)TypeScript配置文件该怎么写?TypeScript是如何与React,Vue,Webpack集成的?TypeScript练习题❝目录将来可能会有所调整。 ❞注意,我的系列文章基本不会讲API,因此需

  • CVE-2020-1938 Tomcat 文件读取/包含漏洞复现

    0X1漏洞概述日前,长亭科技安全研究人员全球首次发现了一个存在于流行服务器Tomcat中的文件读取/包含漏洞,并第一时间提交厂商修复。2月14日,ApacheTomcat官方发布安全更新版本,修复漏洞。2月20日,国家信息安全漏洞共享平台(CNVD)发布安全公告,该漏洞综合评级为高危,漏洞编号为CNVD-2020-10487,CVE编号CVE-2020-1938。漏洞影响范围包括ApacheTomcat6 ApacheTomcat7<7.0.100 ApacheTomcat8<8.5.51 ApacheTomcat9<9.0.31复制0X2环境搭建在官方网站上下载源码 http://archive.apache.org/dist/tomcat/ https://github.com/apache/tomcat/releases复制下载完成之后,放置在任意目录下,并安装好Java环境,这里不在赘述。 配置完成之后,启动服务浏览器访问环境搭建完成。0X3漏洞分析Tomcat服务器通过Connector连接器组件与客户程序建立连接,“连接器”表示接收请求并返回响应的端点。即

  • Git使用技巧(三)– 通过GIT提交查询日志

    通常我们查看git日志,会直接使用:gitlog复制这样我们会得到所用当前项目中所有git账户提交的日志内容、日期等信息。 同时我们也可以通过某个git账户来查看日志:gitlog--author用户名复制也可以通过某个文件进行日志的查询:gitlogpath/filename复制这样我们就可以获得某个文件相关的提交日志。

  • 数据结构 | 每日一练(60)

    数据结构合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下——老子1每日一练1.两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列。正确答案ps:||代表注释1.[题目分析]本题实质上是一个模式匹配问题,这里匹配的元素是整数而不是字符。因两整数序列已存入两个链表中,操作从两链表的第一个结点开始,若对应数据相等,则后移指针;若对应数据不等,则A链表从上次开始比较结点的后继开始,B链表仍从第一结点开始比较,直到B链表到尾表示匹配成功。A链表到尾B链表未到尾表示失败。操作中应记住A链表每次的开始结点,以便下趟匹配时好从其后继开始。intPattern(LinkedListA,B)∥A和B分别是数据域为整数的单链表,本算法判断B是否是A的子序列。如是,返回1;否则,返回0表示失败。{p=A;∥p为A链表的工作指针,本题假定A和B均无头结点。pre=p;∥pre记住每趟比较中A链表的开始结点。q=B;∥q是B链表的工作指针。while(p&&q)if(p->data==q-&g

  • VC++ IPv6的支持

    修改地址结构WindowsSocket2针对Ipv6的官方描述根据微软官方的说法,要做到支持Ipv6首先要做的就是将原来的SOCKADDR_IN等地址结构替换为SOCKADDR_STORAGE该结构的定义如下:typedefstructsockaddr_storage{ shortss_family; char__ss_pad1[_SS_PAD1SIZE]; __int64__ss_align; char__ss_pad2[_SS_PAD2SIZE]; }SOCKADDR_STORAGE,*PSOCKADDR_STORAGE;复制ss_family:代表的是地址家族,IP协议一般是AF_INET,但是如果是IPV6的地址这个参数需要设置为AF_INET6。后面的成员都是作为保留字段,或者说作为填充结构大小的字段,这个结构兼容了IPV6与IPV4的地址结构,跟以前的SOCKADDR_IN结构不同,我们现在不能直接从SOCKADDR_STORAGE结构中获取IP地址了。也没有办法直接往结构中填写IP地址。使用兼容函数除了地址结构的改变,还需要改变某些函数,有的函数是只支持Ipv4的,我们需

  • 极客周刊丨巴菲特评BTC价值为0,微信身份证上线,人民网投资电竞...

    巴菲特首次评价BTC:价值为零如果说在互联网金融的圈子里最热门的话题是什么,我想除了“比特币”之外,没有什么能得此殊荣了。 在前不久一段很长的时间里,比特币的价格一直是水涨船高,价格如火箭般飙升,不过在这几天里,价格又如滑铁卢般狂跌,从1.9万美元的高价在几天之内跌破1.4万美元大关。不过虽然跌幅很大,但也无法阻止很多圈内朋友对比特币行情的看好,轻则不动,重则低价接盘,各大交易平台上可谓炒得火热。不过和这些人不同,世界著名的股神巴菲特一直就对“比特币”不怎么看好,最近更是在公开场合首次谈及“比特币”。在他看来,目前被币界人士炒得火热的“比特币”毫无价值。他表示:“我不能对比特币估值,因为它不是一种能产生价值的资产。”我想,股神都这么说了,也许很多比特币玩家会在近期大量清仓自己的比特币,比特币的行情也许会继续下跌,跌破一万美元大概只是时间问题吧。“微信身份证”在广东试点试行如果说之前出门还得带钱包是因为需要携带身份证,那么这次微信推出的“微信身份证”业务,绝对可以让你有“一机在手,天下我有”的想法。 12月25日,由广州市公安局南沙区分局、腾讯、建设银行等10余家单位发起的“微警云联盟”

  • Hue中无法删除用户异常分析

    温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。Fayson的github:https://github.com/fayson/cdhproject提示:代码块部分可以左右滑动查看噢1.问题描述在Hue中使用管理员安装了Solr的示例后,在用户管理界面无法正常删除用户,报如下异常:Processingexception:(1146,"Table'hue.search_collection'doesn'texist"):Traceback(mostrecentcalllast): File"/opt/cloudera/parcels/CDH-5.13.1-1.cdh5.13.1.p0.2/lib/hue/build/env/lib/python2.7/site-packages/Django-1.6.10-py2.7.egg/django/core/handlers/base.py",line112,inget_response response=wrapped_callback(request,*cal

  • 腾讯荣获OSCAR尖峰开源企业奖 参与国内首个开源治理白皮书编写

    3月21日至22日,中国云计算开源领域最专业、最高端、最具规模的行业盛会"OSCAR云计算开源产业大会"在国家会议中心召开,该会议由工业和信息化部指导、中国信息通信研究院主办。腾讯凭借强大技术实力和在开源社区做出的卓越贡献,荣获OSCAR尖峰开源技术研发创新奖和OSCAR尖峰开源企业奖。同时,基于对行业的了解和腾讯参与开源的模式的创新,腾讯参与编写的国内首个《开源治理白皮书》,于大会现场发布。 腾讯副总裁曾宇出席本次大会并介绍了腾讯开源的理念及开源的价值:“开源代表未来的一种技术发展途径,技术发展必须站在前人基础上不断往前迭代,而不是反复造轮子。一个好的开源项目会吸引到众多参与者,在输出自己能力同时不断吸收这个社区的营养,它会长得越来越健壮,大家也会对它有更好的发展。整个产业在开源技术支持下,会大大缩短创新周期。我很期待在开源不断扩大的情况下,更多有想法的人,更多初创的企业,可以得到成功。我相信这就是开源所创造的价值。”对于国内开源生态建设,腾讯开源负责人许勇也在会上提出几点思考和建议:“第一,开源生态中的各角色都很重要,包括政府,企业,开源贡献者和使用者,大家各司

  • Linux操作系统启动流程梳理

    接触linux系统运维已经好几年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程: 一般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下几步: 1)开机BIOS自检,加载硬盘。 2)读取MBR,进行MBR引导。 3)grub引导菜单(BootLoader)。 4)加载内核kernel。 5)启动init进程,依据inittab文件设定运行级别 6)init进程,执行rc.sysinit文件。 7)启动内核模块,执行不同级别的脚本程序。 8)执行/etc/rc.d/rc.local 9)启动mingetty,进入系统登陆界面。linux系统安装时,如果要想设置开启启动项,可以: 开机到BIOS提醒界面,按键F11(Dell服务器的做法)进入BIOS设置BOOTMENU,继而设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。下面就linux操作系统的启动过程做一详细解析记录:加载内核 操作系统接管硬件以后,首先读入/boot目录下的内核文件。[root@bastion-IDC~]#ll/boot/ total

  • 开源API文档工具- swagger2 与 smart-doc 比较 与 使用

    https://blog.csdn.net/geekswg/article/details/107097313 Ihaveadream:SandybeachB-J-N.

  • Http中Get和Post的区别

      Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。   1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。   (1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。   *注意:这里安全的含义仅仅是指是非修改信息。   (2).幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下幂等这个概念:   幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。   幂等有一下几种定义:   对于单目运算,如果一个运算对于在范围内的所有

  • py--操作Redis

    一、redis   redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。   Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便,Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Red

  • RPC源码实现&amp;解析 java

    RPC源码实现&解析 写在前面:最近复习的时候,RPC协议不咋清楚,就去学习了下,看了博客还是不太懂,就跟着这一篇手动实现了下,在此记录下过程 实现过程 原理讲解: RPC的全称是RemoteProducedureCall-->远程过程调用,通俗的来讲就是客户端调用服务端的方法,并获取返回的结果 如图 不通过http(在应用层,很慢),使用socket编程实现 然后服务端和客户端设计如下: 服务端: 注册中心,维护着注册的方法,需要提供方法名和需要的参数才能调用-->反射机制 服务器:产生一个监听的服务器,有请求打过来就从线程池里抓线程去执行(非阻塞式) 方法接口&实现类:服务器端需要有可能被调用的方法的具体实现 客户端 客户端实体(Socket实现,通过Scoket通信来实现参数传送以及服务器运行结果的获取) 方法接口:其实也不需要接口,服务器上维护的方法池是kv结构的,k的类型是String,所以只需要接口的名字;本文用类的反射机制直接获取Name(这里有疑问,需要进一步查证,因为存在一个调用的过程)-->//20221013

  • cocos2d-x 扩展 修改 备注

    1、引擎源码相关扩展     说明:class/cellsExt下的全部文件为扩展文件,有auto字样的文件为生成文件,*.pkg文件为自动生成文件的接口配置档,参考tolua++,源文件中代在[solyess]字样的全为对引擎源码修改标注。          a、CellsGameFrameworkGLView适配器,用于处理GLView集成       b、extentions为功能性的扩展         1)Compress文件压缩解压相关         2)Devices获取设备相关信息         3)Express字符串表达式解析   &nbs

  • (转)Android开发:性能最佳实践-管理应用内存

    翻自:http://developer.android.com/training/articles/memory.html在任何软件开发环境中,RAM都是宝贵的资源,但在移动操作系统中更加珍贵。尽管Dalvik虚拟机有垃圾回收机制,也不要忽略分配和释放内存。为了让GC回收内存,你要避免内存泄漏(通常因为全局成员变量引用对象引起),并且在适当的时候释放对象引用。对大多数app来说,垃圾回收负责剩下的:当相应的对象离开app活动线程范围时,系统回收内存分配。为了让GC回收内存,你要避免内存泄漏(通常因为全局成员变量引用对象引起),并且在适当的时候释放对象引用。对大多数app来说,垃圾回收负责剩下的:当相应的对象离开app活动线程范围时,系统回收内存分配。这篇文档解释了Android如何管理app处理内存分配,你如何主动减少内存占用。更多用java编程时清理资源的信息,可以参考关于管理资源引用的文档和书籍。如果你在找分析应用的内存占用的信息,阅读:InvestigatingYourRAMUsage以后会翻译 Android如何管理内存 Android不提供交换空间,而是使用页和内存映射来管理

  • 【luogu 3811】【模板】乘法逆元

    题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元。 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元。 输入输出样例 输入样例#1: 1013复制 输出样例#1: 1 7 9 10 8 11 2 5 3 4复制 说明 1≤n≤3×10​6​​,n<p<20000528 输入保证 pp 为质数。 费马小定理: 1#include<cstdio> 2#include<cstring> 3#include<iostream> 4#include<algorithm> 5#definelllonglong 6usingnamespacestd; 7intn,p; 8intfast(lla,llb){ 9llans=1; 10while(b){ 11if(b&1)ans=(ans*a)%p; 12a=(a*a)%p; 13b>>=1; 14} 15returnans; 16} 17intmain(){ 18sca

  • 单元测试、集成测试、系统测试

    一、测试方法不同 1、单元测试属于白盒测试范畴。 2、集成测试属于灰盒测试范畴。 3、系统测试属于黑盒测试范畴。 二、考察范围不同 1、单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等。 2、集成测试主要测试模块之间的接口和接口数据传递关系,以及模块组合后的整体功能。 3、系统测试主要测试整个系统相对于需求的符合度。 三、评估基准不同 1、单元测试的评估基准主要是逻辑覆盖率。 2、集成测试的评估基准主要是接口覆盖率。 3、系统测试的评估基准主要是测试用例对需求规格的覆盖率。 分享促进成长

  • JavaScript编码规范

    1前言 JavaScript在百度一直有着广泛的应用,特别是在浏览器端的行为管理。本文档的目标是使JavaScript代码风格保持一致,容易被理解和被维护。 虽然本文档是针对JavaScript设计的,但是在使用各种JavaScript的预编译语言时(如TypeScript等)时,适用的部分也应尽量遵循本文档的约定。 2代码风格 2.1文件 [建议]JavaScript文件使用无 BOM 的 UTF-8 编码。 解释: UTF-8编码具有更广泛的适应性。BOM在使用程序或工具处理文件时可能造成不必要的干扰。 [建议]在文件结尾处,保留一个空行。 2.2结构 2.2.1缩进 [强制]使用 4 个空格做为一个缩进层级,不允许使用 2 个空格或 tab 字符。 [强制] switch 下的 case 和 default 必须增加一个缩进层级。 示例: //good switch(variable){ case'1': //do..

相关推荐

推荐阅读