Skip to content

Go vs C

Both implementations expose keyword tools and share the transport contract, but their existing argument formats are deliberately different. Both use repaired Google Ads v25 contracts and per-call and default targeting. Integration evidence is tracked in #32. Go accepts snake_case arguments and keyword arrays; C# preserves camelCase arguments and comma-separated keyword strings.

Behavior Go C#
Historical v25 results and string integers Supported Supported
Forecast joint total, optional metrics, inclusive future dates Supported Supported
Explicit unrestricted targeting overrides Supported Supported
ISO/name resolution and location discovery Supported Supported
Complete idea pagination before ranking/filtering/limiting Supported Supported
Optional monthly volumes and totalFound Supported Supported
Opt-in forecast scenarios, at most five workers, cancellation Supported Supported
Shared planning pace within a client One request/second One request/second

Existing wire-format differences remain: Go may omit zero historical bid estimates and empty monthly-volume arrays; C# includes those values. Forecast optional metrics preserve absent versus zero in both. competitionIndex: 0 is included in both idea responses. Empty language strings mean omission; use all to remove a configured language. Explicit worldwide geography is an empty array in Go and an empty string in C#.

Quota pacing is local to one configured client/process, not a distributed customer-level limiter. Multiple instances sharing a Google Ads customer must coordinate their aggregate traffic.

CI consumes shared synthetic v25 request/response fixtures in both suites, checks Go data races, and publishes C# Native AOT. These checks do not substitute for an authenticated live API probe.

Comparison

Go C# Native AOT
Binary size ~12 MB ~20 MB
Startup time < 5 ms ~20 ms
Memory usage Lower Slightly higher
Platforms All All
Runtime required None None
Transports stdio, HTTP stdio, HTTP
HTTP mode Stateless Stateless
Default listener 127.0.0.1:8080 127.0.0.1:8080
HTTP endpoints /mcp, /health /mcp, /health

Both are self-contained native binaries. Both implement the same shared HTTP contract, including Host and Origin validation. The only cosmetic difference is the disallowed-Host status code (403 for Go and 400 for C#).

When to Choose Go

  • You prefer smaller binary sizes.
  • You're deploying on resource-constrained machines where startup time matters.
  • You want to build from source using only the Go toolchain.

When to Choose C

  • You're already in a .NET ecosystem and prefer to build from source with dotnet publish.
  • Your organization has tooling that works better with .NET binaries.

Which Binary Is Right for Most Users?

For AI assistant integration (GitHub Copilot, Claude, Cursor), either works fine. The server starts once and stays running -- the ~15 ms startup difference is imperceptible. Pick whichever binary matches the platform you're on (see the Getting Started download table).