diff --git a/README.md b/README.md
index ab19641..695a3bf 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,7 @@ The V2 beta offers:
 - stable input 
 - Bug Fixes (including issues around version matching and semver)
 
+Matching by semver spec:
 ```yaml
 steps:
 - uses: actions/checkout@v2
@@ -27,6 +28,17 @@ steps:
 - run: go version
 ```
 
+Matching an unstable pre-release:
+```yaml
+steps:
+- uses: actions/checkout@v2
+- uses: actions/setup-go@v2-beta
+  with:
+    stable: 'false'
+    go-version: '1.14.0-rc1' # The Go version to download (if necessary) and use.
+- run: go version
+```
+
 # Usage
 
 See [action.yml](action.yml)
diff --git a/__tests__/setup-go.test.ts b/__tests__/setup-go.test.ts
index afeb369..3d3e150 100644
--- a/__tests__/setup-go.test.ts
+++ b/__tests__/setup-go.test.ts
@@ -67,6 +67,29 @@ describe('setup-go', () => {
 
   afterAll(async () => {}, 100000);
 
+  it('can query versions', async () => {
+    let versions: im.IGoVersion[] | null = await im.getVersions(
+      'https://non.existant.com/path'
+    );
+    expect(versions).toBeDefined();
+    let l: number = versions ? versions.length : 0;
+    expect(l).toBe(91);
+  });
+
+  it('finds stable match for exact version', async () => {
+    os.platform = 'win32';
+    os.arch = 'x64';
+
+    // get request is already mocked
+    // spec: 1.13.7 => 1.13.7 (exact)
+    let match: im.IGoVersion | undefined = await im.findMatch('1.13.7', true);
+    expect(match).toBeDefined();
+    let version: string = match ? match.version : '';
+    expect(version).toBe('go1.13.7');
+    let fileName = match ? match.files[0].filename : '';
+    expect(fileName).toBe('go1.13.7.windows-amd64.zip');
+  });
+
   it('finds stable match for exact dot zero version', async () => {
     os.platform = 'darwin';
     os.arch = 'x64';
@@ -119,6 +142,22 @@ describe('setup-go', () => {
     expect(fileName).toBe('go1.13.7.windows-386.zip');
   });
 
+  it('finds unstable pre-release version', async () => {
+    os.platform = 'linux';
+    os.arch = 'x64';
+
+    // spec: 1.14, stable=false => go1.14rc1
+    let match: im.IGoVersion | undefined = await im.findMatch(
+      '1.14.0-rc1',
+      false
+    );
+    expect(match).toBeDefined();
+    let version: string = match ? match.version : '';
+    expect(version).toBe('go1.14rc1');
+    let fileName = match ? match.files[0].filename : '';
+    expect(fileName).toBe('go1.14rc1.linux-amd64.tar.gz');
+  });
+
   it('evaluates to stable with input as true', async () => {
     inputs['go-version'] = '1.13.0';
     inputs.stable = 'true';
@@ -241,26 +280,20 @@ describe('setup-go', () => {
     );
   });
 
-  it('can query versions', async () => {
-    let versions: im.IGoVersion[] | null = await im.getVersions(
-      'https://non.existant.com/path'
-    );
-    expect(versions).toBeDefined();
-    let l: number = versions ? versions.length : 0;
-    expect(l).toBe(91);
+  // 1.13.1 => 1.13.1
+  // 1.13 => 1.13.0
+  // 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
+  // 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
+  it('converts prerelease versions', async () => {
+    expect(im.makeSemver('1.10beta1')).toBe('1.10.0-beta1');
+    expect(im.makeSemver('1.10rc1')).toBe('1.10.0-rc1');
   });
 
-  it('finds stable match for exact version', async () => {
-    os.platform = 'win32';
-    os.arch = 'x64';
+  it('converts dot zero versions', async () => {
+    expect(im.makeSemver('1.13')).toBe('1.13.0');
+  });
 
-    // get request is already mocked
-    // spec: 1.13.7 => 1.13.7 (exact)
-    let match: im.IGoVersion | undefined = await im.findMatch('1.13.7', true);
-    expect(match).toBeDefined();
-    let version: string = match ? match.version : '';
-    expect(version).toBe('go1.13.7');
-    let fileName = match ? match.files[0].filename : '';
-    expect(fileName).toBe('go1.13.7.windows-amd64.zip');
+  it('does not convert exact versions', async () => {
+    expect(im.makeSemver('1.13.1')).toBe('1.13.1');
   });
 });
diff --git a/dist/index.js b/dist/index.js
index 197a5d6..21783e6 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -4625,7 +4625,7 @@ function findMatch(versionSpec, stable) {
         let goFile;
         for (let i = 0; i < candidates.length; i++) {
             let candidate = candidates[i];
-            let version = candidate.version.replace('go', '');
+            let version = makeSemver(candidate.version);
             // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
             // since a semver of 1.13 would match latest 1.13
             let parts = version.split('.');
@@ -4663,6 +4663,25 @@ function getVersions(dlUrl) {
     });
 }
 exports.getVersions = getVersions;
+//
+// Convert the go version syntax into semver for semver matching
+// 1.13.1 => 1.13.1
+// 1.13 => 1.13.0
+// 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
+// 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
+function makeSemver(version) {
+    version = version.replace('go', '');
+    version = version.replace('beta', '-beta').replace('rc', '-rc');
+    let parts = version.split('-');
+    let verPart = parts[0];
+    let prereleasePart = parts.length > 1 ? `-${parts[1]}` : '';
+    let verParts = verPart.split('.');
+    if (verParts.length == 2) {
+        verPart += '.0';
+    }
+    return `${verPart}${prereleasePart}`;
+}
+exports.makeSemver = makeSemver;
 
 
 /***/ }),
diff --git a/src/installer.ts b/src/installer.ts
index 3bd79ee..92b0c8f 100644
--- a/src/installer.ts
+++ b/src/installer.ts
@@ -74,7 +74,7 @@ export async function findMatch(
   let goFile: IGoVersionFile | undefined;
   for (let i = 0; i < candidates.length; i++) {
     let candidate: IGoVersion = candidates[i];
-    let version = candidate.version.replace('go', '');
+    let version = makeSemver(candidate.version);
 
     // 1.13.0 is advertised as 1.13 preventing being able to match exactly 1.13.0
     // since a semver of 1.13 would match latest 1.13
@@ -115,3 +115,25 @@ export async function getVersions(dlUrl: string): Promise<IGoVersion[] | null> {
   let http: httpm.HttpClient = new httpm.HttpClient('setup-go');
   return (await http.getJson<IGoVersion[]>(dlUrl)).result;
 }
+
+//
+// Convert the go version syntax into semver for semver matching
+// 1.13.1 => 1.13.1
+// 1.13 => 1.13.0
+// 1.10beta1 => 1.10.0-beta1, 1.10rc1 => 1.10.0-rc1
+// 1.8.5beta1 => 1.8.5-beta1, 1.8.5rc1 => 1.8.5-rc1
+export function makeSemver(version: string): string {
+  version = version.replace('go', '');
+  version = version.replace('beta', '-beta').replace('rc', '-rc');
+  let parts = version.split('-');
+
+  let verPart: string = parts[0];
+  let prereleasePart = parts.length > 1 ? `-${parts[1]}` : '';
+
+  let verParts: string[] = verPart.split('.');
+  if (verParts.length == 2) {
+    verPart += '.0';
+  }
+
+  return `${verPart}${prereleasePart}`;
+}