20

/help/index.htmlコンポーネントの 1 つが指定されたパス ( 、 または など/help/) とその場所に基づく相対パス ( ../otherpage/index.html、 またはsub/dir/of/help/、 または などhelp2.html) を取り、絶対パスを生成できるようにする必要があるプログラムを作成しています。相対パスによって暗示されます。次のディレクトリ ツリーを考えてみましょう。

/
index.html
content.txt
help/
    help1.html
    help2.html

ファイルindex.htmlには、 のようなリンクが含まれていますhelp/help1.html。プログラムは/またはを渡し/index.html、 と組み合わせてhelp/help1.htmlを取得します/help/help1.html

同様に、ファイル/help/help1.htmlにはリンク../content.txtがあり、プログラムはそこから を返す必要があります/content.txt。これを行う合理的な方法はありますか?

ありがとうございました。:)

編集: Stephen Weinberg に感謝します! 未来の皆さんのために、私が使用したコードは次のとおりです。

func join(source, target string) string {
    if path.IsAbs(target) {
        return target
    }
    return path.Join(path.Dir(source), target)
}
4

2 に答える 2

30

path.Joinwhen を使用すると、必要path.Dirなことが実行されます。インタラクティブな例については、 http: //golang.org/pkg/path/#example_Joinを参照してください。

path.Join(path.Dir("/help/help1.html"), "../content.txt")

これは を返し/content.txtます。

于 2012-10-25T22:32:56.210 に答える
3

スティーブンの答えは正しいですが、将来の読者を節約するために何かを追加したかったのです。

パス パッケージ内の関数は、区切り記号が/. 上記の例を使用すると.\.

URL を操作していない場合は、OS のディレクトリ セパレータを使用するfilepath パッケージの使用を検討してください。

例: Windows で実行する場合:

path.Dir("C:\\Users\\Darren\\Desktop\\file.txt")
filepath.Dir("C:\\Users\\Darren\\Desktop\\file.txt")

戻り値:

.
C:\Users\Darren\Desktop
于 2018-07-25T09:27:26.143 に答える