快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

go语言编写的文件 go语言文件操作

golang-文件读写

文件分类:文本文件和二进制文件

为黄陵等地区用户提供了全套网页设计制作服务,及黄陵网站建设行业解决方案。主营业务为成都网站建设、做网站、黄陵网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

文本文件可读性好,占用的数据空间大

二进制文件,可读性差,占用的数据空间小

文件存取方式:随机存取和顺序存放

随机存取:操作速度慢,对磁盘的消耗大

顺序存放:操作数据块,对磁盘的消耗小

初级方法

高级方法

在程序和文件之间,添加一个缓冲区,每次程序读取文件内容的时候,先去缓冲区查看,如果需要的内容,直接获取,如果没有再去文件中获取

由于缓冲是在内存当中的,和程序的交互返回速度会非常快,这样可以大大提高程序的性能和速度

缺点:有的数据是只在缓冲中存储的,如果在缓冲释放之前,没有将数据实例化落盘,会导致数据的丢失

按行操作文件对象

将之前的file方法封装起来,可以更加方便的使用

使用gzip.NewReader(文件句柄),来操作压缩文件

示例: file,err := os.OpenFile("main.go", os.O_WRONLY|os.O_WRONLY, 0666)

三个参数,

文件操作方法,需要注意不能冲突

操作完成后,当前目录出现一个text.txt 文件,内容是:hello world,test

这里可以可以考虑使用buffio来实现

Go语言的跨平台能力到底有多强?看完你就知道了

对比于其他语言的程序,Go语言的跨平台能力是真的强,拿.Net和JAVA来说吧,.Net在.Net core出现之前是不能跨平台的,只能在windows上编译运行,即使是点虐 core出现以后,跨平台的程序也是相当的麻烦。而java虽然一直都可以跨平台,但是运行JAVA程序的机器上也必须要有JAVA程序运行环境JRE。而相对于Go程序,跨平台就简单的多了,只需要在编译指定目标程序运行的架构和环境即可编译出指定操作系统和架构的程序。

以上是指定了go的环境变量后执行的go build命令进行目标程序的构建,这种方式会一直生效的,如果不让他一直生效,可以在构建的时候临时指定环境变量,下面以window的环境为例,来介绍临时指定环境变量的方式构建可以在Linux环境下运行的可执行程序:

可以根据不同的架构和操作系统将其编写为不同的.bat的可执行文件放置在程序的根目录,Linux的和MAC的也一样编写成脚本文件放置在程序的根目录,这样在构建的时候就不用再敲命令了,直接运行脚本就可以了。

Java程序编译打包后为war包或者是java包,必须执行java -jar 命令或者将其放置到tomcat的指定目录下,运行tomcat程序。而Go语言编写的程序最终为可执行的文件(window下编译出的是.exe的可执行文件),只需要将其赋予可执行的权限就可以直接运行了。

构建JAVA程序的镜像需要指定java的基础镜像,否则就需要在镜像中安装java的运行环境了,下面展示的是构建的一个JAVA程序的镜像,构建出来镜像的体积相对比较大

而Go程序制作出的镜像就不需要安装任何的依赖环境,因为他在打包的时候就已经将依赖的包一块打包到一起了

拿着这个镜像就可以到处运行了。

通过对比我们可以发现,如果没有之前的技术和业务的积累,重新开发一个新的项目,使用go去开发无疑是最容易上手的,所以现在很多公司都使用go进行开发,也逐渐将其他语言的项目逐步的用go语言进行改造。其实用什么语言不重要,合适的才重要,开发项目在选择语言的时候也会综合多方面来考虑选择合适的语言和架构,毕竟很多公司都不是搞研究的,都需要项目来赚钱,所以开发的速度、客户的满意度、项目交付的时间才是驱动公司技术的主要因素。

我们个人也应该不断完善自己的技术栈,不应该太依靠某种语言,最重要的还是自己的架构思想和底层架构知识,只有掌握了这些才能够不被 社会 和公司“优化”。

golang编写的项目,使用alpine制作镜像遇到的一个问题解决

GraphicsMagick,一款高性能的图片处理工具,由于项目需要,用到它,自然而然用到了关于gm的第三方库 这个库按照作者的提示,要安装GraphicsMagick-devel依赖。

项目写完了,接下来用alpine做为基础镜像,准备制作项目的镜像。

golang项目,是在ubuntu下编写的,编译成二进制文件了,只要把二进制文件放进镜像里即可,遇到的问题有2个

1 容器跑起来,一直报二进制文件no found

我认认真真的确认了文件,以及它的路径,确实是存在的,怎么会报文件找不到呢?!

原来是musl和glibc是兼容的问题,在Dockerfile里要加以下两步

2 Error loading shared library libGraphicsMagickWand-Q16.so.2: No such file or directory

明明按要求安装GraphicsMagick-devel依赖,为啥还报这种错

于是想到了,是不是也要ln做一下软链接呢?于是学着上面的样子在Dockerfile里补上

再跑,问题依旧,莫非是软连接的地址写错了!回到开发的电脑上用ldd命令查看一下

果然,编译后的二进制文件依赖路径是/lib,而不是/lib64

于是,修改Dockerfile里的写法

问题解决,开心:)

参考资料:


本文标题:go语言编写的文件 go语言文件操作
本文地址:http://6mz.cn/article/ddjjsgd.html

其他资讯