  Ever since its first release in 2009, the Go programming language (Golang)
has been well received by software communities. A major reason for its success
is the powerful support of library-based development, where a Golang project
can be conveniently built on top of other projects by referencing them as
libraries. As Golang evolves, it recommends the use of a new
library-referencing mode to overcome the limitations of the original one. While
these two library modes are incompatible, both are supported by the Golang
ecosystem. The heterogeneous use of library-referencing modes across Golang
projects has caused numerous dependency management (DM) issues, incurring
reference inconsistencies and even build failures. Motivated by the problem, we
conducted an empirical study to characterize the DM issues, understand their
root causes, and examine their fixing solutions. Based on our findings, we
developed \textsc{Hero}, an automated technique to detect DM issues and suggest
proper fixing solutions. We applied \textsc{Hero} to 19,000 popular Golang
projects. The results showed that \textsc{Hero} achieved a high detection rate
of 98.5\% on a DM issue benchmark and found 2,422 new DM issues in 2,356
popular Golang projects. We reported 280 issues, among which 181 (64.6\%)
issues have been confirmed, and 160 of them (88.4\%) have been fixed or are
under fixing. Almost all the fixes have adopted our fixing suggestions.
