go/gcexportdata: don't assume that fmt names never change
For golang/go#47579
Change-Id: I25a873fb6da216d885c8faefda98c7fe027b6a4f
Reviewed-on: https://go-review.googlesource.com/c/tools/+/406357
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Rob Pike <r@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
diff --git a/go/gcexportdata/example_test.go b/go/gcexportdata/example_test.go
index 7df05ab..e81e705 100644
--- a/go/gcexportdata/example_test.go
+++ b/go/gcexportdata/example_test.go
@@ -51,25 +51,37 @@
log.Fatal(err)
}
- // Print package information.
+ // We can see all the names in Names.
members := pkg.Scope().Names()
- if members[0] == ".inittask" {
- // An improvement to init handling in 1.13 added ".inittask". Remove so go >= 1.13 and go < 1.13 both pass.
- members = members[1:]
+ foundPrintln := false
+ for _, member := range members {
+ if member == "Println" {
+ foundPrintln = true
+ break
+ }
}
- fmt.Printf("Package members: %s...\n", members[:5])
+ fmt.Print("Package members: ")
+ if foundPrintln {
+ fmt.Println("Println found")
+ } else {
+ fmt.Println("Println not found")
+ }
+
+ // We can also look up a name directly using Lookup.
println := pkg.Scope().Lookup("Println")
- posn := fset.Position(println.Pos())
- posn.Line = 123 // make example deterministic
- typ := strings.ReplaceAll(println.Type().String(), "interface{}", "any") // go 1.18+ uses the 'any' alias
+ // go 1.18+ uses the 'any' alias
+ typ := strings.ReplaceAll(println.Type().String(), "interface{}", "any")
fmt.Printf("Println type: %s\n", typ)
+ posn := fset.Position(println.Pos())
+ // make example deterministic
+ posn.Line = 123
fmt.Printf("Println location: %s\n", slashify(posn))
// Output:
//
// Package path: fmt
// Export data: fmt.a
- // Package members: [Errorf Formatter Fprint Fprintf Fprintln]...
+ // Package members: Println found
// Println type: func(a ...any) (n int, err error)
// Println location: $GOROOT/src/fmt/print.go:123:1
}