I tried to state a path relative to the home directory, since in the context I am writing for the path from ~ to the Git repository will be consistent, though the meaning of ~ may change based on user. A snippet:
const specPath = "~/trunk/infra/metadata/config.cfg" absPath, _ := filepath.Abs(specPath) if err := readJSONPb(absPath, &s); err != nil { fmt.Printf("specPath is %s, or as absolute %s\n", specPath, absPath) return nil, errors.Annotate(err, "extracting tests from spec").Err() } However, this produces this output: specPath is ~/trunk/infra/metadata/config.cfg, or as absolute /home/jkop/trunk/infra/~/trunk/infra/metadata/config.cfg extracting tests from spec: read JSON pb: open /home/jkop/trunk/infra/~/trunk/infra/metadata/config.cfg: no such file or directory This is a) surprising, since I would expect a platform-sensitive absolute path function to deal with platform-global shortcuts like ~, and b) completely undocumented. The docs say that "Abs returns an absolute representation of path. If the path is not absolute it will be joined with the current working directory to turn it into an absolute path." It doesn't say "If the path is not *rooted*", but "not *absolute*". This is not an absolute *representation* but it does specify an absolute path unambiguously. What's the process for submitting a change to a core library like this one? Ideally, to the code, but I'd settle for making the documentation clearer. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/ee99cbb9-583f-487f-9e57-e0072d7a859an%40googlegroups.com.