automatic differentiation in go