diff --git a/go/CMakeLists.txt b/go/CMakeLists.txt
index 377c514..4c61eb8 100644
--- a/go/CMakeLists.txt
+++ b/go/CMakeLists.txt
@@ -19,74 +19,83 @@
 
 # Go version
 execute_process(COMMAND ${GO_EXE} version OUTPUT_VARIABLE go_ver OUTPUT_STRIP_TRAILING_WHITESPACE)
-message(STATUS "Found Go: ${GO_EXE} (${go_ver})")
+string(REGEX MATCH "go[0-9]+.[0-9]+[0-9]*" GO_VERSION "${go_ver}")
+string(SUBSTRING ${GO_VERSION} 2 -1 GOLESS_VERSION)
+message(STATUS "Found Go: ${GO_EXE} (${go_ver}) (${GOLESS_VERSION}).")
 
-# NOTE: go test -race flag is not included by default, it causes problems on several platforms:
-# - ubuntu up to trust: link errors
-# - ubuntu from xenial: requires extra package golang-race-detector-runtime
-# - fedora with gccgo: complains about "import cycles"
-# (Works well on fedora with original go)
-# Enable manually with -DGO_TEST_FLAGS="-v -race"
-
-set(GO_BUILD_FLAGS "" CACHE STRING "Flags for 'go build'")
-set(GO_VET_FLAGS "-v" CACHE STRING "Flags for 'go test'")
-set(GO_TEST_FLAGS "-v" CACHE STRING "Flags for 'go test'")
-
-# Flags that differ for golang go and gcc go.
-if (go_ver MATCHES "gccgo")
-  set(GO_RPATH_FLAGS -gccgoflags "-Wl,-rpath=${PN_C_LIBRARY_DIR}")
-else()
-  set(GO_RPATH_FLAGS -ldflags "-r ${PN_C_LIBRARY_DIR}")
+if (GOLESS_VERSION VERSION_LESS 1.11)
+  set(BUILD_GO "OFF")
+  message(STATUS "Go: ${GO_EXE} (${GOLESS_VERSION}) version to low. At least 1.11 required.")
 endif()
 
-separate_arguments(GO_BUILD_FLAGS)
-separate_arguments(GO_TEST_FLAGS)
+if (BUILD_GO)
+  # NOTE: go test -race flag is not included by default, it causes problems on several platforms:
+  # - ubuntu up to trust: link errors
+  # - ubuntu from xenial: requires extra package golang-race-detector-runtime
+  # - fedora with gccgo: complains about "import cycles"
+  # (Works well on fedora with original go)
+  # Enable manually with -DGO_TEST_FLAGS="-v -race"
 
-# Create a Go tree in the binary directory, link pkg to the source directory, link go.mod file
-set(GOPATH ${CMAKE_CURRENT_BINARY_DIR})
-add_custom_target(go-pkg-link ALL
-  COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/pkg ${GOPATH}/pkg)
-add_custom_target(go-mod-link ALL
-        COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/../go.mod ${GOPATH}/../go.mod)
+  set(GO_BUILD_FLAGS "" CACHE STRING "Flags for 'go build'")
+  set(GO_VET_FLAGS "-v" CACHE STRING "Flags for 'go test'")
+  set(GO_TEST_FLAGS "-v" CACHE STRING "Flags for 'go test'")
 
-# Following are CACHE INTERNAL so examples/CMakeLists.txt can see them.
-set(GO_ENV ${PN_ENV_SCRIPT} --
-  "GOPATH=${GOPATH}"
-  "CGO_CFLAGS=-I${PN_C_INCLUDE_DIR}"
-  "CGO_LDFLAGS=-L${PN_C_LIBRARY_DIR}"
-  "PN_INTEROP_DIR=${CMAKE_SOURCE_DIR}/tests/interop"
-  "SASLPASSWD=${CyrusSASL_Saslpasswd_EXECUTABLE}"
-  CACHE INTERNAL "Run a command with Go environment variables")
+  # Flags that differ for golang go and gcc go.
+  if (go_ver MATCHES "gccgo")
+    set(GO_RPATH_FLAGS -gccgoflags "-Wl,-rpath=${PN_C_LIBRARY_DIR}")
+  else()
+    set(GO_RPATH_FLAGS -ldflags "-r ${PN_C_LIBRARY_DIR}")
+  endif()
 
-set(GO ${GO_ENV} ${GO_EXE} CACHE INTERNAL "Run go with environment set")
+  separate_arguments(GO_BUILD_FLAGS)
+  separate_arguments(GO_TEST_FLAGS)
 
