
It seems that when I jump to another package/project, and if I decide to add it as another root, it would start another instance of gopls. Is it an expected behaviour?
Yes. For servers that do not support workspace folders, we have to fire up new instance for each project root. If the server supports multiple roots it should be registered with :multi-root t.
Some discussions are https://github.com/golang/go/issues/32394.