Go voice dictation

Go voice dictation that respects MixedCaps and initialisms

Go names carry meaning in their capitals: an upper-case first letter exports a name, and initialisms such as ID, URL and HTTP keep a consistent case. A speech model hears none of that. This guide explains how Go’s naming rules map to spoken words, what IraVoice types from your module when you dictate prompts, commit messages and reviews, which Go names stay as words and why, and how it behaves in GoLand, VS Code, the terminal and over SSH.

Source-reviewed

1. One spoken phrase, two correct spellings

Effective Go is blunt about it: the visibility of a name outside a package is determined by whether its first character is upper case. The Go Code Review Comments add that initialisms keep a consistent case, so URL appears as URL or url, never Url; it is ServeHTTP, not ServeHttp, and appID rather than appId. Google’s TypeScript style guide asks for the opposite and treats abbreviations as whole words.

So the sentence “get user by ID” has two right answers depending on the repository, and a speech model produces neither; it writes four words. IraVoice matches the spoken words against the names declared in the project behind the focused app and inserts that declaration’s spelling. A Go module that defines GetUserByID gets GetUserByID; a TypeScript project that defines getUserById gets getUserById. The capitals come from the code, not from how you said it.

2. Effective Go conventions, heard instead of read

Go uses MixedCaps or mixedCaps rather than underscores for multiword names. Package names are lower case and a single word, with no need for underscores or mixedCaps, and exported names lean on them: the buffered reader in package bufio is bufio.Reader, not BufReader. A getter for an unexported field named owner is Owner, not GetOwner. One-method interfaces take an -er name, such as Reader, Writer, Formatter or CloseNotifier. Method receivers get short names, often one or two letters such as c or cl for a Client.

Files follow conventions as well. A go.mod at the root of the repository declares the module path, the import path prefix for every package in the module. A file whose name ends in _test.go is excluded from regular package builds and included when go test runs.

  • Exported versus unexported is one capital letter: “default page size” could be defaultPageSize or DefaultPageSize, and only the declaration knows.
  • Package names such as bufio or httpapi are single lowercase words, so IraVoice leaves them as the speech model wrote them.
  • Initialisms are spoken as letters, “I D” or “U R L”, and need the project’s case to come out right.
  • Test files pair a source name with _test.go, which speech turns into “user store test dot go”.

3. Spoken to typed in a Go module

These results come from IraVoice’s matching rules applied to a small ledger module with internal/store/user_store.go, its user_store_test.go, a cmd/ledger-api command and a go.mod, dictated into a recognized app on a Mac or Windows PC:

  • “get user by ID returns ErrNotFound for deleted rows” → GetUserByID returns ErrNotFound for deleted rows
  • “new user store” → NewUserStore; “default page size” → defaultPageSize
  • “parse URL” → ParseURL; “new HTTP client” → NewHTTPClient
  • “XML HTTP request” → xmlHTTPRequest, as declared
  • “invoice ID” → InvoiceID
  • “test get user by ID” → TestGetUserByID
  • “main dot go” → main.go; “go dot mod” → go.mod
  • “user store test go” → user_store_test.go
  • “ledger API” → ledger-api, the command’s folder

4. Go names that stay as words, and why

Capitalization from the speech model is ignored, so “get user by id” and “Get User By ID” both produce the declared GetUserByID, and a full stop after the phrase stays after the name. Some Go names, though, are deliberately left alone.

Short initialism names. appID and userID are made of two everyday words, and IraVoice never turns two everyday words into an identifier, so “app ID” and “user ID” stay as spoken. Longer names with a distinctive word, such as InvoiceID, come through.

Names that start with an initialism. A type named HTTPClient or URLParser has capitals but never a lowercase letter followed by a capital, so IraVoice does not treat it as a code name and “HTTP client” stays two words. NewHTTPClient does qualify, because its w is followed by a capital H.

Methods, fields and grouped declarations. IraVoice collects names from declarations such as func GetUserByID, type UserStore, var ErrNotFound and const defaultPageSize. A method with a receiver, like func (s *UserStore) ListActiveUsers(), a struct field, and constants inside a grouped const block may not be among them; in the sample module, “list active users” and “serve HTTP” stayed as words.

Files that share a type’s words. user_store.go and type UserStore reduce to the same letters, and one phrase can only produce one name; in this layout “user store” types the file’s user_store. For a test file, say it without punctuation (“user store test go”), because “user store test dot go” mixes two spellings and leaves “dot go” as words.

5. goroutine, kubectl and words from outside your module

Your dependencies are not part of your module’s own files, IraVoice skips a vendor folder, and Go’s own vocabulary is not declared anywhere in your code, so words like goroutine are not in its list. Teach the ones you say often with a learned fix. Dictate, press ⌃⌥⇧F on a Mac or Ctrl+Alt+Shift+F on Windows and Linux, correct the text, press Enter, and paste back the corrected copy. Correcting “cube cuddle” to kubectl, or “go routine” to goroutine, teaches IraVoice to type that word from then on.