-set(GO_BUILD ${GO} build ${GO_BUILD_FLAGS} ${GO_RPATH_FLAGS} CACHE INTERNAL "Run go build")
-set(GO_INSTALL ${GO} install ${GO_BUILD_FLAGS} CACHE INTERNAL "Run go install" )
-set(GO_TEST ${GO} test ${GO_BUILD_FLAGS} ${GO_RPATH_FLAGS} ${GO_TEST_FLAGS} CACHE INTERNAL "Run go test")
+  # Create a Go tree in the binary directory, link pkg to the source directory, link go.mod file
+  set(GOPATH ${CMAKE_CURRENT_BINARY_DIR})
+  add_custom_target(go-pkg-link ALL
+    COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/pkg ${GOPATH}/pkg)
+  add_custom_target(go-mod-link ALL
+          COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/../go.mod ${GOPATH}/../go.mod)
 
-# The go build tools handle dependency checks and incremental builds better than
-# CMake so just run them every time, they do nothing if nothing needs to be
-# done.
-add_custom_target(go-build ALL
-  COMMAND ${GO_INSTALL} $ENV{PWD}/go/pkg/...
-  DEPENDS qpid-proton-core go-pkg-link go-mod-link
-  WORKING_DIRECTORY $ENV{PWD})
+  # Following are CACHE INTERNAL so examples/CMakeLists.txt can see them.
+  set(GO_ENV ${PN_ENV_SCRIPT} --
+    "GOPATH=${GOPATH}"
+    "CGO_CFLAGS=-I${PN_C_INCLUDE_DIR}"
+    "CGO_LDFLAGS=-L${PN_C_LIBRARY_DIR}"
+    "PN_INTEROP_DIR=${CMAKE_SOURCE_DIR}/tests/interop"
+    "SASLPASSWD=${CyrusSASL_Saslpasswd_EXECUTABLE}"
+    CACHE INTERNAL "Run a command with Go environment variables")
 
-add_test(
-  NAME go-test COMMAND ${GO_TEST} $ENV{PWD}/go/pkg/...
-  WORKING_DIRECTORY $ENV{PWD})
+  set(GO ${GO_ENV} ${GO_EXE} CACHE INTERNAL "Run go with environment set")
 
-# Clean up go output directories.
-list(APPEND ADDITIONAL_MAKE_CLEAN_FILES ${GOPATH}/pkg ${GOPATH}/bin)
+  set(GO_BUILD ${GO} build ${GO_BUILD_FLAGS} ${GO_RPATH_FLAGS} CACHE INTERNAL "Run go build")
+  set(GO_INSTALL ${GO} install ${GO_BUILD_FLAGS} CACHE INTERNAL "Run go install" )
+  set(GO_TEST ${GO} test ${GO_BUILD_FLAGS} ${GO_RPATH_FLAGS} ${GO_TEST_FLAGS} CACHE INTERNAL "Run go test")
 
-add_subdirectory(examples)
+  # The go build tools handle dependency checks and incremental builds better than
+  # CMake so just run them every time, they do nothing if nothing needs to be
+  # done.
+  add_custom_target(go-build ALL
+    COMMAND ${GO_INSTALL} $ENV{PWD}/go/pkg/...
+    DEPENDS qpid-proton-core go-pkg-link go-mod-link
+    WORKING_DIRECTORY $ENV{PWD})
 
-# Install go sources.
-set (GO_INSTALL_DIR ${SHARE_INSTALL_DIR}/gocode/pkg CACHE PATH "Installation directory for Go code")
-mark_as_advanced (GO_INSTALL_DIR)
+  add_test(
+    NAME go-test COMMAND ${GO_TEST} $ENV{PWD}/go/pkg/...
+    WORKING_DIRECTORY $ENV{PWD})
 
-install(DIRECTORY pkg DESTINATION ${GO_INSTALL_DIR} COMPONENT Go)
-install(DIRECTORY examples/
-  DESTINATION "${PROTON_SHARE}/examples/go"
-  COMPONENT Go
-  PATTERN "CMakeLists.txt" EXCLUDE)
+  # Clean up go output directories.
+  list(APPEND ADDITIONAL_MAKE_CLEAN_FILES ${GOPATH}/pkg ${GOPATH}/bin)
+
+  add_subdirectory(examples)
+
+  # Install go sources.
+  set (GO_INSTALL_DIR ${SHARE_INSTALL_DIR}/gocode/pkg CACHE PATH "Installation directory for Go code")
+  mark_as_advanced (GO_INSTALL_DIR)
+
+  install(DIRECTORY pkg DESTINATION ${GO_INSTALL_DIR} COMPONENT Go)
+  install(DIRECTORY examples/
+    DESTINATION "${PROTON_SHARE}/examples/go"
+    COMPONENT Go
+    PATTERN "CMakeLists.txt" EXCLUDE)
+endif()
