tools

tools

Go 语言在命令行以表格的形式输出结构体切片

开源程序modood 发表了文章 • 3 个评论 • 1793 次浏览 • 2017-08-29 15:32 • 来自相关话题

最近写的小工具,可以在命令行以表格的形式输出结构体切片 * 没有第三方依赖 * 支持中文汉字 * 表格每列自动对齐 * 支持自动适应列宽 * 结构体的字段支持所有数据 ...查看全部
最近写的小工具,可以在命令行以表格的形式输出结构体切片

* 没有第三方依赖
* 支持中文汉字
* 表格每列自动对齐
* 支持自动适应列宽
* 结构体的字段支持所有数据类型(字符串,切片,映射等)

例如可以很方便清晰地将数据库查询结果列表(结构体切片)在命令行以表格的形式输出。

项目 Github 主页:

对你有用的话,给个 star 支持一下吧~

```go
package main

import (
"fmt"

"github.com/modood/table"
)

type House struct {
Name string
Sigil string
Motto string
}

func main() {
s := []House{
{"Stark", "direwolf", "Winter is coming"},
{"Targaryen", "dragon", "Fire and Blood"},
{"Lannister", "lion", "Hear Me Roar"},
}

table.Output(s)
}
```

输出结果:
```
┌───────────┬──────────┬──────────────────┐
│ Name │ Sigil │ Motto │
├───────────┼──────────┼──────────────────┤
│ Stark │ direwolf │ Winter is coming │
│ Targaryen │ dragon │ Fire and Blood │
│ Lannister │ lion │ Hear Me Roar │
└───────────┴──────────┴──────────────────┘
```

go演示工具 - go 社区是如何做演示的?

文章分享bw57899 发表了文章 • 0 个评论 • 2455 次浏览 • 2016-10-15 20:38 • 来自相关话题

golang 有个很简单的演示工具,如果你混go社区的话,这是个很有必要的技能。 :blush: # 安装go 安装go以及设置必要的参数,比如GOPATH。这个就不重复了,相信来这里的都懂。 ...查看全部
golang 有个很简单的演示工具,如果你混go社区的话,这是个很有必要的技能。 :blush:

# 安装go

安装go以及设置必要的参数,比如GOPATH。这个就不重复了,相信来这里的都懂。

# 安装present

```shell
$ go get golang.org/x/net
$ go get golang.org/x/tools
$ go install golang.org/x/tools/cmd/present
```

# 准备 slide 演示文件

```shell
$ cat sample.slide

Title of document
Subtitle of document
15:04 2 Jan 2006
Tags: foo, bar, baz

Author Name
Job title, Company
joe@example.com
http://url/
@twitter_name
Some Text

* Title of slide or section (must have asterisk)

Some Text

* topic 1

- idea 1
- idea 2
- idea 3
```

这是个很简单的演示稿,共三页。第四页是自动生成的。

# 运行 present

因为前面已经安装了present,你可以直接运行它了

```shell
$ present
2016/10/15 11:20:55 Open your web browser and visit http://127.0.0.1:3999
```

# 访问你的演示文件

访问 ghttp://127.0.0.1:3999 即可,会有现成的slide链接显示。

在操作时,移动左右键,你可以看到每个演示稿:

http://127.0.0.1:3999/sample.slide#1

http://127.0.0.1:3999/sample.slide#2

...

# 分享你的演示文档

将你的slide 文件 push 到 github,比如 github.com/DANIU/talks/20161015/sample.slide

那么你应该可以用以下的链接直接访问该演示文档。

http://go-talks.appspot.com/github.com/DANIU/talks/20161015/sample.slide


# present 的格式

请看这里: https://godoc.org/golang.org/x/tools/present

可以支持字体,链接,代码显示(需要将该代码放在同一个目录),部分显示代码,贴图,等等。

关于Go tools的比较有用的flags

Golangitfanr 发表了文章 • 0 个评论 • 6835 次浏览 • 2016-10-10 16:45 • 来自相关话题

