崩潰,在 Linux 下用 Golang 寫了程序,想移到 Windows 下也能運行,但被目錄轉化搞得放棄

2018-10-27 20:55:40 +08:00
 zjsxwc

一會 C:\User 一會C:\\User 一會 C:/User

改得我腦門疼,水平有限,精力不夠最終還是放棄 Windows

5174 次点击
所在节点    程序员
42 条回复
SuperMild
2018-10-28 10:25:37 +08:00
@ #13

文档概述一共就两三句话也不看吗。涉及系统路径的 api,第一反应就是可能不跨平台需要看文档确认一下。另外上面有人说不跨平台就不能入标准库,是不是各种语言标准库了解得太少,不跨平台很正常的。

Package path

This package does not deal with Windows paths with drive letters or backslashes; to manipulate operating system paths, use the path/filepath package.
Cbdy
2018-10-28 10:31:07 +08:00
Go 难道没有类似 Java 的 File、Path 这样的 API 吗?
jhdxr
2018-10-28 10:36:27 +08:00
@SuperMild 恕我孤陋寡闻,我想了一下,java / php / python / nodejs 之类的涉及到路径的 api,好像都是可以跨平台的吧? go 用户有时候最好跳出井看一眼现在外面的世界是啥样了。。。
feverzsj
2018-10-28 10:43:02 +08:00
别人跨平台用 go 都很顺,只能说是 lz 自己的问题
trait
2018-10-28 10:46:09 +08:00
@SuperMild 额 不能 go 不入 std 就说正常操作吧,几乎同时期出生的 rust 的 path 都是跨平台
SuperMild
2018-10-28 11:13:42 +08:00
@jhdxr
@trait

go 里的 path 也有跨平台的 api,比如 filepath.IsAbs

以 python, nodejs 为例,它们有不跨平台的 low level api,也有跨平台的 high level api,这在 go 里也是类似的。

路径涉及平台的根本性区别,其中有的部分必然在不同平台有不同的处理,python, nodejs 关于 path 的文档里每几行就来一句 "但在 windoows 里是这样的……", nodejs 的 path 文档第一节就是 “ Windows vs. POSIX ”,不可视而不见。
congeec
2018-10-28 11:14:20 +08:00
#8 正解 现代语言里基本都有 raw string 吧
aru
2018-10-28 11:16:38 +08:00
windows 7 以上可以用 c://windows/system32/ 这样的路径表示方式
reus
2018-10-28 11:24:43 +08:00
@kidlj 标准库里有平台相关的,有什么问题?你 windows 垃圾,怪别人了?
reus
2018-10-28 11:25:02 +08:00
@Trim21 要用 filepath 包,不是 path
reus
2018-10-28 11:25:50 +08:00
@mengzhuo path 包就是只有 / 的,平台相关的需要用 path/filepath 这个
reus
2018-10-28 11:29:30 +08:00
@jhdxr go 标准库有跨平台的路径处理包,他给出的文档里都写了“ to manipulate operating system paths, use the path/filepath package.”,你连读都不读,就敢叫人“跳出井口”?难道不是你自己的问题???
rrfeng
2018-10-28 12:15:31 +08:00
import "path/filepath"
Kisesy
2018-10-28 12:41:21 +08:00
奇怪的问题,事实上我这里这样写都是正常的
path := "c://aaa/abc\\cde/////xxx\\\\aaa"
os.MkdirAll(path, 0666)
os.Create(filepath.Join(path, "a.txt"))
liuxey
2018-10-28 12:41:45 +08:00
其实现在不用管正反,一律用“/”,反正兼容
Kisesy
2018-10-28 12:43:26 +08:00
@Kisesy 或者直接拼接也可以 os.Create(path + "/" + "a.txt")
hansnow
2018-10-28 13:51:28 +08:00
@Kisesy #36 更合适的做法是 filepath.Join(path, "a.txt")得到更稳定的路径吧?
cpdyj0
2018-10-28 13:55:40 +08:00
标准库不会自动处理这些问题吗,我记得 Java 好像是可以的
Kisesy
2018-10-28 14:45:12 +08:00
@hansnow 是的,但是 Join 会默认调用 Clean,会格式化为 c:\aaa\abc\cde\xxx\aaa\a.txt ,这样就不能证明系统或者编程语言其实是支持混乱的分隔符的了
raptor
2018-10-28 16:00:52 +08:00
还是那句话,珍爱生命,远离微软

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/501771

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX