feat(example): Add an example for how to use buildGo builders

This commit is contained in:
Vincent Ambo 2019-11-24 20:34:30 +00:00
parent d441e035aa
commit 071babf148
4 changed files with 84 additions and 0 deletions

43
example/default.nix Normal file
View file

@ -0,0 +1,43 @@
# Copyright 2019 Google LLC.
# SPDX-License-Identifier: Apache-2.0
# This file provides examples for how to use the various builder
# functions provided by `buildGo`.
#
# The features used in the example are not exhaustive, but should give
# users a quick introduction to how to use buildGo.
let
buildGo = import ../buildGo.nix {};
# Example use of buildGo.package, which creates an importable Go
# package from the specified source files.
examplePackage = buildGo.package {
name = "example";
srcs = [
./lib.go
];
};
# Example use of buildGo.proto, which generates a Go library from a
# Protobuf definition file.
exampleProto = buildGo.proto {
name = "exampleproto";
proto = ./thing.proto;
};
# Example use of buildGo.program, which builds an executable using
# the specified name and dependencies (which in turn must have been
# created via buildGo.package etc.)
in buildGo.program {
name = "example";
srcs = [
./main.go
];
deps = [
examplePackage
exampleProto
];
}

9
example/lib.go Normal file
View file

@ -0,0 +1,9 @@
// Copyright 2019 Google LLC.
// SPDX-License-Identifier: Apache-2.0
package example
// UUID returns a totally random, carefully chosen UUID
func UUID() string {
return "3640932f-ad40-4bc9-b45d-f504a0f5910a"
}

22
example/main.go Normal file
View file

@ -0,0 +1,22 @@
// Copyright 2019 Google LLC.
// SPDX-License-Identifier: Apache-2.0
//
// Package main provides a tiny example program for the Bazel-style
// Nix build system for Go.
package main
import (
"example"
"exampleproto"
"fmt"
)
func main() {
thing := exampleproto.Thing{
Id: example.UUID(),
KindOfThing: "test thing",
}
fmt.Printf("The thing is a %s with ID %q\n", thing.Id, thing.KindOfThing)
}

10
example/thing.proto Normal file
View file

@ -0,0 +1,10 @@
// Copyright 2019 Google LLC.
// SPDX-License-Identifier: Apache-2.0
syntax = "proto3";
package exampleProto;
message Thing {
string id = 1;
string kind_of_thing = 2;
}