diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts
index d81a2aa..3734b3f 100644
--- a/__tests__/setup-go.test.ts
+++ b/__tests__/setup-go.test.ts
@@ -9,6 +9,9 @@ import * as main from '../src/main';
 import * as im from '../src/installer';
 
 let goJsonData = require('./data/golang-dl.json');
+let matchers = require('../matchers.json');
+let matcherPattern = matchers.problemMatcher[0].pattern[0];
+let matcherRegExp = new RegExp(matcherPattern.regexp);
 
 describe('setup-go', () => {
   let inputs = {} as any;
@@ -322,6 +325,72 @@ describe('setup-go', () => {
     expect(added).toBeTruthy;
   });
 
+  interface Annotation {
+    file: string,
+    line: number,
+    column: number,
+    message: string
+  }
+
+  //
+  // problem matcher regex pattern tests
+
+  function testMatch(line: string): Annotation {
+    let annotation = <Annotation>{};
+
+    let match = matcherRegExp.exec(line);
+    if (match) {
+      annotation.line = parseInt(match[matcherPattern.line], 10);
+      annotation.column = parseInt(match[matcherPattern.column], 10);
+      annotation.file = match[matcherPattern.file].trim();
+      annotation.message = match[matcherPattern.message].trim();
+    }
+
+    return annotation;
+  }  
+
+  it('matches on rooted unix path', async () => {
+    let line = '/assert.go:4:1: missing return at end of function';
+    let annotation = testMatch(line);
+    expect(annotation).toBeDefined();
+    expect(annotation.line).toBe(4);
+    expect(annotation.column).toBe(1);
+    expect(annotation.file).toBe('/assert.go');
+    expect(annotation.message).toBe('missing return at end of function');
+  });
+
+  it('matches on relative unix path', async () => {
+    let line = './a/path/assert.go:6:1: missing return at end of function';
+    let annotation = testMatch(line);
+    expect(annotation).toBeDefined();
+    expect(annotation.line).toBe(6);
+    expect(annotation.column).toBe(1);
+    expect(annotation.file).toBe('./a/path/assert.go');
+    expect(annotation.message).toBe('missing return at end of function');
+  });  
+
+  it('matches on rooted unix path', async () => {
+    let line = '/assert.go:4:1: missing return at end of function';
+    let annotation = testMatch(line);
+    expect(annotation).toBeDefined();
+    expect(annotation.line).toBe(4);
+    expect(annotation.column).toBe(1);
+    expect(annotation.file).toBe('/assert.go');
+    expect(annotation.message).toBe('missing return at end of function');
+  });  
+
+  it('matches on rooted unix path with whitespace', async () => {
+    let line = '   /assert.go:5:2: missing return at end of function   ';
+    let annotation = testMatch(line);
+    expect(annotation).toBeDefined();
+    expect(annotation.line).toBe(5);
+    expect(annotation.column).toBe(2);
+    expect(annotation.file).toBe('/assert.go');
+    expect(annotation.message).toBe('missing return at end of function');
+  });  
+
+
+
   // 1.13.1 => 1.13.1
   // 1.13 => 1.13.0
   // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
diff --git a/matchers.json b/matchers.json
index f370917..69e8427 100644
--- a/matchers.json
+++ b/matchers.json
@@ -4,11 +4,11 @@
             "owner": "go",
             "pattern": [
                 {
-                    "regexp": "^([^:]*: )?((.:)?[^:]*):(\\d+)(:(\\d+))?: (.*)$",
-                    "file": 2,
-                    "line": 4,
-                    "column": 6,
-                    "message": 7
+                    "regexp": "((?:.{0,2}\\/|.{0,2}\\\\)(?:.+\\.go)):(?:(\\d+):(\\d+):)? (.*)",
+                    "file": 1,
+                    "line": 2,
+                    "column": 3,
+                    "message": 4
                 }
             ]
         }