hi again,
This looks odd use case because when i move a package around,
with all the great tooling provided by the contributors,
import paths are updated automatically after a save.
It fails only if the package name is ambiguous because it
exists twice with different package paths within the workspace.
Its a terribly boring issue when that happens,
but i managed to survive it.
With a bit of research into those tools documentation,
a solution should quickly come up
to recursively update a workspace.
About the deprecation, i think it is strongly dependent
with your development practices and workflow.
If possible, I would not deprecate, but update my dependencies,
and pay my technical debts asap.
As for go.loader, it is a high level API of go.ast, go.parser etc
As such it provides lots of help when you are dealing with
go language loading, parsing, interpreting, traversing and manipulation.
It is tremendously useful when, for example,
cross package reference resolutions comes into your way.
Regarding the linkname pragma, i don't know enough about
the process of compilation to tell you anything relevant to its usage.
However, i tried to "relink" a public var of a package
to another package public var, nothing happened.
More reasonably, this extract (
https://gist.github.com/myitcv/e4202a9513bed098262444ed0f4f3625)
of pragma usage within the core tree demonstrates
a pretty specific usage to inject public symbols of C funcs.
e.g. //go:linkname byteIndex strings.IndexByte
Maybe someone else with a deeper knowledge can help you figure that out.
I don't have the feeling that i answered your questions, sorry for that.