*I AM NOT A TEACHER OR NATIVE.*
The gist of what I've learnt and often seen and read is as follows:
If by saying "English", we mean English language, we use "good at". But if it means English as a school subject or a field of study, we use "good in".
For example, if Mr. Chang speaks English fluently, "he is very good at English."
If Mr. Chang has taken an English language course in a university and he is a good student in this course, we say: "Mr. Chang is good in English."