Lessons apply in every app, so keep them to words you only mean as code, and review them under Advanced → Learn from my fixes. Replacements handle fixed text: a phrase that types your module path, or “race note” for a review comment you add often, such as a request to run go test -race before merging.

6. GoLand, VS Code, remote servers and other options

On a Mac, IraVoice spells Go names in GoLand and the other JetBrains IDEs, VS Code, Cursor, Windsurf, Zed and Sublime Text, and in Terminal, iTerm2, Ghostty, Warp, kitty, Alacritty and WezTerm. On Windows the recognized list includes VS Code, Cursor, Windsurf, Zed, Windows Terminal, PowerShell and cmd, but not GoLand, so in GoLand on Windows you get plain dictation. On Linux, IraVoice is a beta that dictates without code names.

Go code often runs on a server. Because IraVoice types into the local terminal window, dictation works inside an SSH session, but names come only from a Git project on your own computer; keep a local clone open if you want them spelled. Inside WSL, dictation works but names may not.

It types sentences, not Go. There are no braces, := assignments, if err != nil blocks or tabs in what it produces. Alternatives: macOS Dictation and Win+H for free prose; Claude Code’s /voice, tuned for coding vocabulary with your project and branch names as hints and audio transcribed by Anthropic; and Talon, where you choose a formatter each time, such as hammer for an exported OneTwoThree or camel for an unexported oneTwoThree.

IraVoice keeps audio and text on the computer, using NVIDIA Parakeet after a one-time model download; its other connections are license check-ins and update checks. Hold Right Command on a Mac or Right Ctrl on Windows, speak and release; tap instead of holding to keep listening hands-free. It costs $79 once for one computer, $109 for two, or $149 for three.

Decision guide

Which voice option fits your Go work?

Start from where your Go code lives and which editor you use.

If you needChooseWhy
Prompts and reviews that name exported functions and typesIraVoice in GoLand on a Mac, VS Code, Cursor or a terminalIt types each declaration’s spelling, initialisms and exported capitals included.
GoLand on WindowsPlain dictation there, or VS Code or Windows Terminal for namesGoLand is not on IraVoice’s Windows list of developer apps.
Go code on a remote server over SSHIraVoice with a local clone of the repositoryDictation reaches the remote shell, but names come only from a Git project on your computer.
kubectl, goroutine or another word outside the moduleQuick Fix onceA learned word pair types it right in every app afterwards.
Writing Go statements by voiceTalonFormatters, symbols and snippets are made for entering code; IraVoice is not.
Claude Code with a Claude.ai loginClaude Code /voiceBuilt in and tuned for coding vocabulary, with transcription on Anthropic’s servers.

Primary sources

Use the current documentation.

This guide was reviewed October 3, 2026. Product versions, settings, policies, and availability can change.

  1. Effective Go: Names ↗

    Visibility by first-letter case, package names, getters (Owner, not GetOwner), -er interface names and MixedCaps.

  2. Go Wiki: Go Code Review Comments ↗

    Initialisms keep a consistent case (URL, ServeHTTP, xmlHTTPRequest, appID) and short receiver names.

  3. Go: How to Write Go Code ↗

    go.mod at the repository root declares the module path.

  4. Go standard library: package testing ↗

    Test files end in _test.go and are included when go test runs.

  5. Google TypeScript Style Guide ↗

    The contrasting rule that treats abbreviations as whole words (loadHttpUrl).

  6. Talon Community Wiki: Formatters ↗

    hammer and camel formatters for exported and unexported names.

  7. Claude Code Docs: Voice dictation ↗

    Coding-vocabulary tuning, recognition hints and cloud transcription for /voice.

Questions

What readers usually ask next.

Will IraVoice type GetUserByID or getUserById?

Whichever the project declares. In a Go module that defines GetUserByID it types GetUserByID; in a TypeScript project that defines getUserById it types that. It never invents a spelling.

Why does “user ID” stay as two words?

Both are everyday words, and IraVoice never turns two everyday words into an identifier, so ordinary sentences stay ordinary. Longer names with a distinctive word, such as InvoiceID, are spelled.

Can I dictate Go code with IraVoice?

No. It types your words with the module’s names spelled correctly, not braces, operators or error-handling blocks. Use it for prompts, commit messages and reviews; Talon is the tool for writing code by voice.

Does it spell names in GoLand?

On a Mac, yes, because every JetBrains IDE is recognized. On Windows, GoLand is not on the list, so use VS Code, Cursor or Windows Terminal when you want names spelled.

Does IraVoice read my vendor folder or upload my code?

No. It skips dependency folders such as vendor and files that may hold secrets, keeps only names, never source text, and nothing leaves the computer.

Mac, Windows, and Linux

Try private, on-device dictation for yourself.

Hold one key, speak, and the words are typed where your cursor is. The 3-day free trial starts with your first dictation.