你刚接触Go tools吗?或者你想扩展下你的知识面?这篇文章是关于Go tools的flags,这些flags每个人都应该知道。 免责声明:这篇文件可能有一些偏见。这是我个人常用的flags集合。我周边的人很难找到这些falgs的参 ...查看全部

你刚接触Go tools吗?或者你想扩展下你的知识面?这篇文章是关于Go tools的flags,这些flags每个人都应该知道。

免责声明:这篇文件可能有一些偏见。这是我个人常用的flags集合。我周边的人很难找到这些falgs的参考文档。如果你有更好的主意,可以在[Twitter][1]上私信我。

# $ go build -x


`-x`列出了go build触发的所有命令。

如果你对Go的工具链、使用跨平台编译器比较好奇,或者对传入外部编译器的flags不清楚,或者怀疑链接器有bug,那么使用`-x`来查看所有的触发。

# $ go build -x


```
WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754
mkdir -p $WORK/hello/perf/_obj/
mkdir -p $WORK/hello/perf/_obj/exe/
cd /Users/jbd/src/hello/perf
/Users/jbd/go/pkg/tool/darwin_amd64/compile -o $WORK/hello/perf.a -trimpath $WORK -p main -complete -buildid bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d -D _/Users/jbd/src/hello/perf -I $WORK -pack ./perf.go
cd .
/Users/jbd/go/pkg/tool/darwin_amd64/link -o $WORK/hello/perf/_obj/exe/a.out -L $WORK -extld=clang -buildmode=exe -buildid=bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d $WORK/hello/perf.a
mv $WORK/hello/perf/_obj/exe/a.out perf
```


# $go build -gcflags

用来给Go编译器传入参数。`go tool compile -help`列出了可以被传入编译器的所有的参数列表。

比如,为了禁止编译器优化和内联,你可以使用下面的gcfalgs:

```
$ go build -gcflags="-N -l"
```


# $go test -v


它提供了非正式的测试输出,打印了测试的名字、状态(通过或者失败)、耗时、测试用例的日志等。

不带有`-v`flag的go test命令非常安静,我经常把`-v`开关打开。比如输出如下:

```
$ go test -v context
=== RUN TestBackground
--- PASS: TestBackground (0.00s)
=== RUN TestTODO
--- PASS: TestTODO (0.00s)
=== RUN TestWithCancel
--- PASS: TestWithCancel (0.10s)
=== RUN TestParentFinishesChild
--- PASS: TestParentFinishesChild (0.00s)
=== RUN TestChildFinishesFirst
--- PASS: TestChildFinishesFirst (0.00s)
=== RUN TestDeadline
--- PASS: TestDeadline (0.16s)
=== RUN TestTimeout
--- PASS: TestTimeout (0.16s)
=== RUN TestCanceledTimeout
--- PASS: TestCanceledTimeout (0.10s)
...
PASS
ok context 2.426s
```

# $go test -race

[Go竞争检测工具][2]可以通过`--race`使用。go test也支持这个flag并且报告竞争。在开发阶段使用这个flag可以检测竞争。


# $go test -run

使用`-run`flag,你可以通过正则过滤测试用例。下面的命令会只测试[test examples][3]:

```
$ go test -run=Example
```

# $go test -coverprofile

你可以输出一个覆盖信息,如果你在测试一个包,然后使用go tool来在浏览器上实现可视化:


```
$ go test -coverprofile=c.out && go tool cover -html=c.out
```
上面的命令会创建一个覆盖信息,然后在浏览器上打开结果页面。可视化后的结果会类似下面的页面:

![此处输入图片的描述][4]


# $go test -exec

这是一个鲜为人知的特性,使用`-exec`这个flag,你可以用另外的程序和tools交互。这个flag允许你使用Go tool把一些工作代理到另外的程序。

使用这个flag常用的需求场景是:当你需要做更多的事情,而不是仅仅执行宿主机的程序。Go的[Android build][5],使用了`-exec`来推送测试二进制文件到Android设备(通过使用`adb`),并收集测试结果。可以作为一个参考。

# $go get -u

如果你执行go-test命令来获取一个已经在GOPATH中的包,那么go-get不好更新包到最新版本,而`-u`会强制tool同步这个仓库的最新的版本。

