检测符号 link

Detecting symbolic link

我的目标是确定我拥有的文件是文件夹还是文件夹的符号链接。 通过我尝试的方式,我无法在此处检测到差异。

package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    linkPath := "./myLink"

    // with golang
    f, _ := os.Stat(linkPath)
    fmt.Println(f.Mode().String())

    // ls -la
    out, _ := exec.Command("ls", "-la", linkPath).Output()
    fmt.Printf("%s", out)
}

我的 (Debian) 系统上的输出如下所示:(每行的第一个字母很重要!)

drwxr-xr-x
lrwxrwxrwx 1 user user 7 Nov 16 13:31 ./myLink -> target/

所以 Go 中的 FileMode 似乎检测的是目录而不是符号链接,但是 ls 命令显示它实际上是一个符号链接。

我用命令创建了那个符号链接

ln -s target/ myLink

我是不是遗漏了什么或者为什么这不起作用?

编辑:我使用的是 go 版本 go1.11.6 linux/amd64

os.File.Stat 直接映射到 stat(2) 系统调用,在 Unix 上,它遵循符号链接。

lstat(2) 不遵循它们(因此领先的 l),并且在 Go 标准库中有一个匹配的调用:os.Lstat.