diff --git a/lib/datasource/go/common.ts b/lib/datasource/go/common.ts
index 35cdfb8f4e790efff91e99f5b69c27d722650fed..da37acbf595c56fed05185603a6c7117ea4c8ce2 100644
--- a/lib/datasource/go/common.ts
+++ b/lib/datasource/go/common.ts
@@ -1,5 +1,11 @@
 import { Http } from '../../util/http';
 import { BitBucketTagsDatasource } from '../bitbucket-tags';
+import { getSourceUrl as githubSourceUrl } from '../github-releases/common';
+import { id as githubDatasource } from '../github-tags';
+import { id as gitlabDatasource } from '../gitlab-tags';
+import { getSourceUrl as gitlabSourceUrl } from '../gitlab-tags/util';
+
+import type { DataSource } from './types';
 
 export const id = 'go';
 
@@ -11,3 +17,24 @@ export enum GoproxyFallback {
   WhenNotFoundOrGone = ',',
   Always = '|',
 }
+
+export function getSourceUrl(dataSource?: DataSource): string | undefined {
+  if (dataSource) {
+    const { datasource, registryUrl, lookupName } = dataSource;
+
+    if (datasource === githubDatasource) {
+      return githubSourceUrl(lookupName, registryUrl);
+    }
+
+    if (datasource === gitlabDatasource) {
+      return gitlabSourceUrl(lookupName, registryUrl);
+    }
+
+    if (datasource === bitbucket.id) {
+      return BitBucketTagsDatasource.getSourceUrl(lookupName, registryUrl);
+    }
+  }
+
+  // istanbul ignore next
+  return undefined;
+}
diff --git a/lib/datasource/go/releases-direct.ts b/lib/datasource/go/releases-direct.ts
index 634cf141426f8b9bae5ce4579795cb15ab9598e8..dbe15b14cd0201dc67a61da812f30446080ce19d 100644
--- a/lib/datasource/go/releases-direct.ts
+++ b/lib/datasource/go/releases-direct.ts
@@ -3,7 +3,7 @@ import { regEx } from '../../util/regex';
 import * as github from '../github-tags';
 import * as gitlab from '../gitlab-tags';
 import type { GetReleasesConfig, ReleaseResult } from '../types';
-import { bitbucket } from './common';
+import { bitbucket, getSourceUrl } from './common';
 import { getDatasource } from './get-datasource';
 
 /**
@@ -59,6 +59,8 @@ export async function getReleases(
     return null;
   }
 
+  const sourceUrl = getSourceUrl(source);
+
   /**
    * github.com/org/mod/submodule should be tagged as submodule/va.b.c
    * and that tag should be used instead of just va.b.c, although for compatibility
@@ -91,7 +93,7 @@ export async function getReleases(
       (source.datasource === gitlab.id && submodReleases.length)
     ) {
       return {
-        sourceUrl: res.sourceUrl,
+        sourceUrl,
         releases: submodReleases,
       };
     }
@@ -103,5 +105,5 @@ export async function getReleases(
     );
   }
 
-  return res;
+  return { ...res, sourceUrl };
 }
diff --git a/lib/datasource/go/releases-goproxy.spec.ts b/lib/datasource/go/releases-goproxy.spec.ts
index 9361be5a0955eda38c270ed1db4550bf6523d38d..4d85ca647bdf9bcbba1bfdef552a2ce15d6c0201 100644
--- a/lib/datasource/go/releases-goproxy.spec.ts
+++ b/lib/datasource/go/releases-goproxy.spec.ts
@@ -179,10 +179,13 @@ describe('datasource/go/releases-goproxy', () => {
 
       const res = await getReleases({ lookupName: 'github.com/google/btree' });
       expect(httpMock.getTrace()).toMatchSnapshot();
-      expect(res?.releases).toMatchObject([
-        { releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
-        { releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
-      ]);
+      expect(res).toEqual({
+        releases: [
+          { releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
+          { releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
+        ],
+        sourceUrl: 'https://github.com/google/btree',
+      });
     });
 
     it('handles timestamp fetch errors', async () => {
@@ -199,10 +202,10 @@ describe('datasource/go/releases-goproxy', () => {
 
       const res = await getReleases({ lookupName: 'github.com/google/btree' });
       expect(httpMock.getTrace()).toMatchSnapshot();
-      expect(res?.releases).toMatchObject([
-        { version: 'v1.0.0' },
-        { version: 'v1.0.1' },
-      ]);
+      expect(res).toEqual({
+        releases: [{ version: 'v1.0.0' }, { version: 'v1.0.1' }],
+        sourceUrl: 'https://github.com/google/btree',
+      });
     });
 
     it('handles pipe fallback', async () => {
@@ -224,10 +227,13 @@ describe('datasource/go/releases-goproxy', () => {
 
       const res = await getReleases({ lookupName: 'github.com/google/btree' });
       expect(httpMock.getTrace()).toMatchSnapshot();
-      expect(res?.releases).toMatchObject([
-        { releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
-        { releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
-      ]);
+      expect(res).toEqual({
+        releases: [
+          { releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
+          { releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
+        ],
+        sourceUrl: 'https://github.com/google/btree',
+      });
     });
 
     it('handles comma fallback', async () => {
@@ -258,10 +264,13 @@ describe('datasource/go/releases-goproxy', () => {
 
       const res = await getReleases({ lookupName: 'github.com/google/btree' });
       expect(httpMock.getTrace()).toMatchSnapshot();
-      expect(res?.releases).toMatchObject([
-        { releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
-        { releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
-      ]);
+      expect(res).toEqual({
+        releases: [
+          { releaseTimestamp: '2018-08-13T15:31:12Z', version: 'v1.0.0' },
+          { releaseTimestamp: '2019-10-16T16:15:28Z', version: 'v1.0.1' },
+        ],
+        sourceUrl: 'https://github.com/google/btree',
+      });
     });
 
     it('short-circuits for errors other than 404 or 410', async () => {
diff --git a/lib/datasource/go/releases-goproxy.ts b/lib/datasource/go/releases-goproxy.ts
index d1baae1996a275670297e51f1d693e7477228b88..5acb7a080b5b0aaefc86582b6f2eb0000de1a7cf 100644
--- a/lib/datasource/go/releases-goproxy.ts
+++ b/lib/datasource/go/releases-goproxy.ts
@@ -5,7 +5,8 @@ import { logger } from '../../logger';
 import * as packageCache from '../../util/cache/package';
 import { regEx } from '../../util/regex';
 import type { GetReleasesConfig, Release, ReleaseResult } from '../types';
-import { GoproxyFallback, http } from './common';
+import { GoproxyFallback, getSourceUrl, http } from './common';
+import { getDatasource } from './get-datasource';
 import * as direct from './releases-direct';
 import type { GoproxyItem, VersionInfo } from './types';
 
@@ -202,7 +203,9 @@ export async function getReleases(
       });
       const releases = await pAll(queue, { concurrency: 5 });
       if (releases.length) {
-        result = { releases };
+        const datasource = await getDatasource(lookupName);
+        const sourceUrl = getSourceUrl(datasource);
+        result = { releases, sourceUrl };
         break;
       }
     } catch (err) {