Representing multiple errors in Go
1. Don't use \" in string

Go provide a very nice way to handle quote (") in strings: 

instead of 

fmt.Sprintf("MediaWiki module \"%s\" reported an error: %s (%s)", ...)


you can use 

fmt.Sprintf(`MediaWiki module "%s" reported an error: %s (%s)`, ...)


It's easier and nicer to read

2. Use range loop instead of switch

Instead of specifiying behavior for 3 cases ( 0, 1, default), we can use a simple range loop

So this 

func (e MediaWikiErrors) Error() string {
    switch len(e) {
    case 0:
        return ""
    case 1:
        return e[0].Error()
    default:
        codes := make([]string, len(e))
        for i, err := range e {
            codes[i] = err.Code
        }
        return fmt.Sprintf("MediaWiki API reported multiple errors: %s", strings.Join(codes, ", "))
    }
} 


become simply this: 

func (e MediaWikiErrors) Error() (errMsg string) {
    for _, err := range e {
        errMsg += err.Error() + "\n"
    }
    return errMsg
} 


I prefer joining errors with a line return (\n) instead of a comma, but it's just my personal taste. Multiple errors would be printed like this: 

MediaWiki module "module_1" reported an error: parsing error (3)
MediaWiki module "module_2" reported an error: access denied (22)