gookit/goutil - Useful utils package for the Go
Tags: programming, go, github, opensource
Published: 2022-06-13 07:40:15

`gookit/goutil` 💪 Useful utils package for the Go: int, string, array/slice, map, error, time, format, CLI, ENV, filesystem, system, testing and more.

## Sub-packages
* `arrutil`: Array/Slice util functions. eg: check, convert, formatting
* `dump`: Simple variable printing tool, printing slice, map will automatically wrap each element and display the call location
* `cliutil` Command-line util functions. eg: read input, exec command, cmdline parse/build
* `errorx` Provide an enhanced error implements for go, allow with stacktraces and wrap another error.
* `envutil` ENV util for current runtime env information. eg: get one, get info, parse var
* `fmtutil` Format data util functions. eg: data, size
* `fsutil` Filesystem util functions, quick create, read and write file. eg: file and dir check, operate
* `jsonutil` some util functions for quick read, write, encode, decode JSON data.
* `maputil` Map data util functions. eg: convert, sub-value get, simple merge
* `mathutil`Math(int, number) util functions. eg: convert, math calc, random
* `netutil` Network util functions
   * `netutil/httpreq` An easier-to-use HTTP client that wraps http.Client
* `strutil` String util functions. eg: bytes, check, convert, encode, format and more
* `sysutil` System util functions. eg: sysenv, exec, user, process
* `testutil` Test help util functions. eg: http test, mock ENV value
* `timex` Provides an enhanced time.Time implementation. Add more commonly used functional methods
   * such as: DayStart(), DayAfter(), DayAgo(), DateFormat() and more.

## Git repository

* Github: https://github.com/gookit/goutil
* Gitee: https://gitee.com/gookit/goutil

## Install
```bash
go get github.com/gookit/goutil
```
## Usage
### goutil/dump

`goutil/dump`  is a golang data printing toolkit that prints beautiful and easy to read go slice, map, struct data.

**Examples**

```go
// 	go run ./dump/_examples/struct.go
func main() {
	s1 := &struct {
		cannotExport map[string]interface{}
	}{
		cannotExport: map[string]interface{}{
			"key1": 12,
			"key2": "abcd123",
		},
	}

	s2 := struct {
		ab string
		Cd int
	}{
		"ab", 23,
	}

	color.Infoln("- Use fmt.Println:")
	fmt.Println(s1, s2)

	color.Infoln("\n- Use dump.Println:")
	dump.P(s1,s2)
}
```

Output:

![image](https://raw.githubusercontent.com/gookit/goutil/master/dump/_examples/struct.png)

### goutil/timex
`goutil/timex` Provides an enhanced time.Time implementation, and add more commonly used functional methods. 

such as: DayStart(), DayAfter(), DayAgo(), DateFormat() and more

**Create timex instance:**

```go
now := timex.Now()

// from time.Time
tx := timex.New(time.Now())
tx := timex.FromTime(time.Now())

// from time unix
tx := timex.FromUnix(1647411580)
```
**Create time for date string**:

```go
// auto match layout by datetime
tx, err  := timex.FromString("2022-04-20 19:40:34")
// custom set the datetime layout
tx, err  := timex.FromString("2022-04-20 19:40:34", "2006-01-02 15:04:05")
// use date template as layout
tx, err  := timex.FromDate("2022-04-20 19:40:34", "Y-m-d H:I:S")
```
**Quickly fetch time**:

```go
tx := timex.Now()

tx.Yesterday()
tx.Tomorrow()

tx.DayStart() // get time at Y-m-d 00:00:00
tx.DayEnd() // get time at Y-m-d 23:59:59
tx.HourStart() // get time at Y-m-d H:00:00
tx.HourEnd() // get time at Y-m-d H:59:59

tx.AddDay(2)
tx.AddHour(1)
tx.AddMinutes(15)
tx.AddSeconds(120)
```
**Quickly format date**：

```go
tx.DateFormat("y/m/d H:I")
date := tx.DateFormat("Y-m-d H:I:S") // Output: 2022-04-20 19:40:34
date = tx.DateFormat("y-m-d H:I:S") // Output: 22-04-20 19:40:34
```
## More usage

> More utils and usage please see README https://github.com/gookit/goutil/blob/master/README.md