Detecting collision of two prefabs through code c#

Maybe I’m just dumb but I just can’t figure it out. Say I’ve got two prefabs I’m initiating through code.

Object obj = Resources.Load("poke");
GameObject go = Instantiate(obj, new Vector3(), Quaternion.identity) as GameObject;
GameObject gos = Instantiate(obj, new Vector3(), Quaternion.identity) as GameObject;

How do I detect any collision?
Do I have to add a RigidBody?
Is there a way to create a Collider through code?
I keep finding the OnCollisionEnter() or something but there’s no info about binding that event to a gameobject.
Thanks in advance guys.

Also, please don’t redirect me to some other answer cos I think I’ve tried all of them and got nothing.

Collision detection happens Independent of your spawning method.
But at least one of your Instantiated GameObjects must have an non-kinematic Rigidbody for the OnCollision Events to happen (see here) of course your GameObjects Need some Kind of collider.
If you use MeshColliders you Need to know that 2 non convex MeshColliders also don’t Trigger Collision Events afaik.