![]() |
Although it appears that I'm late to the Gophers party, I have finally managed to embrace Idiomatic Go in my programming arsenal. I now realized that better late than never. Golang is truely a highly productive language In this post, I'm gonna talk about my new project lsgo - ls command in golang for fun & learning . |
After watching various Gophercon videos , Rob Pike’s “Concurrency is not Parallelism” & Liz’s “Containers from Scratch” , I was super charged in getting my hands dirty with golang
.
Rather than starting out in traditional hello-world world, I decided to take a spin and wanted to try with real-world program.
Well, who doesn’t know about ls
command?? . Simple, yet powerful. So what about, implementing ls
command from scratch using golang
? and how much time does a newbie like me, would typically need in converting an idea to implementation, using golang
??
As it turns out, it only took me a weekend to learn golang
basic & it’s powerful idioms, there by implementing a subset of mighty ls
command purely in golang
.
The power of golang is such that, what started out as something very trivial as below
func serveDir(dir string) {
f, err := os.OpenFile(dir, os.O_RDONLY, 0666)
checkerr(err)
files, err := f.Readdirnames(0)
checkerr(err)
for _, file := range files {
fmt.Println(file)
}
}
ramped up into a complete tool within short span of time ( read productivity ). No wonder why every start-up is thriving with golang
.
Needless to say, the experience was so much fun & absolutely addictive. I’m sure I’m gonna use golang
for all my future coding endeavours.
lsgo
project??lsgo
is available in Github. While not all features of ls
isn’t available, this tool serves PWD
& any directory when provided as an input.
Along with normal file listing, this tool also supports long, size in human readable format, file-only, dir-only listing. Furthermore, it also supports tree lookup (recursive directory lookup) .
The goal is not to replace ls
, rather than to mimic ls
in golang to the extent possible using native golang
constructs - basically for fun & learning golang.
./ls --help
NAME:
ls ( implemented in golang ) - ls [flags] [command][args]
USAGE:
ls [global options] command [command options] [arguments...]
VERSION:
0.1
AUTHOR:
Viswanath Kumar Skand Priya <kspviswa.github@gmail.com>
COMMANDS:
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
-l, --long include extended information
-d, --dronly include only directories
-f, --fileonly include only regular files
--hr, --humanfriendly view size in humar readable format
-t, --tree view tree structure ( recursive lookup )
--help, -h show help
--version, -v print the version
COPYRIGHT:
MIT Licensed
./ls -hr
+-----------+--------+------------+---------------------+-------+
| NAME | SIZE | PERMS | AT | DIR |
+-----------+--------+------------+---------------------+-------+
| .git | 4K | drwxrwxrwx | 2017-10-22 01:15:14 | true |
| demo.json | 116.5K | -rwxrwxrwx | 2017-10-22 01:02:45 | false |
| LICENSE | 1.1K | -rwxrwxrwx | 2017-10-21 19:34:57 | false |
| ls | 3.5M | -rwxrwxrwx | 2017-10-22 00:31:26 | false |
| ls.go | 3.2K | -rwxrwxrwx | 2017-10-22 00:31:23 | false |
| README.md | 166B | -rwxrwxrwx | 2017-10-22 01:11:07 | false |
+-----------+--------+------------+---------------------+-------+
If you happen to like my project, feel free to let me know your thoughts and I would love to hear them. Cya in my next blogpost..