Project IDX와 Gemini API를 사용한 Go 애플리케이션 개발

12월 18, 2024
Suzy Mueller Software Engineer
Nooras Saba Engineering Manager

2024년 6월에 출시된 Project IDX는 클라우드에서의 풀 스택 앱 개발을 위한 AI 지원 작업공간입니다. Project IDX는 다양한 프레임워크, 언어, 서비스를 지원하는 한편, Google 제품에 대한 통합을 통해 개발 워크플로를 간소화합니다.

Project IDX를 활용하여 단 몇 분 만에 Go로 애플리케이션을 개발하는 방법을 보여드리겠습니다. Project IDX에서 Go 개발 환경을 설정하고 첫 번째 서버 애플리케이션을 만들어 보겠습니다. IDX에서 Go 개발 환경을 설정하고 간단한 hello world 서버를 만드는 방법을 살펴보겠습니다.

IDX에서 작업공간을 만드는 방법에는 몇 가지가 있습니다. GitHub 저장소를 가져오거나, 처음부터 빈 작업공간을 새로 만들거나, 혹은 미리 구성된 템플릿을 사용할 수 있습니다. 먼저 처음부터 시작하는 방법을 보여드린 다음 템플릿을 살펴보겠습니다.


시작하기

이 섹션에서는 IDX를 사용하여 환경을 설정하고 기본적인 Hello, World 서버를 작성하는 과정을 살펴보겠습니다.

idx.google.com/new/blank에서 IDX에 빈 프로젝트를 새로 생성하는 과정부터 시작해 보겠습니다. 이 프로젝트에는 리드미와 기본 dev.nix가 포함되어 있습니다.


환경 맞춤설정

환경 구성은 nix 환경 구성으로 맞춤설정할 수 있습니다. IDX의 Go 작업공간에 대한 최소 구성에서는 Go nix 패키지를 추가하고 Go 확장 프로그램을 설치합니다.

Go nix 패키지와 Go 확장 프로그램을 포함하도록 .idx/dev.nix를 업데이트합니다.

{ pkgs, ... }: {
  packages = [
    pkgs.go
  ];
 
  idx = {
    extensions = [
      "golang.go"
    ];
  };
}

Rebuild your environment to allow these changes to take effect.


Write Go code

Now that the workspace is set up for Go code development, we can start writing our Go server.

First, let's initialize the module that will contain our Go code. You can do this by running the > Go: Initialize go.mod provided by the Go extension from the Command Palette, or by running go mod init from the command line.

$ go mod init github.com/myorg/helloWorld

Let’s create a main.go with a simple server that returns “Hello, World!"

package main
 
import (
	"fmt"
	"log"
	"net/http"
	"os"
)
 
func main() {
	log.Print("starting server...")
	http.HandleFunc("/", handler)
 
	// Determine port for HTTP service.
	port := os.Getenv("PORT")
	if port == "" {
		port = "3000"
		log.Printf("defaulting to port %s", port)
	}
 
	// Start HTTP server.
	log.Printf("listening on port %s", port)
	if err := http.ListenAndServe(":"+port, nil); err != nil {
		log.Fatal(err)
	}
}
 
func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "<!DOCTYPE html>\n")
	fmt.Fprint(w, "Hello, World!\n")
}

Preview in IDX

Now that we have a server that can listen to requests, let’s test it out by creating a preview.

To .idx/dev.nix, add the web preview configuration:

idx = {
      previews = {
      enable = true;
      previews = {
          web = {
          command = ["go" "run" "main.go"];
          manager = "web";
          env = {
            # Environment variables to set for your server
            PORT = "$PORT";
          };
        };
      };
    };
  };

Rebuild the environment again to see the web preview. The preview can also be opened from the Command Palette using > Project IDX: Show Web Preview.

Show Web Preview in Project IDX

Explore Go Templates in IDX

To start quickly, we are providing you with ready to use templates that include a pre-configured environment with all the tools and the libraries needed.

Start with one of the Go backend server templates or start building LLM applications with the Go and Gemini template.

Gemini with Go template is integrated with Gemini API to leverage the power of AI. Plug in your Gemini API key to get going.

Code editor displays project files and a web page titled "Baking with Gemini"  with images of baked goods and a prompt to provide a recipe in IDX