Stop asking yourself this question.
I realize that's not something you can just instantly decide to do, but I speak from personal experience -- there's no answer to "am I good" that will leave you in a healthy place. Put as much energy as possible into erasing the question from your mind. You do not need an answer.
Think of it this way: If you were the best programmer in the world, it would still be advantageous for you to learn new things, and to learn from other people. It still wouldn't be safe for you to dismiss other people's ideas out of hand. You would still want to work on improving your own skills. There's no such thing as a perfect programmer, so you can always go on improving.
If you were the worst programmer in the world, and you wanted to get better, the way you would do that is by learning new things, and by learning from other people. You would try not to dismiss other people's ideas out of hand. You would work hard on improving your skills.
So from a personal development perspective, your relative skill to the people around you doesn't matter, since you should be doing the same stuff regardless. Your lifelong "job" as a programmer is not to reach some kind of universal plateau of excellence, it is to be as good as you can be. Don't focus on where you are. Just focus on getting better.
Outside of personal development, there are areas where evaluating your personal skillset is valuable. However, very rarely, if ever, is that evaluation necessary to do in absolute, generalized terms like "good" or "bad". Very rarely is it valuable to ask, "how good am I overall?"
Valuable questions are:
"What do I still need to learn to accomplish the immediate task I want to take on?"
"Is there someone else working on the same task that is more suited than I am right now?"
"What is my current weakest skill, and how can I focus on improving that, specifically?"
These are all very focused questions. They're not asking whether or not you're "good", they're asking if you currently have the practical ability to handle one specific thing. If someone else next to you is better suited for a task, that doesn't mean they're a good developer and you're a bad one, it means they're better suited for that specific task. If you decide you are best suited to take on a specific task, it doesn't mean you're better overall than anyone else, just that you have a unique affinity for that particular task.
In any case, most tasks are not accomplished by the people who are best suited for them, they're accomplished by the people who take the time to sit down and do them. So usually, it's only necessary to ask, "does this need to be done?" and "can I do it?"
In terms of your workplace, the question you should be asking is not, "am I good enough?" It's, "do these people want me?" (if they hired you and they're not getting annoyed at you, the answer is probably yes, but maybe there are other dynamics at play). The question could also be, "is the pace at which I'm expected to learn too high, or is the work stressful enough that I would prefer to be somewhere else?" That's also a valid approach. Do you want to be at your job?
But neither of those two questions have anything to do with figuring out whether you fit into some nebulous category of "good".
This is tough to do, but from experience the best work I produce happens when I am not thinking about my status -- when I am not thinking about whether I am a good programmer, or a good person, or a talented artist, or anything like that -- and instead just focusing on being the best I can be, and improving the best I can each day. When you must evaluate your own skills, you want to be focused. You want to ask, "what are my practical, objective, evaluable goals, and how do I accomplish them? Where do I want to be, and how do I get there?"
The rest is all bullcrap. It's bullcrap that is hard to get of rid of, and it sticks in your brain and sometimes keeps you up at night. I totally get that. But that doesn't make it any less bullcrap nonsense. Try very hard not to ask yourself bullcrap nonsense questions.