diff --git a/README.md b/README.md
index 36f0d09..8360061 100644
--- a/README.md
+++ b/README.md
@@ -105,7 +105,7 @@ steps:
   - uses: actions/checkout@v3
   - uses: actions/setup-go@v3
     with:
-      go-version: '1.14'
+      go-version: '1.17'
       check-latest: true
       cache: true
   - run: go run hello.go
@@ -117,7 +117,7 @@ steps:
   - uses: actions/checkout@v3
   - uses: actions/setup-go@v3
     with:
-      go-version: '1.14'
+      go-version: '1.17'
       check-latest: true
       cache: true
       cache-dependency-path: subdir/go.sum
diff --git a/__tests__/cache-utils.test.ts b/__tests__/cache-utils.test.ts
index b9c8ff9..9210d4c 100644
--- a/__tests__/cache-utils.test.ts
+++ b/__tests__/cache-utils.test.ts
@@ -1,4 +1,6 @@
 import * as exec from '@actions/exec';
+import * as cache from '@actions/cache';
+import * as core from '@actions/core';
 import * as cacheUtils from '../src/cache-utils';
 import {PackageManagerInfo} from '../src/package-managers';
 
@@ -104,3 +106,74 @@ describe('getCacheDirectoryPath', () => {
     }).rejects.toThrow();
   });
 });
+
+describe('isCacheFeatureAvailable', () => {
+  //Arrange
+  let isFeatureAvailableSpy = jest.spyOn(cache, 'isFeatureAvailable');
+  let warningSpy = jest.spyOn(core, 'warning');
+
+  it('should return true when cache feature is available', () => {
+    //Arrange
+    isFeatureAvailableSpy.mockImplementation(() => {
+      return true;
+    });
+
+    let functionResult;
+
+    //Act
+    functionResult = cacheUtils.isCacheFeatureAvailable();
+
+    //Assert
+    expect(functionResult).toBeTruthy();
+  });
+
+  it('should warn when cache feature is unavailable and GHES is not used ', () => {
+    //Arrange
+    isFeatureAvailableSpy.mockImplementation(() => {
+      return false;
+    });
+
+    process.env['GITHUB_SERVER_URL'] = 'https://github.com';
+
+    let warningMessage =
+      'The runner was not able to contact the cache service. Caching will be skipped';
+
+    //Act
+    cacheUtils.isCacheFeatureAvailable();
+
+    //Assert
+    expect(warningSpy).toHaveBeenCalledWith(warningMessage);
+  });
+
+  it('should return false when cache feature is unavailable', () => {
+    //Arrange
+    isFeatureAvailableSpy.mockImplementation(() => {
+      return false;
+    });
+
+    process.env['GITHUB_SERVER_URL'] = 'https://github.com';
+
+    let functionResult;
+
+    //Act
+    functionResult = cacheUtils.isCacheFeatureAvailable();
+
+    //Assert
+    expect(functionResult).toBeFalsy();
+  });
+
+  it('should throw when cache feature is unavailable and GHES is used', () => {
+    //Arrange
+    isFeatureAvailableSpy.mockImplementation(() => {
+      return false;
+    });
+
+    process.env['GITHUB_SERVER_URL'] = 'https://nongithub.com';
+
+    let errorMessage =
+      'Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.';
+
+    //Act + Assert
+    expect(() => cacheUtils.isCacheFeatureAvailable()).toThrow(errorMessage);
+  });
+});
diff --git a/action.yml b/action.yml
index 00f5a35..01fb7d5 100644
--- a/action.yml
+++ b/action.yml
@@ -12,11 +12,14 @@ inputs:
     default: ${{ github.token }}
   cache:
     description: Used to specify whether go-modules caching is needed. Set to true, if you'd like to enable caching.
+    default: false
   cache-dependency-path:
     description: 'Used to specify the path to a dependency file - go.sum'
+outputs:
+  cache-hit: 
+    description: 'A boolean value to indicate if a cache was hit'
 runs:
   using: 'node16'
   main: 'dist/setup/index.js'
   post: 'dist/cache-save/index.js'
   post-if: success()
-
diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js
index 210f0e3..047a62d 100644
--- a/dist/cache-save/index.js
+++ b/dist/cache-save/index.js
@@ -3924,7 +3924,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
     });
 };
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
+exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
+const cache = __importStar(__webpack_require__(692));
+const core = __importStar(__webpack_require__(470));
 const exec = __importStar(__webpack_require__(986));
 const package_managers_1 = __webpack_require__(813);
 exports.getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
@@ -3951,6 +3953,24 @@ exports.getCacheDirectoryPath = (packageManagerInfo) => __awaiter(void 0, void 0
     }
     return stdout;
 });
+function isGhes() {
+    const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
+    return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
+}
+exports.isGhes = isGhes;
+function isCacheFeatureAvailable() {
+    if (!cache.isFeatureAvailable()) {
+        if (isGhes()) {
+            throw new Error('Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.');
+        }
+        else {
+            core.warning('The runner was not able to contact the cache service. Caching will be skipped');
+        }
+        return false;
+    }
+    return true;
+}
+exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
 
 
 /***/ }),
