Способы: пайпы (os.Pipe), сокеты (Unix domain: net.Listen("unix", path)), разделяемая память (редко в Go), очереди сообщений. В Go чаще сокеты (TCP или unix) и HTTP/gRPC поверх них. Для локального взаимодействия unix socket быстрее TCP. Пример: сервис слушает unix socket, другой процесс подключается через net.Dial("unix", path).
ln, _ := net.Listen("unix", "/tmp/app.sock")
conn, _ := ln.Accept()