See this issue: golang/go#7921
Right now, when a struct contains a reference to one of its own members, it always escapes to the heap. If this issue were fixed, we could add, e.g., [2]internalParams to the IRCMessage struct, and then make Params point to the internal array in the case where there are 2 or fewer params.