@@ -46376,11 +46396,11 @@ function run() {
 }
 exports.run = run;
 const cachePackages = () => __awaiter(void 0, void 0, void 0, function* () {
-    const cacheInput = core.getInput('cache');
+    const cacheInput = core.getBooleanInput('cache');
     if (!cacheInput) {
         return;
     }
-    const packageManager = cacheInput.toUpperCase() === 'TRUE' ? 'default' : cacheInput;
+    const packageManager = 'default';
     const state = core.getState(constants_1.State.CacheMatchedKey);
     const primaryKey = core.getState(constants_1.State.CachePrimaryKey);
     const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 492d07f..83f9a0b 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -3689,9 +3689,9 @@ const installer = __importStar(__webpack_require__(923));
 const semver = __importStar(__webpack_require__(280));
 const path_1 = __importDefault(__webpack_require__(622));
 const cache_restore_1 = __webpack_require__(409);
+const cache_utils_1 = __webpack_require__(143);
 const child_process_1 = __importDefault(__webpack_require__(129));
 const fs_1 = __importDefault(__webpack_require__(747));
-const url_1 = __webpack_require__(835);
 function run() {
     return __awaiter(this, void 0, void 0, function* () {
         try {
@@ -3700,11 +3700,11 @@ function run() {
             // If not supplied then problem matchers will still be setup.  Useful for self-hosted.
             //
             let versionSpec = core.getInput('go-version');
-            const cache = core.getInput('cache');
+            const cache = core.getBooleanInput('cache');
             core.info(`Setup go version spec ${versionSpec}`);
             if (versionSpec) {
                 let token = core.getInput('token');
-                let auth = !token || isGhes() ? undefined : `token ${token}`;
+                let auth = !token || cache_utils_1.isGhes() ? undefined : `token ${token}`;
                 const checkLatest = core.getBooleanInput('check-latest');
                 const installDir = yield installer.getGo(versionSpec, checkLatest, auth);
                 core.addPath(path_1.default.join(installDir, 'bin'));
@@ -3719,11 +3719,8 @@ function run() {
                 core.debug(`add bin ${added}`);
                 core.info(`Successfully setup go version ${versionSpec}`);
             }
-            if (cache) {
-                if (isGhes()) {
-                    throw new Error('Caching is not supported on GHES');
-                }
-                const packageManager = cache.toUpperCase() === 'TRUE' ? 'default' : cache;
+            if (cache && cache_utils_1.isCacheFeatureAvailable()) {
+                const packageManager = 'default';
                 const cacheDependencyPath = core.getInput('cache-dependency-path');
                 yield cache_restore_1.restoreCache(packageManager, cacheDependencyPath);
             }
@@ -3775,10 +3772,6 @@ function addBinToPath() {
     });
 }
 exports.addBinToPath = addBinToPath;
-function isGhes() {
-    const ghUrl = new url_1.URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
-    return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
-}
 
 
 /***/ }),
@@ -4171,7 +4164,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
     });
 };
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
+exports.isCacheFeatureAvailable = exports.isGhes = exports.getCacheDirectoryPath = exports.getPackageManagerInfo = exports.getCommandOutput = void 0;
+const cache = __importStar(__webpack_require__(692));
+const core = __importStar(__webpack_require__(470));
 const exec = __importStar(__webpack_require__(986));
 const package_managers_1 = __webpack_require__(813);
 exports.getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
@@ -4198,6 +4193,24 @@ exports.getCacheDirectoryPath = (packageManagerInfo) => __awaiter(void 0, void 0
     }
     return stdout;
 });
+function isGhes() {
+    const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
+    return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
+}
+exports.isGhes = isGhes;
+function isCacheFeatureAvailable() {
+    if (!cache.isFeatureAvailable()) {
+        if (isGhes()) {
+            throw new Error('Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.');
+        }
+        else {
+            core.warning('The runner was not able to contact the cache service. Caching will be skipped');
+        }
+        return false;
+    }
+    return true;
+}
+exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
 
 
 /***/ }),
