本发明涉及golang语言技术领域,具体涉及golang语言下静态资源打包方法及装置。
背景技术:
golang编译生成的可执行文件让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。
但是在web开发中往往有一些模板,如:配置文件、css、js、图片等其他类型的文件,这些文件被称为静态资源。静态资源是与golang可执行文件是相互独立的,部署的时候要另外考虑将这些文件部署到生产环境。如果我们把静态资源和golang执行文件打包成一个文件,就可以省去很多麻烦。
在现有技术中,打包静态资源时是一次性将所有文件全部顺序打包,而所有文件顺序进行编译速度慢,导致打包过程效率低下。
技术实现要素:
本发明要解决的技术问题在于,克服现有的技术的不足,提供golang语言下静态资源打包方法及装置,能够提高静态资源打包的效率。
为达到上述技术目的,一方面,本发明提供的golang语言下静态资源打包方法,所述方法包括:
压缩存放有静态资源的文件夹,得到至少一个原压缩文件;
将各原压缩文件转化为对应的golang压缩文件;
基于多线程工作模式,将每个golang压缩文件编译成对应的中间状态文件;
转化各中间状态文件,打包生成最终执行文件。
另一方面,本发明提供的golang语言下静态资源打包装置,所述方法包括:
压缩单元,用于压缩存放有静态资源的文件夹,得到至少一个原压缩文件;
转化单元,用于将各原压缩文件转化为对应的golang压缩文件;
编译单元,用于基于多线程工作模式,将每个golang压缩文件编译成对应的中间状态文件;
生成单元,用于转化各中间状态文件,打包生成最终执行文件。
在本发明中,首先将存放有静态资源的文件夹进行压缩,然后再转化为golang压缩文件。针对golang压缩文件使用多线程工作模式转换为中间状态文件,最后,将中间状态文件转化为最终执行文件。最终执行文件就能够在指定系统中进行部署。在上述过程中,多线程工作模式下,能够同时转换多个golang压缩文件,由此,相比与单线程工作模式中顺序处理,提高了处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例的方法流程示意图;
图2为本发明实施例的结构示意图;
图3为本发明实施例中静态资源在golang源代码文件呈现的序列图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明所述的golang语言下静态资源打包方法,包括:
101、压缩存放有静态资源的文件夹,得到至少一个原压缩文件;
102、将各原压缩文件转化为对应的golang压缩文件;
103、基于多线程工作模式,将每个golang压缩文件编译成对应的中间状态文件;
104、转化各中间状态文件,打包生成最终执行文件。
进一步地,所述压缩存放有静态资源的文件夹,得到至少一个原压缩文件,具体包括:
1011、将待压缩的静态资源文件存放至文件夹;
1012、压缩文件夹得到静态压缩文件;
1013、将大小大于预设字节数的静态压缩文件切割生成多个原压缩文件;每个原压缩文件的大小都小于预设字节数。
更进一步地,所述压缩文件夹得到静态压缩文件之后,还包括:
1014、将大小小于等于预设字节数的静态压缩文件作为对应的原压缩文件。
在上述技术方案中,所述将各原压缩文件转化为对应的golang压缩文件,具体包括:
1021、将各原压缩文件转换为对应的golang源代码文件;所述golang源代码文件中,静态资源被转化为十六进制形式;
1022、针对每个golang源代码文件,将其中十六进制形式静态资源的各“\x”字符串删除,得到对应的golang压缩文件。
优选地,所述转化各中间状态文件,打包生成最终执行文件,具体包括:
利用gobuild工具,编译各中间状态文件,从而打包生成最终执行文件。
如图2所示,本发明所述的golang语言下静态资源打包装置,包括:
压缩单元11,用于压缩存放有静态资源的文件夹,得到至少一个原压缩文件;
转化单元12,用于将各原压缩文件转化为对应的golang压缩文件;
编译单元13,用于基于多线程工作模式,将每个golang压缩文件编译成对应的中间状态文件;
生成单元14,用于转化各中间状态文件,打包生成最终执行文件。
进一步地,所述压缩单元11,具体用于:
将待压缩的静态资源文件存放至文件夹;
压缩文件夹得到静态压缩文件;
将大小大于预设字节数的静态压缩文件切割生成多个原压缩文件;每个原压缩文件的大小都小于预设字节数。
更进一步地,所述压缩单元11,还用于:
将大小小于等于预设字节数的静态压缩文件作为对应原压缩文件。
在上述技术方案中,所述转化单元12,具体用于:
将各原压缩文件转换为对应的golang源代码文件;所述golang源代码文件中,静态资源被转化为十六进制形式;
针对每个golang源代码文件,将其中十六进制形式静态资源的各“\x”字符串删除,得到对应的golang压缩文件。
优选地,所述生成单元14,具体用于:
利用gobuild工具,编译各中间状态文件,从而打包生成最终执行文件。
以下结合应用实例对本发明实施例上述技术方案进行详细说明:
在本实施例中文件名称以*.go结尾的文件我们称其为golang源代码文件,除此之外的文件都称为静态资源,例如:图片、配置文件等其它项目所依懒的资源。
本实施例以将静态资源a打包为例:
步骤1、将静态资源a存放至文件夹a;
步骤2、压缩文件夹a,得到静态压缩文件a1;
步骤3、判断静态压缩文件a1是否大于100mb(预设字节数):
若是,则将静态压缩文件a1切割为若干个原压缩文件a2,并保证每个原压缩文件a2的大小都小于100mb;
若否,则将静态压缩文件a1作为对应原压缩文件a2。
步骤4、将每个原压缩文件a2,利用开源工具转换为golang源代码文件a3(形式为*.go的文件);
如图3所示,在golang源代码文件a3中,静态资源a被转化为十六进制形式。
步骤5、将各golang源代码文件a3中的“\x”字符串删除,得到对应golang压缩文件a4;
在本实施例中,golang压缩文件a4的大小约为对应golang源代码文件a3的50%左右。而在恢复文件的操作中,可以通过预定程序将“\x”字符串重新增加上。
步骤6、利用多线程工作模式,将每个golang压缩文件a3编译成对应中间状态文件(形式为*.a的文件)a4;
在本实施例中,多线程工作模式相对于单线程来说,可提高工作效率。将一项工作划分成多个部分并且彼此不影响,又使用多线程工作模式同时处理被划分的多个部分工作,相比一个接一个顺序处理的单线程工作模式,效率会明显提高。
步骤7、利用gobuild工具,编译各中间状态文件a4,从而生成最终执行文件b。
在本实施例中,编译生成最终执行文件b时可以指定目标操作系统,生成的最终执行文件b可以在这类系统的任何机器上运行;并且最终执行文件b就能够被部署。
在本实施例中,不但提高了编译的速度,还减少了文件所占用的空间,从而使得压缩的效率明显提高。
本发明实施例提供了golang语言下静态资源打包装置,可以实现上述提供的方法实施例,具体功能实现请参见方法实施例中的说明,在此不再赘述。
应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。
在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要比清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。
为使本领域内的任何技术人员能够实现或者使用本发明,上面对所公开实施例进行了描述。对于本领域技术人员来说;这些实施例的各种修改方式都是显而易见的,并且本文定义的一般原理也可以在不脱离本公开的精神和保护范围的基础上适用于其它实施例。因此,本公开并不限于本文给出的实施例,而是与本申请公开的原理和新颖性特征的最广范围相一致。
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。
本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。
本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。
在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。