@dlsniper I think that the try-catch clause is unnecessary if you just use `||` instead of `&&` like this:
<pre>
        if (GoSdkUtil.getSysGoRootPath() == null ||
                GoSdkUtil.getSysGoRootPath().isEmpty()) {
            msg += "GOROOT environment variable is empty or could not be detected properly.\n";
            msg += "This means that some tools like go run or go fmt might not run properly.\n\n";
        }
</pre>
The second part of the condition `GoSdkUtil.getSysGoRootPath().isEmpty()` will never been executed (and than throw an NPE) if the first part is true. So the try-catch clause is unnecessary.

And it's the same thing for the other condition on `GoSdkUtil.getSysGoPathPath().isEmpty()`
<pre>
if (GoSdkUtil.getSysGoPathPath() == null ||
                GoSdkUtil.getSysGoPathPath().isEmpty()) {
            msg += "GOPATH environment variable is empty or could not be detected properly.\n";
            msg += "This means that autocomplete might not work correctly.\n\n";
        }
</pre>