@@ -34244,6 +34257,7 @@ const cache_utils_1 = __webpack_require__(143);
 exports.restoreCache = (packageManager, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
     const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
     const platform = process.env.RUNNER_OS;
+    const versionSpec = core.getInput('go-version');
     const cachePath = yield cache_utils_1.getCacheDirectoryPath(packageManagerInfo);
     const dependencyFilePath = cacheDependencyPath
         ? cacheDependencyPath
@@ -34252,7 +34266,7 @@ exports.restoreCache = (packageManager, cacheDependencyPath) => __awaiter(void 0
     if (!fileHash) {
         throw new Error('Some specified paths were not resolved, unable to cache dependencies.');
     }
-    const primaryKey = `go-cache-${platform}-${fileHash}`;
+    const primaryKey = `${platform}-go${versionSpec}-${fileHash}`;
     core.debug(`primary key is ${primaryKey}`);
     core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
     const cacheKey = yield cache.restoreCache([cachePath], primaryKey);
diff --git a/package.json b/package.json
index a3ba93c..345f3af 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
   "author": "GitHub",
   "license": "MIT",
   "dependencies": {
-    "@actions/cache": "^2.0.0",
+    "@actions/cache": "^2.0.2",
     "@actions/core": "^1.6.0",
     "@actions/exec": "^1.1.0",
     "@actions/glob": "^0.2.0",
diff --git a/src/cache-restore.ts b/src/cache-restore.ts
index 08438b5..b3769fa 100644
--- a/src/cache-restore.ts
+++ b/src/cache-restore.ts
@@ -14,6 +14,7 @@ export const restoreCache = async (
 ) => {
   const packageManagerInfo = await getPackageManagerInfo(packageManager);
   const platform = process.env.RUNNER_OS;
+  const versionSpec = core.getInput('go-version');
 
   const cachePath = await getCacheDirectoryPath(packageManagerInfo);
 
@@ -28,7 +29,7 @@ export const restoreCache = async (
     );
   }
 
-  const primaryKey = `go-cache-${platform}-${fileHash}`;
+  const primaryKey = `${platform}-go${versionSpec}-${fileHash}`;
   core.debug(`primary key is ${primaryKey}`);
 
   core.saveState(State.CachePrimaryKey, primaryKey);
diff --git a/src/cache-save.ts b/src/cache-save.ts
index 4f2afae..7e3c5b2 100644
--- a/src/cache-save.ts
+++ b/src/cache-save.ts
@@ -21,13 +21,12 @@ export async function run() {
 }
 
 const cachePackages = async () => {
-  const cacheInput = core.getInput('cache');
+  const cacheInput = core.getBooleanInput('cache');
   if (!cacheInput) {
     return;
   }
 
-  const packageManager =
-    cacheInput.toUpperCase() === 'TRUE' ? 'default' : cacheInput;
+  const packageManager = 'default';
 
   const state = core.getState(State.CacheMatchedKey);
   const primaryKey = core.getState(State.CachePrimaryKey);
diff --git a/src/cache-utils.ts b/src/cache-utils.ts
index 13324c3..c5fed4c 100644
--- a/src/cache-utils.ts
+++ b/src/cache-utils.ts
@@ -1,3 +1,5 @@
+import * as cache from '@actions/cache';
+import * as core from '@actions/core';
 import * as exec from '@actions/exec';
 import {supportedPackageManagers, PackageManagerInfo} from './package-managers';
 
@@ -42,3 +44,28 @@ export const getCacheDirectoryPath = async (
 
   return stdout;
 };
+
+export function isGhes(): boolean {
+  const ghUrl = new URL(
+    process.env['GITHUB_SERVER_URL'] || 'https://github.com'
+  );
+  return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
+}
+
+export function isCacheFeatureAvailable(): boolean {
+  if (!cache.isFeatureAvailable()) {
+    if (isGhes()) {
+      throw new Error(
+        'Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.'
+      );
+    } else {
+      core.warning(
+        'The runner was not able to contact the cache service. Caching will be skipped'
+      );
+    }
+
+    return false;
+  }
+
+  return true;
+}
diff --git a/src/main.ts b/src/main.ts
index 21f8ef6..22bb7bc 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -4,9 +4,9 @@ import * as installer from './installer';
 import * as semver from 'semver';
 import path from 'path';
 import {restoreCache} from './cache-restore';
+import {isGhes, isCacheFeatureAvailable} from './cache-utils';
 import cp from 'child_process';
 import fs from 'fs';
-import {URL} from 'url';
 
 export async function run() {
   try {
@@ -16,7 +16,7 @@ export async function run() {
     //
     let versionSpec = core.getInput('go-version');
 
-    const cache = core.getInput('cache');
+    const cache = core.getBooleanInput('cache');
     core.info(`Setup go version spec ${versionSpec}`);
 
     if (versionSpec) {
@@ -41,11 +41,8 @@ export async function run() {
       core.info(`Successfully setup go version ${versionSpec}`);
     }
 
-    if (cache) {
-      if (isGhes()) {
-        throw new Error('Caching is not supported on GHES');
-      }
-      const packageManager = cache.toUpperCase() === 'TRUE' ? 'default' : cache;
+    if (cache && isCacheFeatureAvailable()) {
+      const packageManager = 'default';
       const cacheDependencyPath = core.getInput('cache-dependency-path');
       await restoreCache(packageManager, cacheDependencyPath);
     }
@@ -98,10 +95,3 @@ export async function addBinToPath(): Promise<boolean> {
   }
   return added;
 }
-
-function isGhes(): boolean {
-  const ghUrl = new URL(
-    process.env['GITHUB_SERVER_URL'] || 'https://github.com'
-  );
-  return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
-}