我是靠谱客的博主 深情大炮,最近开发中收集的这篇文章主要介绍Windows和Linux下的换行差异,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、起因

工作中需要把 Golang 项目交叉编译成为Linux下可执行的二进制文件,但是由于本人电脑是 Windows 10,所以需要跨平台交叉编译。在 Windows下直接编译的话,会直接生成 *.exe 的可执行文件。Linux 环境下的可执行文件为二进制。还好 Golang 可以跨平台编译。

二、方法

普通的编译方法为

go build main.go

这样就会在工作目录下生成一个 main.exe 的可执行文件。

如果编译到Linux平台,可以添加设置

set GOOS=linux
//设置目标平台
set GOARCH=amd64
//设置目标架构
go build example.exe mian.go

这样就可以在 Windows 系统下编译 Linux 的 Golang 项目了。

三、问题

因为一个项目中包含了俩个编译脚本,所以把编译命令写在了 build.sh 文件内,用来实现项目的一键编译,但是出现了如下错误:

cannot find package "mian.gor" in any of:
/usr/local/bin/src/mian.go (from $GOROOT)
/Users/haiqingzhu/go/src/mian.go (from $GOPATH)

大概意思就是"没找到main.gor"这个包,但是在 mian.go文件内并没有引用这个包,就算包的引用,也不会出现 .go 这样的引用,所以一时间无法排除。

四、原因

这个问题是由于 Windows 和 Linux 俩个系统的换行格式引起的。在Windows 下的换行格式为 CRLF(如果是使用 VS cdode的可以看右下角),而在 Linux 下默认的换行格式是 LF。这其中有什么差异呢?当你 “啪” 的一声按下回车键的时候,在 Windows 系统下会在文件中添加 rn,而在 Linux 系统下则是在行末添加了 n。但是由于回车的字符输入是不可见的,只是在视觉上看到了换行,所以挺隐蔽的。

上面的错误也就很明显了,因为编译命令的最后是 mian.go,而在 Windows 系统下回车后,这一行变成了 ......mian.gorn,在Linux下编译的时候,只是忽略了 n 这个换行记号,所以 r 也被误认为在命令中进行了编译,这就导致了错误。

五、解决方法

  1. 直接在Linux环境下编译 (麻烦)
  2. VS Code 可以在右下角点击 CRLF 选中 LF
  3. 通常编译脚本不改变,所以可以改变git的通用设置:
git config --global core.autocrlf false

最后

以上就是深情大炮为你收集整理的Windows和Linux下的换行差异的全部内容,希望文章能够帮你解决Windows和Linux下的换行差异所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部