├── .gitignore ├── gofat ├── README.md ├── glide.yaml ├── farble.go ├── glide.lock └── main.go /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | go-cli-starter 3 | dist/ 4 | go-carpet-coverage-out* 5 | release/ 6 | -------------------------------------------------------------------------------- /gofat: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | eval `go build -work -a 2>&1` && find $WORK -type f -name "*.a" | xargs -I{} du -hxs "{}" | gsort -rh | sed -e s:${WORK}/::g 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fatty Project 2 | 3 | This is a sample project for [this blog post](https://medium.com/@jondot/a-story-of-a-fat-go-binary-20edc6549b97#.bzaq4nol0). 4 | -------------------------------------------------------------------------------- /glide.yaml: -------------------------------------------------------------------------------- 1 | package: . 2 | import: 3 | - package: github.com/stretchr/testify 4 | version: ^1.1.4 5 | subpackages: 6 | - mock 7 | - package: gopkg.in/alecthomas/kingpin.v2 8 | version: ^2.2.3 9 | testImport: 10 | - package: github.com/jondot/go-cli-starter 11 | subpackages: 12 | - mocks 13 | - package: gopkg.in/check.v1 14 | -------------------------------------------------------------------------------- /farble.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | ) 6 | 7 | //Countable fixme 8 | type Countable interface { 9 | Inc() int 10 | } 11 | 12 | //Counter fixme 13 | type Counter struct { 14 | count int 15 | } 16 | 17 | //Inc fixme 18 | func (c *Counter) Inc() int { 19 | c.count = c.count + 1 20 | return c.count 21 | } 22 | 23 | //Farble fixme 24 | type Farble struct { 25 | Froop int 26 | Metric Countable 27 | } 28 | 29 | //NewFarble fixme 30 | func NewFarble(c Countable) *Farble { 31 | return &Farble{Metric: c} 32 | } 33 | 34 | //Bumple fixme 35 | func (f *Farble) Bumple() { 36 | fmt.Printf("Cool numbers: %v, Froop: %v", f.Metric.Inc(), f.Froop) 37 | } 38 | -------------------------------------------------------------------------------- /glide.lock: -------------------------------------------------------------------------------- 1 | hash: 8815e457f9c85e4a93469cf9844187ee4c8e00b271d2dfe62c1b3980f3609f31 2 | updated: 2017-02-15T22:43:09.073338173+02:00 3 | imports: 4 | - name: github.com/davecgh/go-spew 5 | version: 04cdfd42973bb9c8589fd6a731800cf222fde1a9 6 | subpackages: 7 | - spew 8 | - name: github.com/pmezard/go-difflib 9 | version: d8ed2627bdf02c080bf22230dbb337003b7aba2d 10 | subpackages: 11 | - difflib 12 | - name: github.com/stretchr/objx 13 | version: cbeaeb16a013161a98496fad62933b1d21786672 14 | - name: github.com/stretchr/testify 15 | version: 69483b4bd14f5845b5a1e55bca19e954e827f1d0 16 | subpackages: 17 | - assert 18 | - mock 19 | - name: gopkg.in/alecthomas/kingpin.v2 20 | version: e9044be3ab2a8e11d4e1f418d12f0790d57e8d70 21 | testImports: 22 | - name: github.com/jondot/go-cli-starter 23 | version: c273436aa331891c9fd1c6bebc9006b16de0a27b 24 | subpackages: 25 | - mocks 26 | - name: gopkg.in/check.v1 27 | version: 20d25e2804050c1cd24a7eea1e7a6447dd0e74ec 28 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | _ "expvar" 5 | "flag" 6 | "net/http" 7 | "runtime" 8 | "time" 9 | 10 | "github.com/robertkrimen/otto" 11 | 12 | log "github.com/Sirupsen/logrus" 13 | 14 | "go.uber.org/zap" 15 | 16 | newrelic "github.com/newrelic/go-agent" 17 | // _ "github.com/yuin/gopher-lua" 18 | 19 | kingpin "gopkg.in/alecthomas/kingpin.v2" 20 | ) 21 | 22 | // or kingpin for nicer CLI 23 | 24 | // VERSION gets overwritten by release target 25 | var VERSION = "dev" 26 | var _ = VERSION 27 | 28 | var ip = flag.Int("flagname", 1234, "help message for flagname") 29 | 30 | var debug = kingpin.Flag("debug", "Enable debug mode.").Bool() 31 | 32 | func main() { 33 | kingpin.Parse() 34 | 35 | logger, _ := zap.NewProduction() 36 | config := newrelic.NewConfig("Your Application Name", "__YOUR_NEW_RELIC_LICENSE_KEY__") 37 | newrelic.NewApplication(config) 38 | vm := otto.New() 39 | 40 | go func() { 41 | http.ListenAndServe(":5160", nil) 42 | }() 43 | 44 | for { 45 | f := NewFarble(&Counter{}) 46 | 47 | f.Bumple() 48 | vm.Run(` 49 | abc = 2 + 2; 50 | console.log("\nThe value of abc is " + abc); // 4 51 | `) 52 | //kingpin.Parse() 53 | logger.Info("OK", zap.Int("ip", *ip)) 54 | log.Info("OK") 55 | 56 | runtime.GC() 57 | time.Sleep(time.Second * 1) 58 | } 59 | 60 | } 61 | --------------------------------------------------------------------------------