首页 > 解决方案 > 是否可以将嵌入文件显示为文件名?

问题描述

我使用一个需要文件名作为参数(类型)的函数。提供文件名时它工作正常。string

我想将此文件嵌入到我的二进制文件中。然后我可以将内容设置为[]byteor string,但这没有用。我也可以喜欢它,embed.FS但我的理解是,这是一个只能由某些函数使用的抽象。

我需要的是能够将此嵌入文件呈现为文件名(a string),然后底层函数将使用该文件名来打开(嵌入)文件。

这可能吗?

标签: goembedfilenames

解决方案


Key 接受作为字符串参数的文件名只是 ioutil.ReadFile 上的抽象请参阅auth.go

你可以做的是自己实现 ssh.Auth,这里是一个小例子。

package main

import (
    _ "embed"
    "fmt"

    "github.com/melbahja/goph"
    "golang.org/x/crypto/ssh"
)

//go:embed id_rsa
var privateKey []byte

func main() {
    auth, err := Auth(privateKey, []byte("foobar"))

    fmt.Println(auth, err)
}

func Auth(privateKey, pass []byte) (goph.Auth, error) {
    signer, err := Singer(privateKey, pass)
    if err != nil {
        return nil, err
    }

    return goph.Auth{
        ssh.PublicKeys(signer),
    }, nil
}

func Singer(privateKey, pass []byte) (ssh.Signer, error) {
    if len(pass) != 0 {
        return ssh.ParsePrivateKeyWithPassphrase(privateKey, pass)
    }
    return ssh.ParsePrivateKey(privateKey)
}

推荐阅读