如果你是一个library的作者,那么你可能喜欢写你的安装说明通过`-u`flag,比如,[golin][6]t这样的方式:

```
$ go get -u github.com/golang/lint/golint
```

# $go get -d

如果你只想clone一个repo到GOPATH,跳过编译和安装过程,那么使用`-d`。它会下载包,然后在尝试编译和安装之前停止。

我经常使用它,作为git clone的替代命令,使用虚假的URLs,因为它会克隆这个repo到它合适的GOPATH。比如:

```
$ go get -d golang.org/x/oauth2/...
```

会克隆包到`$GOPATH/src/golang.org/x/ouath2`。给出的`golang.org/x/oauth2`是一个虚假的URL,go-get这个仓库是很有用的,而不是尝试知道知己的repo是什么(go.googlesource.com/oauth2)。

# $go get -t

如果你的包需要额外的包来测试,`-t`会允许你在go-get过程中下载它们。如果你不传入`-t`参数,go get会只下载非测试代码的依赖。

# $ go list -f

允许你下载Go包以一种自定义的格式。对写bash脚本非常有用。下面的命令会输出runtime包的依赖:

```
$ go list -f '{{.Deps}}' runtime
[runtime/internal/atomic runtime/internal/sys unsafe]
```

更多的格式化信息可以在[Dave Cheney的文章][7]的go list章节得到。

[英文原文][8]

[1]: https://twitter.com/rakyll
[2]: https://blog.golang.org/race-detector
[3]: https://blog.golang.org/examples
[4]: https://raw.githubusercontent.com/itfanr/articles-about-golang/master/2016-09/2016-09-27-1-1.png
[5]: https://github.com/golang/go/blob/master/misc/android/go_android_exec.go
[6]: https://github.com/golang/lint#installation
[7]: http://dave.cheney.net/2014/09/14/go-list-your-swiss-army-knife
[8]: http://golang.rakyll.org/go-tool-flags/

Go 语言在命令行以表格的形式输出结构体切片

开源程序modood 发表了文章 • 3 个评论 • 1793 次浏览 • 2017-08-29 15:32 • 来自相关话题

最近写的小工具,可以在命令行以表格的形式输出结构体切片 * 没有第三方依赖 * 支持中文汉字 * 表格每列自动对齐 * 支持自动适应列宽 * 结构体的字段支持所有数据 ...查看全部
最近写的小工具,可以在命令行以表格的形式输出结构体切片

* 没有第三方依赖
* 支持中文汉字
* 表格每列自动对齐
* 支持自动适应列宽
* 结构体的字段支持所有数据类型(字符串,切片,映射等)

例如可以很方便清晰地将数据库查询结果列表(结构体切片)在命令行以表格的形式输出。

项目 Github 主页:

对你有用的话,给个 star 支持一下吧~

```go
package main

import (
"fmt"

"github.com/modood/table"
)

type House struct {
Name string
Sigil string
Motto string
}

func main() {
s := []House{
{"Stark", "direwolf", "Winter is coming"},
{"Targaryen", "dragon", "Fire and Blood"},
{"Lannister", "lion", "Hear Me Roar"},
}

table.Output(s)
}
```

输出结果:
```
┌───────────┬──────────┬──────────────────┐
│ Name │ Sigil │ Motto │
├───────────┼──────────┼──────────────────┤
│ Stark │ direwolf │ Winter is coming │
│ Targaryen │ dragon │ Fire and Blood │
│ Lannister │ lion │ Hear Me Roar │
└───────────┴──────────┴──────────────────┘
```

go演示工具 - go 社区是如何做演示的?

文章分享bw57899 发表了文章 • 0 个评论 • 2455 次浏览 • 2016-10-15 20:38 • 来自相关话题

golang 有个很简单的演示工具,如果你混go社区的话,这是个很有必要的技能。 :blush: # 安装go 安装go以及设置必要的参数,比如GOPATH。这个就不重复了,相信来这里的都懂。 ...查看全部
golang 有个很简单的演示工具,如果你混go社区的话,这是个很有必要的技能。 :blush:

