Ghidra may be pretty good for some binaries (or for some audience?), but my experience trying to get it to reverse both golang and rust-lang binaries has been abysmal. It fails to correctly identify string literals (which is my #1 go-to for finding "points of interest") and the decompilation output is ... well, maybe it's helpful to someone but not to me. I regret that I let my Binary Ninja license lapse in order to see what it would have to say about the same binaries, and I've never had an IDA license to know what that's like
As a point of comparison, I fed 10.2.2 a copy of gojq 0.12.11 that I had lying around and this is pretty representative of its output
if (DAT_0075c6c8 == (code *)0x0) {
ppuStack_38 = (undefined **)0x45ecd7;
FUN_00462ee0(&DAT_0075da28,local_10,iVar3,iVar4);
*(undefined8 *)(in_FS_OFFSET + -8) = 0x123;
if (DAT_0075da28 != 0x123) {
ppuStack_38 = (undefined **)0x45ecf8;
FUN_00460dc0();
}
}
for further comparison, I fed it actual jq and it did much better about the string literals
if ((((((iVar6 == 0) || (DAT_00108018 = DAT_00108018 | 1, local_58 != 0)) &&
((iVar6 = FUN_001045a0(pFVar20,0x72,"raw-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 8, local_58 != 0)))) &&
((iVar6 = FUN_001045a0(pFVar20,99,"compact-output",pcVar13), iVar6 == 0 ||
(local_5c = local_5c & 0xfffff8be, local_58 != 0)))) &&
((iVar6 = FUN_001045a0(pFVar20,0x43,"color-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 0x40, local_58 != 0)))) &&
(((iVar6 = FUN_001045a0(pFVar20,0x4d,"monochrome-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 0x80, local_58 != 0)) &&
((iVar6 = FUN_001045a0(pFVar20,0x61,"ascii-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 0x20, local_58 != 0)))))) {
iVar6 = FUN_001045a0(pFVar20,0,"unbuffered",pcVar13);