docs/Nixpkgs/Languages-And-Frameworks/go.section/index.html

3280 lines
74 KiB
HTML
Raw Permalink Normal View History

2024-07-24 19:14:02 +00:00
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Aux Documentation">
<meta name="author" content="Nixpkgs Aux, and Lix Contributors">
<link rel="canonical" href="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/go.section/">
<link rel="prev" href="../gnome.section/">
<link rel="next" href="../gradle.section/">
<link rel="icon" href="../../../assets/aux-logo.svg">
<meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.29">
<title>Go - Aux Docs</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.76a95c52.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.bunny.net/css?family=IBM+Plex+Sans:300,300i,400,400i,700,700i%7CIBM+Plex+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"IBM Plex Sans";--md-code-font:"IBM Plex Mono"}</style>
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="Go {#sec-language-go} - Aux Docs" >
<meta property="og:description" content="Aux Documentation" >
<meta property="og:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/go.section.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="https://docs.auxolotl.org/Nixpkgs/Languages-And-Frameworks/go.section/" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Go {#sec-language-go} - Aux Docs" >
<meta name="twitter:description" content="Aux Documentation" >
<meta name="twitter:image" content="https://docs.auxolotl.org/assets/images/social/Nixpkgs/Languages-And-Frameworks/go.section.png" >
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#sec-language-go" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="Aux Docs" class="md-header__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Aux Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Go
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Dark Mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Dark Mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="blue" aria-label="Light Mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Light Mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5c-.84 0-1.65.15-2.39.42L12 2M3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29L3.34 7m.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14L3.36 17M20.65 7l-1.77 3.79a7.023 7.023 0 0 0-2.38-4.15l4.15.36m-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29L20.64 17M12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44L12 22Z"/></svg>
</label>
</form>
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../.." class="md-tabs__link">
Aux Documentation Hub
</a>
</li>
<li class="md-tabs__item">
<a href="../../../TODO/" class="md-tabs__link">
TODO
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Aux/" class="md-tabs__link">
Aux
</a>
</li>
<li class="md-tabs__item">
<a href="../../../Lix/" class="md-tabs__link">
Lix
</a>
</li>
<li class="md-tabs__item">
<a href="../../../NixOS/appstream/" class="md-tabs__link">
NixOS
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../../" class="md-tabs__link">
Nixpkgs
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="Aux Docs" class="md-nav__button md-logo" aria-label="Aux Docs" data-md-component="logo">
<img src="../../../assets/aux-logo.svg" alt="logo">
</a>
Aux Docs
</label>
<div class="md-nav__source">
<a href="https://git.auxolotl.org/auxolotl/docs" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</div>
<div class="md-source__repository">
auxolotl/docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
<span class="md-ellipsis">
Aux Documentation Hub
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../TODO/" class="md-nav__link">
<span class="md-ellipsis">
TODO
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Aux/" class="md-nav__link">
<span class="md-ellipsis">
Aux
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../Lix/" class="md-nav__link">
<span class="md-ellipsis">
Lix
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../../NixOS/appstream/" class="md-nav__link">
<span class="md-ellipsis">
NixOS
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
<div class="md-nav__link md-nav__container">
<a href="../../" class="md-nav__link ">
<span class="md-ellipsis">
Nixpkgs
</span>
</a>
<label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Nixpkgs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../options/" class="md-nav__link">
<span class="md-ellipsis">
Options
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Build-Helpers/" class="md-nav__link">
<span class="md-ellipsis">
Build Helpers
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Development/" class="md-nav__link">
<span class="md-ellipsis">
Development
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Functions/" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Hooks/" class="md-nav__link">
<span class="md-ellipsis">
Hooks
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
Languages And Frameworks
</span>
</a>
<label class="md-nav__link " for="__nav_6_7" id="__nav_6_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6_7">
<span class="md-nav__icon md-icon"></span>
Languages And Frameworks
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../agda.section/" class="md-nav__link">
<span class="md-ellipsis">
Agda
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../android.section/" class="md-nav__link">
<span class="md-ellipsis">
Android
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../beam.section/" class="md-nav__link">
<span class="md-ellipsis">
BEAM Languages (Erlang, Elixir &amp; LFE)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bower.section/" class="md-nav__link">
<span class="md-ellipsis">
Bower
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../chicken.section/" class="md-nav__link">
<span class="md-ellipsis">
CHICKEN
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../coq.section/" class="md-nav__link">
<span class="md-ellipsis">
Coq and coq packages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../crystal.section/" class="md-nav__link">
<span class="md-ellipsis">
Crystal
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuda.section/" class="md-nav__link">
<span class="md-ellipsis">
CUDA
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../cuelang.section/" class="md-nav__link">
<span class="md-ellipsis">
Cue (Cuelang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dart.section/" class="md-nav__link">
<span class="md-ellipsis">
Dart
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dhall.section/" class="md-nav__link">
<span class="md-ellipsis">
Dhall
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dlang.section/" class="md-nav__link">
<span class="md-ellipsis">
D (Dlang)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet.section/" class="md-nav__link">
<span class="md-ellipsis">
Dotnet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../emscripten.section/" class="md-nav__link">
<span class="md-ellipsis">
Emscripten
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../gnome.section/" class="md-nav__link">
<span class="md-ellipsis">
GNOME
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Go
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Go
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#ssec-language-go" class="md-nav__link">
<span class="md-ellipsis">
Building Go modules with buildGoModule
</span>
</a>
<nav class="md-nav" aria-label="Building Go modules with buildGoModule">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#buildgomodule-parameters" class="md-nav__link">
<span class="md-ellipsis">
Attributes of buildGoModule
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ex-buildGoModule" class="md-nav__link">
<span class="md-ellipsis">
Example for buildGoModule
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-go-legacy" class="md-nav__link">
<span class="md-ellipsis">
buildGoPackage (legacy)
</span>
</a>
<nav class="md-nav" aria-label="buildGoPackage (legacy)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#buildGoPackage-migration" class="md-nav__link">
<span class="md-ellipsis">
Migrating from buildGoPackage to buildGoModule
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-for-buildgopackage-example" class="md-nav__link">
<span class="md-ellipsis">
Example for buildGoPackage!!! example
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-go-common-attributes" class="md-nav__link">
<span class="md-ellipsis">
Attributes used by both builders
</span>
</a>
<nav class="md-nav" aria-label="Attributes used by both builders">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#var-go-ldflags" class="md-nav__link">
<span class="md-ellipsis">
ldflags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-tags" class="md-nav__link">
<span class="md-ellipsis">
tags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-deleteVendor" class="md-nav__link">
<span class="md-ellipsis">
deleteVendor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-subPackages" class="md-nav__link">
<span class="md-ellipsis">
subPackages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-excludedPackages" class="md-nav__link">
<span class="md-ellipsis">
excludedPackages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-CGO_ENABLED" class="md-nav__link">
<span class="md-ellipsis">
CGO_ENABLED
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-enableParallelBuilding" class="md-nav__link">
<span class="md-ellipsis">
enableParallelBuilding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-allowGoReference" class="md-nav__link">
<span class="md-ellipsis">
allowGoReference
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-go-environment" class="md-nav__link">
<span class="md-ellipsis">
Controlling the Go environment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-skip-go-tests" class="md-nav__link">
<span class="md-ellipsis">
Skipping tests
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../gradle.section/" class="md-nav__link">
<span class="md-ellipsis">
Gradle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hare.section/" class="md-nav__link">
<span class="md-ellipsis">
Hare
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../haskell.section/" class="md-nav__link">
<span class="md-ellipsis">
Haskell
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../hy.section/" class="md-nav__link">
<span class="md-ellipsis">
Hy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../idris2.section/" class="md-nav__link">
<span class="md-ellipsis">
Idris2
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ios.section/" class="md-nav__link">
<span class="md-ellipsis">
iOS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../java.section/" class="md-nav__link">
<span class="md-ellipsis">
Java
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript.section/" class="md-nav__link">
<span class="md-ellipsis">
Javascript
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../julia.section/" class="md-nav__link">
<span class="md-ellipsis">
Julia
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lisp.section/" class="md-nav__link">
<span class="md-ellipsis">
lisp-modules
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../lua.section/" class="md-nav__link">
<span class="md-ellipsis">
Lua
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maven.section/" class="md-nav__link">
<span class="md-ellipsis">
Maven
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../nim.section/" class="md-nav__link">
<span class="md-ellipsis">
Nim
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ocaml.section/" class="md-nav__link">
<span class="md-ellipsis">
OCaml
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../octave.section/" class="md-nav__link">
<span class="md-ellipsis">
Octave
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../perl.section/" class="md-nav__link">
<span class="md-ellipsis">
Perl
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php.section/" class="md-nav__link">
<span class="md-ellipsis">
PHP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../pkg-config.section/" class="md-nav__link">
<span class="md-ellipsis">
pkg-config
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../python.section/" class="md-nav__link">
<span class="md-ellipsis">
Python
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../qt.section/" class="md-nav__link">
<span class="md-ellipsis">
Qt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../r.section/" class="md-nav__link">
<span class="md-ellipsis">
R
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ruby.section/" class="md-nav__link">
<span class="md-ellipsis">
Ruby
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust.section/" class="md-nav__link">
<span class="md-ellipsis">
Rust
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scheme.section/" class="md-nav__link">
<span class="md-ellipsis">
Scheme
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../swift.section/" class="md-nav__link">
<span class="md-ellipsis">
Swift
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../texlive.section/" class="md-nav__link">
<span class="md-ellipsis">
TeX Live
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../titanium.section/" class="md-nav__link">
<span class="md-ellipsis">
Titanium
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../vim.section/" class="md-nav__link">
<span class="md-ellipsis">
Vim
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Library-Reference/asserts/" class="md-nav__link">
<span class="md-ellipsis">
Library Reference
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Module-System/module-system.chapter/" class="md-nav__link">
<span class="md-ellipsis">
Module System
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Packages/" class="md-nav__link">
<span class="md-ellipsis">
Packages
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Standard-Environment/" class="md-nav__link">
<span class="md-ellipsis">
Standard Environment
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--pruned md-nav__item--nested">
<a href="../../Using-Nixpkgs/" class="md-nav__link">
<span class="md-ellipsis">
Using Nixpkgs
</span>
<span class="md-nav__icon md-icon"></span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#ssec-language-go" class="md-nav__link">
<span class="md-ellipsis">
Building Go modules with buildGoModule
</span>
</a>
<nav class="md-nav" aria-label="Building Go modules with buildGoModule">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#buildgomodule-parameters" class="md-nav__link">
<span class="md-ellipsis">
Attributes of buildGoModule
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ex-buildGoModule" class="md-nav__link">
<span class="md-ellipsis">
Example for buildGoModule
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-go-legacy" class="md-nav__link">
<span class="md-ellipsis">
buildGoPackage (legacy)
</span>
</a>
<nav class="md-nav" aria-label="buildGoPackage (legacy)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#buildGoPackage-migration" class="md-nav__link">
<span class="md-ellipsis">
Migrating from buildGoPackage to buildGoModule
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-for-buildgopackage-example" class="md-nav__link">
<span class="md-ellipsis">
Example for buildGoPackage!!! example
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-go-common-attributes" class="md-nav__link">
<span class="md-ellipsis">
Attributes used by both builders
</span>
</a>
<nav class="md-nav" aria-label="Attributes used by both builders">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#var-go-ldflags" class="md-nav__link">
<span class="md-ellipsis">
ldflags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-tags" class="md-nav__link">
<span class="md-ellipsis">
tags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-deleteVendor" class="md-nav__link">
<span class="md-ellipsis">
deleteVendor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-subPackages" class="md-nav__link">
<span class="md-ellipsis">
subPackages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-excludedPackages" class="md-nav__link">
<span class="md-ellipsis">
excludedPackages
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-CGO_ENABLED" class="md-nav__link">
<span class="md-ellipsis">
CGO_ENABLED
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-enableParallelBuilding" class="md-nav__link">
<span class="md-ellipsis">
enableParallelBuilding
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#var-go-allowGoReference" class="md-nav__link">
<span class="md-ellipsis">
allowGoReference
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#ssec-go-environment" class="md-nav__link">
<span class="md-ellipsis">
Controlling the Go environment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#ssec-skip-go-tests" class="md-nav__link">
<span class="md-ellipsis">
Skipping tests
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="sec-language-go">Go</h1>
<h2 id="ssec-language-go">Building Go modules with <code>buildGoModule</code></h2>
<p>The function <code>buildGoModule</code> builds Go programs managed with Go modules. It builds <a href="https://go.dev/wiki/Modules">Go Modules</a> through a two phase build:</p>
<ul>
<li>An intermediate fetcher derivation called <code>goModules</code>. This derivation will be used to fetch all the dependencies of the Go module.</li>
<li>A final derivation will use the output of the intermediate derivation to build the binaries and produce the final output.</li>
</ul>
<h3 id="buildgomodule-parameters">Attributes of <code>buildGoModule</code></h3>
<p>The <code>buildGoModule</code> function accepts the following parameters in addition to the <a href="#ssec-go-common-attributes">attributes accepted by both Go builders</a>:</p>
<ul>
<li><code>vendorHash</code>: is the hash of the output of the intermediate fetcher derivation (the dependencies of the Go modules).</li>
</ul>
<p><code>vendorHash</code> can be set to <code>null</code>.
In that case, rather than fetching the dependencies, the dependencies already vendored in the <code>vendor</code> directory of the source repo will be used.</p>
<p>To avoid updating this field when dependencies change, run <code>go mod vendor</code> in your source repo and set <code>vendorHash = null;</code>.
You can read more about <a href="https://go.dev/ref/mod#vendoring">vendoring in the Go documentation</a>.</p>
<p>To obtain the actual hash, set <code>vendorHash = lib.fakeHash;</code> and run the build (<a href="#sec-source-hashes">more details here</a>).
- <code>proxyVendor</code>: If <code>true</code>, the intermediate fetcher downloads dependencies from the
<a href="https://go.dev/ref/mod#module-proxy">Go module proxy</a> (using <code>go mod download</code>) instead of vendoring them. The resulting
<a href="https://go.dev/ref/mod#module-cache">module cache</a> is then passed to the final derivation.</p>
<p>This is useful if your code depends on C code and <code>go mod tidy</code> does not include the needed sources to build or
if any dependency has case-insensitive conflicts which will produce platform-dependent <code>vendorHash</code> checksums.</p>
<p>Defaults to <code>false</code>.
- <code>modPostBuild</code>: Shell commands to run after the build of the goModules executes <code>go mod vendor</code>, and before calculating fixed output derivation's <code>vendorHash</code>.
Note that if you change this attribute, you need to update <code>vendorHash</code> attribute.
- <code>modRoot</code>: The root directory of the Go module that contains the <code>go.mod</code> file.
Defaults to <code>./</code>, which is the root of <code>src</code>.</p>
<h3 id="ex-buildGoModule">Example for <code>buildGoModule</code></h3>
<p>The following is an example expression using <code>buildGoModule</code>:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">pet</span> <span class="o">=</span> buildGoModule <span class="k">rec</span> <span class="p">{</span>
<span class="ss">pname</span> <span class="o">=</span> <span class="s2">&quot;pet&quot;</span><span class="p">;</span>
<span class="ss">version</span> <span class="o">=</span> <span class="s2">&quot;0.3.4&quot;</span><span class="p">;</span>
<span class="ss">src</span> <span class="o">=</span> fetchFromGitHub <span class="p">{</span>
<span class="ss">owner</span> <span class="o">=</span> <span class="s2">&quot;knqyf263&quot;</span><span class="p">;</span>
<span class="ss">repo</span> <span class="o">=</span> <span class="s2">&quot;pet&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> <span class="s2">&quot;v</span><span class="si">${</span>version<span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-Gjw1dRrgM8D3G7v6WIM2+50r4HmTXvx0Xxme2fH9TlQ=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="ss">vendorHash</span> <span class="o">=</span> <span class="s2">&quot;sha256-ciBIR+a1oaYH+H1PcC8cD8ncfJczk1IiJ8iYNM+R6aA=&quot;</span><span class="p">;</span>
<span class="ss">meta</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">description</span> <span class="o">=</span> <span class="s2">&quot;Simple command-line snippet manager, written in Go&quot;</span><span class="p">;</span>
<span class="ss">homepage</span> <span class="o">=</span> <span class="s2">&quot;https://github.com/knqyf263/pet&quot;</span><span class="p">;</span>
<span class="ss">license</span> <span class="o">=</span> lib<span class="o">.</span>licenses<span class="o">.</span>mit<span class="p">;</span>
<span class="ss">maintainers</span> <span class="o">=</span> <span class="k">with</span> lib<span class="o">.</span>maintainers<span class="p">;</span> <span class="p">[</span> kalbasit <span class="p">];</span>
<span class="p">};</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="ssec-go-legacy"><code>buildGoPackage</code> (legacy)</h2>
<p>The function <code>buildGoPackage</code> builds legacy Go programs, not supporting Go modules.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p><code>buildGoPackage</code> is deprecated and will be removed for the 25.05 release.</p>
</div>
<h3 id="buildGoPackage-migration">Migrating from <code>buildGoPackage</code> to <code>buildGoModule</code></h3>
<p>Go modules, released 6y ago, are now widely adopted in the ecosystem.
Most upstream projects are using Go modules, and the tooling previously used for dependency management in Go is mostly deprecated, archived or at least unmaintained at this point.</p>
<p>In case a project doesn't have external dependencies or dependencies are vendored in a way understood by <code>go mod init</code>, migration can be done with a few changes in the package.</p>
<ul>
<li>Switch the builder from <code>buildGoPackage</code> to <code>buildGoModule</code></li>
<li>Remove <code>goPackagePath</code> and other attributes specific to <code>buildGoPackage</code></li>
<li>Set <code>vendorHash = null;</code></li>
<li>Run <code>go mod init &lt;module name&gt;</code> in <code>postPatch</code></li>
</ul>
<p>In case the package has external dependencies that aren't vendored or the build setup is more complex the upstream source might need to be patched.
Examples for the migration can be found in the <a href="https://github.com/NixOS/nixpkgs/issues/318069">issue tracking migration withing nixpkgs</a>.</p>
<h3 id="example-for-buildgopackage-example">Example for <code>buildGoPackage</code>!!! example</h3>
<p>In the following is an example expression using <code>buildGoPackage</code>, the following arguments are of special significance to the function:</p>
<ul>
<li><code>goPackagePath</code> specifies the package's canonical Go import path.</li>
<li><code>goDeps</code> is where the Go dependencies of a Go program are listed as a list of package source identified by Go import path. It could be imported as a separate <code>deps.nix</code> file for readability. The dependency data structure is described below.</li>
</ul>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">deis</span> <span class="o">=</span> buildGoPackage <span class="k">rec</span> <span class="p">{</span>
<span class="ss">pname</span> <span class="o">=</span> <span class="s2">&quot;deis&quot;</span><span class="p">;</span>
<span class="ss">version</span> <span class="o">=</span> <span class="s2">&quot;1.13.0&quot;</span><span class="p">;</span>
<span class="ss">goPackagePath</span> <span class="o">=</span> <span class="s2">&quot;github.com/deis/deis&quot;</span><span class="p">;</span>
<span class="ss">src</span> <span class="o">=</span> fetchFromGitHub <span class="p">{</span>
<span class="ss">owner</span> <span class="o">=</span> <span class="s2">&quot;deis&quot;</span><span class="p">;</span>
<span class="ss">repo</span> <span class="o">=</span> <span class="s2">&quot;deis&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> <span class="s2">&quot;v</span><span class="si">${</span>version<span class="si">}</span><span class="s2">&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-XCPD4LNWtAd8uz7zyCLRfT8rzxycIUmTACjU03GnaeM=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="ss">goDeps</span> <span class="o">=</span> <span class="l">./deps.nix</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}</span>
</code></pre></div>
<p>The <code>goDeps</code> attribute can be imported from a separate <code>nix</code> file that defines which Go libraries are needed and should be included in <code>GOPATH</code> for <code>buildPhase</code>:</p>
<div class="highlight"><pre><span></span><code><span class="c1"># deps.nix</span>
<span class="p">[</span> <span class="c1"># goDeps is a list of Go dependencies.</span>
<span class="p">{</span>
<span class="c1"># goPackagePath specifies Go package import path.</span>
<span class="ss">goPackagePath</span> <span class="o">=</span> <span class="s2">&quot;gopkg.in/yaml.v2&quot;</span><span class="p">;</span>
<span class="ss">fetch</span> <span class="o">=</span> <span class="p">{</span>
<span class="c1"># `fetch type` that needs to be used to get package source.</span>
<span class="c1"># If `git` is used there should be `url`, `rev` and `hash` defined next to it.</span>
<span class="ss">type</span> <span class="o">=</span> <span class="s2">&quot;git&quot;</span><span class="p">;</span>
<span class="ss">url</span> <span class="o">=</span> <span class="s2">&quot;https://gopkg.in/yaml.v2&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> <span class="s2">&quot;a83829b6f1293c91addabc89d0571c246397bbf4&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-EMrdy0M0tNuOcITaTAmT5/dPSKPXwHDKCXFpkGbVjdQ=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}</span>
<span class="p">{</span>
<span class="ss">goPackagePath</span> <span class="o">=</span> <span class="s2">&quot;github.com/docopt/docopt-go&quot;</span><span class="p">;</span>
<span class="ss">fetch</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">type</span> <span class="o">=</span> <span class="s2">&quot;git&quot;</span><span class="p">;</span>
<span class="ss">url</span> <span class="o">=</span> <span class="s2">&quot;https://github.com/docopt/docopt-go&quot;</span><span class="p">;</span>
<span class="ss">rev</span> <span class="o">=</span> <span class="s2">&quot;784ddc588536785e7299f7272f39101f7faccc3f&quot;</span><span class="p">;</span>
<span class="ss">hash</span> <span class="o">=</span> <span class="s2">&quot;sha256-Uo89zjE+v3R7zzOq/gbQOHj3SMYt2W1nDHS7RCUin3M=&quot;</span><span class="p">;</span>
<span class="p">};</span>
<span class="p">}</span>
<span class="p">]</span>
</code></pre></div>
<p>To extract dependency information from a Go package in automated way use <a href="https://github.com/kamilchm/go2nix">go2nix (deprecated)</a>. It can produce complete derivation and <code>goDeps</code> file for Go programs.</p>
<p>You may use Go packages installed into the active Nix profiles by adding the following to your ~/.bashrc:</p>
<div class="highlight"><pre><span></span><code><span class="k">for</span><span class="w"> </span>p<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nv">$NIX_PROFILES</span><span class="p">;</span><span class="w"> </span><span class="k">do</span>
<span class="w"> </span><span class="nv">GOPATH</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$p</span><span class="s2">/share/go:</span><span class="nv">$GOPATH</span><span class="s2">&quot;</span>
<span class="k">done</span>
</code></pre></div>
<h2 id="ssec-go-common-attributes">Attributes used by both builders</h2>
<p>Many attributes <a href="#variables-controlling-the-build-phase">controlling the build phase</a> are respected by both <code>buildGoModule</code> and <code>buildGoPackage</code>. Note that <code>buildGoModule</code> reads the following attributes also when building the <code>vendor/</code> goModules fixed output derivation as well:</p>
<ul>
<li><a href="#var-stdenv-sourceRoot"><code>sourceRoot</code></a></li>
<li><a href="#var-stdenv-prePatch"><code>prePatch</code></a></li>
<li><a href="#var-stdenv-patches"><code>patches</code></a></li>
<li><a href="#var-stdenv-patchFlags"><code>patchFlags</code></a></li>
<li><a href="#var-stdenv-postPatch"><code>postPatch</code></a></li>
<li><a href="#var-stdenv-preBuild"><code>preBuild</code></a></li>
<li><code>env</code>: useful for passing down variables such as <code>GOWORK</code>.</li>
</ul>
<p>To control test execution of the build derivation, the following attributes are of interest:</p>
<ul>
<li><a href="#var-stdenv-checkInputs"><code>checkInputs</code></a></li>
<li><a href="#var-stdenv-preCheck"><code>preCheck</code></a></li>
<li><a href="#var-stdenv-checkFlags"><code>checkFlags</code></a></li>
</ul>
<p>In addition to the above attributes, and the many more variables respected also by <code>stdenv.mkDerivation</code>, both <code>buildGoModule</code> and <code>buildGoPackage</code> respect Go-specific attributes that tweak them to behave slightly differently:</p>
<h3 id="var-go-ldflags"><code>ldflags</code></h3>
<p>A string list of flags to pass to the Go linker tool via the <code>-ldflags</code> argument of <code>go build</code>. Possible values can be retrieved by running <code>go tool link --help</code>.
The most common use case for this argument is to make the resulting executable aware of its own version by injecting the value of string variable using the <code>-X</code> flag. For example:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">ldflags</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;-X main.Version=</span><span class="si">${</span>version<span class="si">}</span><span class="s2">&quot;</span>
<span class="s2">&quot;-X main.Commit=</span><span class="si">${</span>version<span class="si">}</span><span class="s2">&quot;</span>
<span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="var-go-tags"><code>tags</code></h3>
<p>A string list of <a href="https://pkg.go.dev/cmd/go#hdr-Build_constraints">Go build tags (also called build constraints)</a> that are passed via the <code>-tags</code> argument of <code>go build</code>. These constraints control whether Go files from the source should be included in the build. For example:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">tags</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;production&quot;</span>
<span class="s2">&quot;sqlite&quot;</span>
<span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<p>Tags can also be set conditionally:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">tags</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&quot;production&quot;</span> <span class="p">]</span> <span class="o">++</span> lib<span class="o">.</span>optionals withSqlite <span class="p">[</span> <span class="s2">&quot;sqlite&quot;</span> <span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="var-go-deleteVendor"><code>deleteVendor</code></h3>
<p>If set to <code>true</code>, removes the pre-existing vendor directory. This should only be used if the dependencies included in the vendor folder are broken or incomplete.</p>
<h3 id="var-go-subPackages"><code>subPackages</code></h3>
<p>Specified as a string or list of strings. Limits the builder from building child packages that have not been listed. If <code>subPackages</code> is not specified, all child packages will be built.</p>
<p>Many Go projects keep the main package in a <code>cmd</code> directory.
Following example could be used to only build the example-cli and example-server binaries:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">subPackages</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;cmd/example-cli&quot;</span>
<span class="s2">&quot;cmd/example-server&quot;</span>
<span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="var-go-excludedPackages"><code>excludedPackages</code></h3>
<p>Specified as a string or list of strings. Causes the builder to skip building child packages that match any of the provided values.</p>
<h3 id="var-go-CGO_ENABLED"><code>CGO_ENABLED</code></h3>
<p>When set to <code>0</code>, the <a href="https://pkg.go.dev/cmd/cgo">cgo</a> command is disabled. As consequence, the build
program can't link against C libraries anymore, and the resulting binary is statically linked.</p>
<p>When building with CGO enabled, Go will likely link some packages from the Go standard library against C libraries,
even when the target code does not explicitly call into C dependencies. With <code>CGO_ENABLED = 0;</code>, Go
will always use the Go native implementation of these internal packages. For reference see
<a href="https://pkg.go.dev/net#hdr-Name_Resolution">net</a> and <a href="https://pkg.go.dev/os/user#pkg-overview">os/user</a> packages.
Notice that the decision whether these packages should use native Go implementation or not can also be controlled
on a per package level using build tags (<code>tags</code>). In case CGO is disabled, these tags have no additional effect.</p>
<p>When a Go program depends on C libraries, place those dependencies in <code>buildInputs</code>:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">buildInputs</span> <span class="o">=</span> <span class="p">[</span>
libvirt
libxml2
<span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<p><code>CGO_ENABLED</code> defaults to <code>1</code>.</p>
<h3 id="var-go-enableParallelBuilding"><code>enableParallelBuilding</code></h3>
<p>Whether builds and tests should run in parallel.</p>
<p>Defaults to <code>true</code>.</p>
<h3 id="var-go-allowGoReference"><code>allowGoReference</code></h3>
<p>Whether the build result should be allowed to contain references to the Go tool chain. This might be needed for programs that are coupled with the compiler, but shouldn't be set without a good reason.</p>
<p>Defaults to <code>false</code></p>
<h2 id="ssec-go-environment">Controlling the Go environment</h2>
<p>The Go build can be further tweaked by setting environment variables. In most cases, this isn't needed. Possible values can be found in the <a href="https://pkg.go.dev/cmd/go#hdr-Environment_variables">Go documentation of accepted environment variables</a>. Notice that some of these flags are set by the builder itself and should not be set explicitly. If in doubt, grep the implementation of the builder.</p>
<h2 id="ssec-skip-go-tests">Skipping tests</h2>
<p><code>buildGoModule</code> runs tests by default. Failing tests can be disabled using the <code>checkFlags</code> parameter.
This is done with the <a href="https://pkg.go.dev/cmd/go#hdr-Testing_flags"><code>-skip</code> or <code>-run</code></a> flags of the <code>go test</code> command.</p>
<p>For example, only a selection of tests could be run with:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="c1"># -run and -skip accept regular expressions</span>
<span class="ss">checkFlags</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;-run=^Test(Simple|Fast)$&quot;</span>
<span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<p>If a larger amount of tests should be skipped, the following pattern can be used:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="ss">checkFlags</span> <span class="o">=</span>
<span class="k">let</span>
<span class="c1"># Skip tests that require network access</span>
<span class="ss">skippedTests</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;TestNetwork&quot;</span>
<span class="s2">&quot;TestDatabase/with_mysql&quot;</span> <span class="c1"># exclude only the subtest</span>
<span class="s2">&quot;TestIntegration&quot;</span>
<span class="p">];</span>
<span class="k">in</span>
<span class="p">[</span> <span class="s2">&quot;-skip=^</span><span class="si">${</span><span class="nb">builtins</span><span class="o">.</span>concatStringsSep <span class="s2">&quot;$|^&quot;</span> skippedTests<span class="si">}</span><span class="s2">$&quot;</span> <span class="p">];</span>
<span class="p">}</span>
</code></pre></div>
<p>To disable tests altogether, set <code>doCheck = false;</code>.
<code>buildGoPackage</code> does not execute tests by default.</p>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Licenced MIT
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://git.auxolotl.org/auxolotl/docs" target="_blank" rel="noopener" title="Aux Docs Repo" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.076 7.076 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422 2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24 2.9 2.9 0 0 1 5.8 18.57V8.589a7.109 7.109 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0ZM7.223 19.905a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Zm9.554-10.464a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.39Zm0-7.735a1.194 1.194 0 1 0 0 2.389 1.194 1.194 0 0 0 0-2.389Z"/></svg>
</a>
<a href="https://forum.aux.computer/" target="_blank" rel="noopener" title="Aux Forum" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563a7.395 7.395 0 0 0-6.337 3.57 7.247 7.247 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.424 7.424 0 0 0 8.136-1.39 7.256 7.256 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585h-.008z"/></svg>
</a>
<a href="https://wiki.auxolotl.org/" target="_blank" rel="noopener" title="Aux Wiki" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17.801 13.557c.148.098.288.202.417.313 1.854 1.6 3.127 4.656 2.582 7.311-1.091-.255-5.747-1.055-7.638-3.383-.91-1.12-1.366-2.081-1.569-2.885a5.65 5.65 0 0 0 .034-.219c.089.198.197.35.313.466.24.24.521.335.766.372.304.046.594-.006.806-.068l.001.001c.05-.015.433-.116.86-.342.325-.173 2.008-.931 3.428-1.566Zm-7.384 1.435C9.156 16.597 6.6 18.939.614 18.417c.219-1.492 1.31-3.019 2.51-4.11.379-.345.906-.692 1.506-1.009.286.168.598.332.939.486 2.689 1.221 3.903 1.001 4.89.573a1.3 1.3 0 0 0 .054-.025 6.156 6.156 0 0 0-.096.66Zm4.152-.462c.38-.341.877-.916 1.383-1.559-.389-.15-.866-.371-1.319-.591-.598-.29-1.305-.283-2.073-.315a4.685 4.685 0 0 1-.804-.103c.014-.123.027-.246.038-.369.062.104.673.057.871.057.354 0 1.621.034 3.074-.574 1.452-.608 2.55-1.706 3.022-3.225.474-1.52.22-3.091-.168-3.952-.169.709-1.453 2.381-1.926 2.871-.473.489-2.381 2.296-2.972 2.921-.7.74-.688.793-1.332 1.302-.202.19-.499.402-.563.53.027-.338.039-.675.027-.997a7.653 7.653 0 0 0-.032-.523c.322-.059.567-.522.567-.861 0-.224-.106-.247-.271-.229.075-.894.382-3.923 1.254-4.281.218.109.831.068.649-.295-.182-.364-.825-.074-1.081.266-.28.374-.956 2.046-.92 4.324-.113.014-.174.033-.322.033-.171 0-.321-.04-.433-.05.034-2.275-.714-3.772-.84-4.169-.12-.375-.491-.596-.781-.596-.146 0-.272.056-.333.179-.182.363.459.417.677.308.706.321 1.156 3.519 1.254 4.277-.125-.006-.199.035-.199.233 0 .311.17.756.452.843a.442.442 0 0 0-.007.03s-.287.99-.413 2.189a4.665 4.665 0 0 1-.718-.225c-.714-.286-1.355-.583-2.019-.566-.664.018-1.366.023-1.804-.036-.438-.058-.649-.15-.649-.15s-.234.365.257 1.075c.42.607 1.055 1.047 1.644 1.18.589.134 1.972.18 2.785-.377.16-.109.317-.228.459-.34a8.717 8.717 0 0 0-.013.626c-.289.753-.571 1.993-.268 3.338 0-.001.701-.842.787-2.958.006-.144.009-.271.01-.383.052-.248.103-.518.148-.799.072.135.151.277.234.413.511.842 1.791 1.37 2.383 1.49.091.019.187.032.285.038Zm-1.12.745c-.188.055-.445.1-.713.059-.21-.031-.45-.11-.655-.316-.169-.168-.312-.419-.401-.789a9.837 9.837 0 0 0 .039-.82l.049-.243c.563.855 1.865 1.398 2.476 1.522.036.008.072.014.109.02l-.013.009c-.579.415-.76.503-.891.558Zm6.333-2.818c-.257.114-4.111 1.822-5.246 2.363.98-.775 3.017-3.59 3.699-4.774 1.062.661 1.468 1.109 1.623 1.441.101.217.09.38.096.515a.57.57 0 0 1-.172.455Zm-9.213 1.62a1.606 1.606 0 0 1-.19.096c-.954.414-2.126.61-4.728-.571-2.023-.918-3.024-2.157-3.371-2.666.476.161 1.471.473 2.157.524.282.021.703.068 1.167.125.021.209.109.486.345.829l.001.001c.451.651 1.134 1.119 1.765 1.262.622.141 2.083.182 2.942-.407a3.12 3.12 0 0 0 .132-.093l.001.179a6.052 6.052 0 0 0-.221.721Zm5.512-1.271a17.49 17.49 0 0 1-1.326-.589c.437.042 1.054.083 1.692.108-.121.162-.244.323-.366.481Zm.932-1.26c-.12.17-.245.343-.373.517-.241.018-.478.03-.709.038a29.05 29.05 0 0 1-.741-.048c.608-.065 1.228-.252 1.823-.507Zm.22-.315c-.809.382-1.679.648-2.507.648-.472 0-.833.018-1.139.039v.001c-.324-.031-.665-.039-1.019-.054a3.555 3.555 0 0 1-.152-.009c.102-.002.192-.006.249-.006.363 0 1.662.034 3.151-.589 1.508-.632 2.645-1.773 3.136-3.351.37-1.186.31-2.402.086-3.312.458-.336.86-.651 1.147-.91.501-.451.743-.733.848-.869.199.206.714.864.685 2.138-.036 1.611-.606 3.187-1.501 4.154a9.099 9.099 0 0 1-1.321 1.132 11.978 11.978 0 0 0-.644-.422l-.089-.055-.051.091c-.184.332-.5.825-.879 1.374ZM4.763 5.817c-.157 1.144.113 2.323.652 3.099.539.776 2.088 2.29 3.614 2.505.991.14 2.055.134 2.055.134s-.593-.576-1.114-1.66c-.521-1.085-.948-2.104-1.734-2.786-.785-.681-1.601-1.416-2.045-1.945-.444-.53-.59-.86-.59-.86s-.656.175-.838 1.513Zm14.301 4.549a9.162 9.162 0 0 0 1.3-1.12c.326-.352.611-.782.845-1.265 1.315.145 2.399.371 2.791.434 0 0-.679 1.971-3.945 3.022l-.016-.035c-.121-.26-.385-.594-.975-1.036Zm-11.634.859a8.537 8.537 0 0 1-.598-.224c-1.657-.693-2.91-1.944-3.449-3.678-.498-1.601-.292-3.251.091-4.269.225.544.758 1.34 1.262 2.01a3.58 3.58 0 0 0-.172.726c-.163 1.197.123 2.428.687 3.24.416.599 1.417 1.62 2.555 2.193-.128.002-.253.003-.376.002Zm-1.758-.077c-.958-.341-1.901-.787-2.697-1.368C-.07 7.559 0 6.827 0 6.827s1.558-.005 3.088.179c.03.126.065.
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": ["content.tooltips", "search.highlight", "navigation.tabs", "navigation.indexes", "navigation.prune"], "search": "../../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../../assets/javascripts/bundle.fe8b6f2b.min.js"></script>
</body>
</html>