diff --git a/lib/datasource/go/releases-goproxy.spec.ts b/lib/datasource/go/releases-goproxy.spec.ts
index e6ec16ca38612dd4711c6091fd64de63aa648e11..3dc555a74d04aa26d87db40c48285fb57545c968 100644
--- a/lib/datasource/go/releases-goproxy.spec.ts
+++ b/lib/datasource/go/releases-goproxy.spec.ts
@@ -98,22 +98,31 @@ describe('datasource/go/releases-goproxy', () => {
       expect(parseNoproxy(undefined)).toBeNull();
       expect(parseNoproxy(null)).toBeNull();
       expect(parseNoproxy('')).toBeNull();
-      expect(parseNoproxy('*')?.source).toBe('^(?:[^\\/]*)$');
-      expect(parseNoproxy('?')?.source).toBe('^(?:[^\\/])$');
-      expect(parseNoproxy('foo')?.source).toBe('^(?:foo)$');
-      expect(parseNoproxy('\\f\\o\\o')?.source).toBe('^(?:foo)$');
-      expect(parseNoproxy('foo,bar')?.source).toBe('^(?:foo|bar)$');
-      expect(parseNoproxy('[abc]')?.source).toBe('^(?:[abc])$');
-      expect(parseNoproxy('[a-c]')?.source).toBe('^(?:[a-c])$');
-      expect(parseNoproxy('[\\a-\\c]')?.source).toBe('^(?:[a-c])$');
-      expect(parseNoproxy('a.b.c')?.source).toBe('^(?:a\\.b\\.c)$');
+      expect(parseNoproxy('/')).toBeNull();
+      expect(parseNoproxy('*')?.source).toBe('^(?:[^\\/]*)(?:\\/.*)?$');
+      expect(parseNoproxy('?')?.source).toBe('^(?:[^\\/])(?:\\/.*)?$');
+      expect(parseNoproxy('foo')?.source).toBe('^(?:foo)(?:\\/.*)?$');
+      expect(parseNoproxy('\\f\\o\\o')?.source).toBe('^(?:foo)(?:\\/.*)?$');
+      expect(parseNoproxy('foo,bar')?.source).toBe('^(?:foo|bar)(?:\\/.*)?$');
+      expect(parseNoproxy('[abc]')?.source).toBe('^(?:[abc])(?:\\/.*)?$');
+      expect(parseNoproxy('[a-c]')?.source).toBe('^(?:[a-c])(?:\\/.*)?$');
+      expect(parseNoproxy('[\\a-\\c]')?.source).toBe('^(?:[a-c])(?:\\/.*)?$');
+      expect(parseNoproxy('a.b.c')?.source).toBe('^(?:a\\.b\\.c)(?:\\/.*)?$');
+      expect(parseNoproxy('trailing/')?.source).toBe(
+        '^(?:trailing)(?:\\/.*)?$'
+      );
     });
 
     it('matches on real package prefixes', () => {
+      expect(parseNoproxy('ex.co').test('ex.co/foo')).toBeTrue();
+      expect(parseNoproxy('ex.co/').test('ex.co/foo')).toBeTrue();
+      expect(parseNoproxy('ex.co/foo/bar').test('ex.co/foo/bar')).toBeTrue();
       expect(parseNoproxy('ex.co/foo/bar').test('ex.co/foo/bar')).toBeTrue();
       expect(parseNoproxy('*/foo/*').test('example.com/foo/bar')).toBeTrue();
       expect(parseNoproxy('ex.co/foo/*').test('ex.co/foo/bar')).toBeTrue();
       expect(parseNoproxy('ex.co/foo/*').test('ex.co/foo/baz')).toBeTrue();
+      expect(parseNoproxy('ex.co').test('ex.co/foo/v2')).toBeTrue();
+
       expect(
         parseNoproxy('ex.co/foo/bar,ex.co/foo/baz').test('ex.co/foo/bar')
       ).toBeTrue();
@@ -123,15 +132,45 @@ describe('datasource/go/releases-goproxy', () => {
       expect(
         parseNoproxy('ex.co/foo/bar,ex.co/foo/baz').test('ex.co/foo/qux')
       ).toBeFalse();
-    });
 
-    it('Matches from start to end', () => {
-      expect(parseNoproxy('x').test('x/aba')).toBeFalse();
+      expect(parseNoproxy('ex').test('ex.co/foo')).toBeFalse();
+
       expect(parseNoproxy('aba').test('x/aba')).toBeFalse();
       expect(parseNoproxy('x/b').test('x/aba')).toBeFalse();
       expect(parseNoproxy('x/ab').test('x/aba')).toBeFalse();
       expect(parseNoproxy('x/ab[a-b]').test('x/aba')).toBeTrue();
     });
+
+    it('matches on wildcards', () => {
+      expect(parseNoproxy('/*/').test('ex.co/foo')).toBeFalse();
+      expect(parseNoproxy('*/foo').test('ex.co/foo')).toBeTrue();
+      expect(parseNoproxy('*/fo').test('ex.co/foo')).toBeFalse();
+      expect(parseNoproxy('*/fo?').test('ex.co/foo')).toBeTrue();
+      expect(parseNoproxy('*/fo*').test('ex.co/foo')).toBeTrue();
+      expect(parseNoproxy('*fo*').test('ex.co/foo')).toBeFalse();
+
+      expect(parseNoproxy('*.co').test('ex.co/foo')).toBeTrue();
+      expect(parseNoproxy('ex*').test('ex.co/foo')).toBeTrue();
+      expect(parseNoproxy('*/foo').test('ex.co/foo/v2')).toBeTrue();
+      expect(parseNoproxy('*/foo/').test('ex.co/foo/v2')).toBeTrue();
+      expect(parseNoproxy('*/foo/*').test('ex.co/foo/v2')).toBeTrue();
+      expect(parseNoproxy('*/foo/*/').test('ex.co/foo/v2')).toBeTrue();
+      expect(parseNoproxy('*/v2').test('ex.co/foo/v2')).toBeFalse();
+      expect(parseNoproxy('*/*/v2').test('ex.co/foo/v2')).toBeTrue();
+      expect(parseNoproxy('*/*/*').test('ex.co/foo/v2')).toBeTrue();
+      expect(parseNoproxy('*/*/*/').test('ex.co/foo/v2')).toBeTrue();
+      expect(parseNoproxy('*/*/*').test('ex.co/foo')).toBeFalse();
+      expect(parseNoproxy('*/*/*/').test('ex.co/foo')).toBeFalse();
+
+      expect(parseNoproxy('*/*/*,,').test('ex.co/repo')).toBeFalse();
+      expect(parseNoproxy('*/*/*,,*/repo').test('ex.co/repo')).toBeTrue();
+      expect(parseNoproxy(',,*/repo').test('ex.co/repo')).toBeTrue();
+    });
+
+    it('matches on character ranges', () => {
+      expect(parseNoproxy('x/ab[a-b]').test('x/aba')).toBeTrue();
+      expect(parseNoproxy('x/ab[a-b]').test('x/abc')).toBeFalse();
+    });
   });
 
   describe('getReleases', () => {
diff --git a/lib/datasource/go/releases-goproxy.ts b/lib/datasource/go/releases-goproxy.ts
index c35de8224feea6c4e70a54c150639100a9b07689..2546e88e7eab68c08d7ddf6f000424169346bfd9 100644
--- a/lib/datasource/go/releases-goproxy.ts
+++ b/lib/datasource/go/releases-goproxy.ts
@@ -72,6 +72,10 @@ const lexer = moo.states({
       push: 'characterRange',
       value: (_: string) => '[',
     },
+    trailingSlash: {
+      match: /\/$/,
+      value: (_: string) => '',
+    },
     char: {
       match: /[^*?\\[\n]/,
       value: (s: string) => s.replace(regEx('\\.', 'g'), '\\.'),
@@ -107,7 +111,9 @@ export function parseNoproxy(
   }
   lexer.reset(input);
   const noproxyPattern = [...lexer].map(({ value }) => value).join('');
-  const result = noproxyPattern ? regEx(`^(?:${noproxyPattern})$`) : null;
+  const result = noproxyPattern
+    ? regEx(`^(?:${noproxyPattern})(?:/.*)?$`)
+    : null;
   parsedNoproxy[input] = result;
   return result;
 }