3 ms·
Go is a fine language, but not great for scripting. The verbosity shows in the examples, it’s basically skipping five or six lines of code to read from stdin an
by ricardobeat 5y ago
Go is a fine language, but not great for scripting. The verbosity shows in the examples, it’s basically skipping five or six lines of code to read from stdin and import a functional library.
Learning the jq syntax will have a much better payoff in the long run.
- nh23423fefe 5y ago| gq 'j.Filter(func(n *Node) bool { return strings.Contains(n.String(), "good/") })' | jq 'map(select(contains("good/")))'
- mccanne 5y agozq good/ -
- throwaway894345 5y agoI like jq, but the parent is right that it's hard to wrap one's head around the way jq thinks about things and how that model maps to its grammar. Even in this example, I couldn't tell you why `map()` wraps everything else, and I always get tripped up on when to use `|` or how to go back and forth between a list and a stream. I don't think the answer is `gq`, but I certainly understand why people try out other languages.
- nh23423fefe 5y agoevery filter operates on its input. in this case the input was an array. every map implementation ive seen has type function(a,b) -> list(a) -> list(b) select(contains("good/")) is a function from string -> string|void so map plus a voidable function equals a filter | just means connect 2 filters if you have a stream you turn it into a array with the array constructor [] if you have an array you turn it into a stream with the producer operator .[] the api is super orthogonal and well designed. but you do have to understand the model
- throwaway894345 5y agoRight, I already believe it all makes sense when you understand the model, but the model isn't super obvious and I often find myself Googling things for reference because I don't use it very often; however, I do use regular programming languages and I can reason about those more easily (although while I like Go, I would be more inclined to used a Python- or JS-like language for something like this).
- errnil 5y agoNo doubt this tool is lacking. However I will say that for me the most important quality in my `jq`-like is not conciseness. My main frustration is that I always forget the small details of how `jq`'s language works and spend 10 minutes googling. E.g doing operations within arrays of objects, using select, and so on. Maybe I'm just dumb, but I'm fond of tools that accommodate my dumbness!
- sleepybrett 5y agoAlso this seems to mean my pipeline needs to know how to compile go if i want to transform some json .. boo hiss
- errnil 5y agoActually `gq` does not require a locally installed Go compiler. It interprets the supplied Go using Yaegi.
- spacemanmatt 5y agoi can get the same jq from multiple package installers that will ensure it is in my execution path. this covers windows and linux, and likely osx if i needed it.