   (set-terminal-coding-system 'utf-8)
   (set-keyboard-coding-system 'utf-8))
 
+(defun development/go-onsave-hooks ()
+  (add-hook 'before-save-hook #'lsp-format-buffer t t)
+  (add-hook 'before-save-hook #'lsp-organize-imports t t))
+
+(defun development/golang-setup ()
+  (package-manager/ensure-packages-installed 'go-mode 'lsp-mode 'lsp-ui 'company 'yasnippet)
+  (setq company-idle-delay 0
+	company-minimum-prefix-length 1)
+  (add-hook 'go-mode-hook #'development/golang-onsave-hooks)
+  (add-hook 'go-mode-hook #'lsp-deferred)
+  (add-hook 'go-mode-hook #'yas-minor-mode))
+
 (defun development/html-setup ()
   (package-manager/ensure-packages-installed 'web-mode)
   (setq web-mode-markup-indent-offset 2

	   "* TODO %?\n%u\n%a\n" :clock-in t :clock-resume t)
	  ("m" "Meeting" entry (file org-default-notes-file)
	   "* MEETING with %? :MEETING:\n%t" :clock-in t :clock-resume t)
	    ("i" "Idea" entry (file org-default-notes-file)
	     "* %? :IDEA: \n%t" :clock-in t :clock-resume t)
	    ("n" "Next Task" entry (file+headline org-default-notes-file "tasks")
	     "** NEXT %? \nDEADLINE: %t")))
  (setq org-todo-keywords
	'((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
	  (sequence "WAITING(w@/!)" "INACTIVE(i@/!)" "|" "CANCELLED(c@/!)" "MEETING")))

  (require 'paredit)
  (add-hook 'emacs-lisp-mode-hook 'development/elisp-mode-hook))

(defun development/devops-setup ()
  (package-manager/ensure-packages-installed 'dockerfile-mode 'k8s-mode))

