Go sembra essere fatto per fare roba lato server per il web. Cosa potrei fare se il mio capo avesse improvvisamente dettato di volere una GUI di Windows per un'applicazione Go?
Dai un'occhiata a Vai a OpenGL , che espone core ed estensioni. Non vi è alcun motivo per cui Go non possa essere utilizzato insieme a GLEW (OpenGL Extension Wrangler Library) per realizzare visualizzazioni avanzate da scenari di tipo big data.
Go Plot and Go SVG sono là fuori, come ho appena notato alcune centinaia di altri binding e librerie da trovare su Vai risorse linguistiche .
Go può essere utilizzato per una GUI Web tanto quanto una normale GUI, l'unica differenza è che viene fornito con il supporto incorporato per il protocollo http, il multiplexing http, il template, ecc. gtk + binding per andare, e, come diceva Jerry Coffin, potresti usare quelli. Tuttavia, il problema più grande dell'utilizzo di go per le applicazioni desktop è che tutti i framework della GUI sono attualmente a thread singolo, che non sfruttano la forza maggiore di go. Al contrario, le GUI basate su HTML e AJAX sono progettate in modo asincrono e al tempo stesso possono essere eseguite più richieste al server.
Il problema più difficile da risolvere nello scenario che hai proposto è il magro supporto di Windows. Questo è stato lavorato, ma non è ancora stato risolto. A questo punto, probabilmente vorrai scrivere la GUI in python, c, o C ++ e usare go come server in un modello di infrastruttura client-server.
Non vedo nulla nella progettazione del linguaggio stesso che possa impedirlo. Dall'aspetto delle cose, è in corso un lavoro su un set di collegamenti Go per GTK. Non l'ho provato, quindi non posso commentare la sua usabilità corrente, ma assumendo che sia utilizzabile a un certo punto, dovrebbe fare un lungo cammino per rendere le app GUI un obiettivo realistico.
Go è completo quindi puoi fare qualsiasi cosa (beh, qualsiasi cosa un computer sia in grado di fare in ogni caso).
Non c'è alcuna limitazione intrinseca nella lingua che ti impedisce di fare qualcosa in essa. L'unico limite è la quantità di lavoro che sei disposto ad assumere. Ad esempio, potresti dover scrivere o aggiornare un binding all'API nativa della GUI del sistema operativo che ti interessa se non esiste già.