# 安装go

安装go以及设置必要的参数,比如GOPATH。这个就不重复了,相信来这里的都懂。

# 安装present

```shell
$ go get golang.org/x/net
$ go get golang.org/x/tools
$ go install golang.org/x/tools/cmd/present
```

# 准备 slide 演示文件

```shell
$ cat sample.slide

Title of document
Subtitle of document
15:04 2 Jan 2006
Tags: foo, bar, baz

Author Name
Job title, Company
joe@example.com
http://url/
@twitter_name
Some Text

* Title of slide or section (must have asterisk)

Some Text

* topic 1

- idea 1
- idea 2
- idea 3
```

这是个很简单的演示稿,共三页。第四页是自动生成的。

# 运行 present

因为前面已经安装了present,你可以直接运行它了

```shell
$ present
2016/10/15 11:20:55 Open your web browser and visit http://127.0.0.1:3999
```

# 访问你的演示文件

访问 ghttp://127.0.0.1:3999 即可,会有现成的slide链接显示。

在操作时,移动左右键,你可以看到每个演示稿:

http://127.0.0.1:3999/sample.slide#1

http://127.0.0.1:3999/sample.slide#2

...

# 分享你的演示文档

将你的slide 文件 push 到 github,比如 github.com/DANIU/talks/20161015/sample.slide

那么你应该可以用以下的链接直接访问该演示文档。

http://go-talks.appspot.com/github.com/DANIU/talks/20161015/sample.slide


# present 的格式

请看这里: https://godoc.org/golang.org/x/tools/present

可以支持字体,链接,代码显示(需要将该代码放在同一个目录),部分显示代码,贴图,等等。

关于Go tools的比较有用的flags

Golangitfanr 发表了文章 • 0 个评论 • 6835 次浏览 • 2016-10-10 16:45 • 来自相关话题

你刚接触Go tools吗?或者你想扩展下你的知识面?这篇文章是关于Go tools的flags,这些flags每个人都应该知道。 免责声明:这篇文件可能有一些偏见。这是我个人常用的flags集合。我周边的人很难找到这些falgs的参 ...查看全部

你刚接触Go tools吗?或者你想扩展下你的知识面?这篇文章是关于Go tools的flags,这些flags每个人都应该知道。

免责声明:这篇文件可能有一些偏见。这是我个人常用的flags集合。我周边的人很难找到这些falgs的参考文档。如果你有更好的主意,可以在[Twitter][1]上私信我。

# $ go build -x


`-x`列出了go build触发的所有命令。

如果你对Go的工具链、使用跨平台编译器比较好奇,或者对传入外部编译器的flags不清楚,或者怀疑链接器有bug,那么使用`-x`来查看所有的触发。

# $ go build -x


```
WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754
mkdir -p $WORK/hello/perf/_obj/
mkdir -p $WORK/hello/perf/_obj/exe/
cd /Users/jbd/src/hello/perf
/Users/jbd/go/pkg/tool/darwin_amd64/compile -o $WORK/hello/perf.a -trimpath $WORK -p main -complete -buildid bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d -D _/Users/jbd/src/hello/perf -I $WORK -pack ./perf.go
cd .
/Users/jbd/go/pkg/tool/darwin_amd64/link -o $WORK/hello/perf/_obj/exe/a.out -L $WORK -extld=clang -buildmode=exe -buildid=bbf8e880e7dd4114f42a7f57717f9ea5cc1dd18d $WORK/hello/perf.a
mv $WORK/hello/perf/_obj/exe/a.out perf
```


# $go build -gcflags

用来给Go编译器传入参数。`go tool compile -help`列出了可以被传入编译器的所有的参数列表。

比如,为了禁止编译器优化和内联,你可以使用下面的gcfalgs:

```
$ go build -gcflags="-N -l"
```


# $go test -v


它提供了非正式的测试输出,打印了测试的名字、状态(通过或者失败)、耗时、测试用例的日志等。

不带有`-v`flag的go test命令非常安静,我经常把`-v`开关打开。比如输出如下:

