component-base

Shared code for core components

APACHE-2.0 License

Stars
1
Committers
2

component-base

Shared code for core components.

Getting Started

json

Use json-iterator instead of encoding/json by -tags=jsoniter Use go-json instead of encoding/json by -tags=gojson Use sonic instead of encoding/json by -tags=sonic, requirements: avx, linux/windows/darwin, amd64

Example:

$ go build -tag `-tags=jsoniter`

version

Note: VERSION_PKG must be github.com/shipengqi/component-base/version.

Example:

# The project's root import path
PKG := github.com/example/repo
# set version package
VERSION_PKG=github.com/shipengqi/component-base/version

ifeq ($(origin VERSION), undefined)
VERSION := $(shell git describe --tags --always --match='v*')
endif

# set git commit and tree state
GIT_COMMIT = $(shell git rev-parse HEAD)
ifneq ($(shell git status --porcelain 2> /dev/null),)
	GIT_TREE_STATE ?= dirty
else
	GIT_TREE_STATE ?= clean
endif

# set ldflags
GO_LDFLAGS += -X $(VERSION_PKG).Version=$(VERSION) \
	-X $(VERSION_PKG).GitCommit=$(GIT_COMMIT) \
	-X $(VERSION_PKG).GitTreeState=$(GIT_TREE_STATE) \
	-X $(VERSION_PKG).BuildDate=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
	
.PHONY: go.build
go.build:
	@echo "===========> Building: $(OUTPUT_DIR)/$(BIN)"
	@CGO_ENABLED=0 go build -ldflags "$(GO_LDFLAGS)" -o $(OUTPUT_DIR)/$(BIN) ${PKG}

Print the version message:

package main

import (
	"fmt"
	
	"github.com/shipengqi/component-base/version"
)

func main() {
	fmt.Println(version.Get().String())
}

The output resembling as follows:

Version:      5fa0fea
Commit:       5fa0fea6e39fabdad0eda2dcfd55f70da2fa89ea
GitTreeState: dirty
BuildTime:    1970-01-01T00:00:00Z
GoVersion:    go1.21.0
Compiler:     gc
Platform:     linux/amd64

cli

package main

import (
	"github.com/spf13/cobra"
	cliflag "github.com/shipengqi/component-base/cli/flag"
	"github.com/shipengqi/component-base/cli/globalflag"
	"github.com/shipengqi/component-base/term"
	"github.com/shipengqi/component-base/version/verflag"
)

func main() {
	cmd := &cobra.Command{
		Use:   "demo",
		Short: "demo description",
		RunE:  func (c *cobra.Command, args []string) error {
			// print version message if the --version flag was passed
			verflag.PrintAndExitIfRequested()
			return nil
		},
	}
	cliflag.InitFlags(cmd.Flags())

	var fss cliflag.NamedFlagSets
	// add one or more FlagSet
	fakes := fss.FlagSet("fake")
	fakes.StringVar(&o.Username, "username", o.Username, "fake username.")
	fakes.StringVar(&o.Password, "password", o.Password, "fake password.")

	// applies the FlagSets to this command 
	fs := cmd.Flags()
	for _, set := range fss.FlagSets {
		fs.AddFlagSet(set)
	}

	// applies global help flag to this command 
	globalSet := fss.FlagSet("global")
	globalflag.AddGlobalFlags(globalSet, cmd.Name())

	// add version flag to the global flag set
	verflag.AddFlags(globalSet)
	
	// set both usage and help function.
	width, _, _ := term.TerminalSize(cmd.OutOrStdout())
	cliflag.SetUsageAndHelpFunc(cmd, fss, width)
}

term

package main

import (
	"log"
	"os"
	
	"github.com/shipengqi/component-base/term"
)

func main() {
	// get the current width and height of the user's terminal.
	// If it isn't a terminal, nil is returned. 
	width, height, err := term.TerminalSize(os.Stdout)
	if err != nil {
		log.Fatalln(err)
	}
}

Documentation

You can find the docs at go docs.

Package Rankings
Top 5.26% on Proxy.golang.org
Badges
Extracted from project README's
test Go Report Card release license