Functional programming avoids mutable state and side effects by treating computation as the evaluation of mathematical functions. In Golang, functional programming principles like immutable data, higher-order functions, and recursion can be applied to write more elegant, concise and testable code, though it lacks features like tail call optimization. Writing functional style enhances code quality by making behavior more predictable and explicit through referential transparency.