```
$ go test -v context
=== RUN TestBackground
--- PASS: TestBackground (0.00s)
=== RUN TestTODO
--- PASS: TestTODO (0.00s)
=== RUN TestWithCancel
--- PASS: TestWithCancel (0.10s)
=== RUN TestParentFinishesChild
--- PASS: TestParentFinishesChild (0.00s)
=== RUN TestChildFinishesFirst
--- PASS: TestChildFinishesFirst (0.00s)
=== RUN TestDeadline
--- PASS: TestDeadline (0.16s)
=== RUN TestTimeout
--- PASS: TestTimeout (0.16s)
=== RUN TestCanceledTimeout
--- PASS: TestCanceledTimeout (0.10s)
...
PASS
ok context 2.426s
```

# $go test -race

[Go竞争检测工具][2]可以通过`--race`使用。go test也支持这个flag并且报告竞争。在开发阶段使用这个flag可以检测竞争。


# $go test -run

使用`-run`flag,你可以通过正则过滤测试用例。下面的命令会只测试[test examples][3]:

```
$ go test -run=Example
```

# $go test -coverprofile

你可以输出一个覆盖信息,如果你在测试一个包,然后使用go tool来在浏览器上实现可视化:


```
$ go test -coverprofile=c.out && go tool cover -html=c.out
```
上面的命令会创建一个覆盖信息,然后在浏览器上打开结果页面。可视化后的结果会类似下面的页面:

![此处输入图片的描述][4]


# $go test -exec

这是一个鲜为人知的特性,使用`-exec`这个flag,你可以用另外的程序和tools交互。这个flag允许你使用Go tool把一些工作代理到另外的程序。

使用这个flag常用的需求场景是:当你需要做更多的事情,而不是仅仅执行宿主机的程序。Go的[Android build][5],使用了`-exec`来推送测试二进制文件到Android设备(通过使用`adb`),并收集测试结果。可以作为一个参考。

# $go get -u

如果你执行go-test命令来获取一个已经在GOPATH中的包,那么go-get不好更新包到最新版本,而`-u`会强制tool同步这个仓库的最新的版本。

如果你是一个library的作者,那么你可能喜欢写你的安装说明通过`-u`flag,比如,[golin][6]t这样的方式:

```
$ go get -u github.com/golang/lint/golint
```

# $go get -d

如果你只想clone一个repo到GOPATH,跳过编译和安装过程,那么使用`-d`。它会下载包,然后在尝试编译和安装之前停止。

我经常使用它,作为git clone的替代命令,使用虚假的URLs,因为它会克隆这个repo到它合适的GOPATH。比如:

```
$ go get -d golang.org/x/oauth2/...
```

会克隆包到`$GOPATH/src/golang.org/x/ouath2`。给出的`golang.org/x/oauth2`是一个虚假的URL,go-get这个仓库是很有用的,而不是尝试知道知己的repo是什么(go.googlesource.com/oauth2)。

# $go get -t

如果你的包需要额外的包来测试,`-t`会允许你在go-get过程中下载它们。如果你不传入`-t`参数,go get会只下载非测试代码的依赖。

# $ go list -f

允许你下载Go包以一种自定义的格式。对写bash脚本非常有用。下面的命令会输出runtime包的依赖:

```
$ go list -f '{{.Deps}}' runtime
[runtime/internal/atomic runtime/internal/sys unsafe]
```

更多的格式化信息可以在[Dave Cheney的文章][7]的go list章节得到。

[英文原文][8]

[1]: https://twitter.com/rakyll
[2]: https://blog.golang.org/race-detector
[3]: https://blog.golang.org/examples
[4]: https://raw.githubusercontent.com/itfanr/articles-about-golang/master/2016-09/2016-09-27-1-1.png
[5]: https://github.com/golang/go/blob/master/misc/android/go_android_exec.go
[6]: https://github.com/golang/lint#installation
[7]: http://dave.cheney.net/2014/09/14/go-list-your-swiss-army-knife
[8]: http://golang.rakyll.org/go-tool-flags/