export const meta = { title: `Go API`, description: `How to deploy a Go API using Amplify Functions`, }; In this guide, you will learn how to deploy a Go API. ## 1. Initialize a new Amplify project ```sh amplify init # Follow the steps to give the project a name, environment name, and set the default text editor. # Accept defaults for everything else and choose your AWS Profile. ``` ## 2. Add the API and function ```sh amplify add api ? Please select from one of the below mentioned services: REST ? Provide a friendly name for your resource to be used as a label for this category in the project: goapi ? Provide a path (e.g., /book/{isbn}): /hello ? Choose a Lambda source: Create a new Lambda function ? Provide a friendly name for your resource to be used as a label for this category in the project: greetingfunction ? Provide the AWS Lambda function name: greetingfunction ? Choose the function runtime that you want to use: Go ? Do you want to access other resources created in this project from your Lambda function? N ? Do you want to invoke this function on a recurring schedule? N ? Do you want to edit the local lambda function now? N ? Restrict API access: N ? Do you want to add another path? N ``` The CLI should have created a new function located at **amplify/backend/function/greetingfunction**. ## 3. Updating the function code Next, open **amplify/backend/function/greetingfunction/src/main.go** and update the code to the following: ```go package main import ( "bytes" "context" "encoding/json" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) type Response events.APIGatewayProxyResponse func Handler(ctx context.Context) (Response, error) { var buf bytes.Buffer body, err := json.Marshal(map[string]interface{}{ "message": "Congrats! Your function executed successfully!", }) if err != nil { return Response{StatusCode: 404}, err } json.HTMLEscape(&buf, body) resp := Response{ StatusCode: 200, IsBase64Encoded: false, Body: buf.String(), Headers: map[string]string{ "Content-Type": "application/json", "X-MyCompany-Func-Reply": "hello-handler", "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "POST, GET, OPTIONS, PUT, DELETE", "Access-Control-Allow-Headers": "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization", }, } return resp, nil } func main() { lambda.Start(Handler) } ``` ## 4. Deploy the API To deploy the API, run the `push` command: ```sh amplify push ``` ## 5. Using the API Here is how you can send a GET request to the API. import js0 from "/src/fragments/guides/api-rest/js/go-api-call.mdx"; import ios1 from "/src/fragments/guides/api-rest/ios/rest-api-call.mdx"; import android2 from "/src/fragments/guides/api-rest/android/rest-api-call.mdx"; To learn more about interacting with REST APIs using Amplify, check out the complete documentation [here](/lib/restapi/getting-started). The API endpoint is located in the `aws-exports.js` folder. You can also interact directly with the API using this URL and the specified path: ```sh curl https://.execute-api..amazonaws.com//hello ```