本文整理汇总了Golang中go/build.Context.JoinPath方法的典型用法代码示例。如果您正苦于以下问题:Golang Context.JoinPath方法的具体用法?Golang Context.JoinPath怎么用?Golang Context.JoinPath使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类go/build.Context
的用法示例。
在下文中一共展示了Context.JoinPath方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Setup
// Setup configures a *build.Context to use the given VFS
// as its filesystem.
func Setup(ctx *build.Context, fs vfs.VFS) {
ctx.JoinPath = path.Join
ctx.SplitPathList = filepath.SplitList
ctx.IsAbsPath = func(p string) bool {
return p != "" && p[0] == '/'
}
ctx.IsDir = func(p string) bool {
stat, err := fs.Stat(p)
return err == nil && stat.IsDir()
}
ctx.HasSubdir = func(root, dir string) (string, bool) {
root = path.Clean(root)
if !strings.HasSuffix(root, separator) {
root += separator
}
dir = path.Clean(dir)
if !strings.HasPrefix(dir, root) {
return "", false
}
return dir[len(root):], true
}
ctx.ReadDir = fs.ReadDir
ctx.OpenFile = func(p string) (io.ReadCloser, error) {
return fs.Open(p)
}
}
示例2: setMemoryContext
func (w *Walker) setMemoryContext(ctxt *build.Context) {
ctxt.JoinPath = path.Join
ctxt.IsAbsPath = path.IsAbs
ctxt.IsDir = func(path string) bool { panic("unexpected") }
ctxt.HasSubdir = func(root, dir string) (rel string, ok bool) { panic("unexpected") }
ctxt.ReadDir = func(dir string) (fi []os.FileInfo, err error) { return w.readDir(dir) }
ctxt.OpenFile = func(path string) (r io.ReadCloser, err error) { return w.openFile(path) }
}
示例3: parseFile
func (pkg *pkg) parseFile(ctx *build.Context, name string) (*ast.File, error) {
f, err := ctx.OpenFile(ctx.JoinPath(pkg.Build.Dir, name))
if err != nil {
return nil, err
}
defer f.Close()
p, err := ioutil.ReadAll(f)
if err != nil {
return nil, err
}
// overwrite //line comments
for _, m := range linePat.FindAllIndex(p, -1) {
for i := m[0] + 2; i < m[1]; i++ {
p[i] = ' '
}
}
return parser.ParseFile(pkg.FSet, name, p, parser.ParseComments)
}
示例4: Import
// Import returns details about the package in the directory.
func (dir *Directory) Import(ctx *build.Context, mode build.ImportMode) (*build.Package, error) {
safeCopy := *ctx
ctx = &safeCopy
ctx.JoinPath = path.Join
ctx.IsAbsPath = path.IsAbs
ctx.SplitPathList = func(list string) []string { return strings.Split(list, ":") }
ctx.IsDir = func(path string) bool { return false }
ctx.HasSubdir = func(root, dir string) (rel string, ok bool) { return "", false }
ctx.ReadDir = dir.readDir
ctx.OpenFile = dir.openFile
return ctx.ImportDir(".", mode)
}
示例5: JoinPath
// JoinPath behaves like filepath.Join,
// but uses the build context's file system interface, if any.
func JoinPath(ctxt *build.Context, path ...string) string {
if ctxt.JoinPath != nil {
return ctxt.JoinPath(path...)
}
return filepath.Join(path...)
}