Go Quick Start
This document describes how to create a Go application from scratch and deploy it to CloudBase HTTP cloud functions.
Prerequisites
Before you begin, ensure that you have:
- Installed Go (recommended Go 1.19 or later version)
- Have a Tencent Cloud account with CloudBase service activated
- Have a basic understanding of Go development
Step 1: Create a Project Directory
Create a new directory named helloworld-golang and go to the directory:
mkdir helloworld-golang
cd helloworld-golang
Step 2: Initialize Project Configuration
Initialize the Go module:
go mod init helloworld-golang
This will create a go.mod file in the current directory.
Step 3: Install Dependencies
Install the necessary dependency packages:
go get github.com/gin-gonic/gin
go get github.com/gin-contrib/cors
This will install the Gin Web framework and CORS middleware.
Step 4: Write Application Code
Create a main.go file in the same directory, which serves as the entry point file for the application:
⚠️ Important Note: The default port for CloudBase HTTP cloud function must be
9000.
package main
import (
"encoding/json"
"io"
"net/http"
"os"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
// The IPInfo struct is used to store IP information
type IPInfo struct {
IP string `json:"ip"`
City string `json:"city"`
Region string `json:"region"`
Country string `json:"country"`
Loc string `json:"loc"`
Org string `json:"org"`
}
func main() {
r := gin.Default()
// Configure CORS
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"*"},
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Length", "Content-Type", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
}))
// Root path
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World!")
})
// Obtain IP information
r.GET("/myip", func(c *gin.Context) {
resp, err := http.Get("https://ipinfo.io/json")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Failed to fetch remote data",
"message": err.Error(),
})
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Failed to read response",
"message": err.Error(),
})
return
}
c.Data(http.StatusOK, "application/json", body)
})
// Health Check
r.GET("/health", func(c *gin.Context) {
health := map[string]interface{}{
"status": "healthy",
"timestamp": "2024-01-01T00:00:00Z", // In actual applications, use time.Now().Format(time.RFC3339)
"version": "1.0.0",
}
c.JSON(http.StatusOK, health)
})
// Handle 404
r.NoRoute(func(c *gin.Context) {
c.JSON(http.StatusNotFound, gin.H{"error": "Not Found"})
})
// Start the server
port := os.Getenv("PORT")
if port == "" {
port = "9000"
}
r.Run(":" + port)
}
This code creates a basic Web server that provides the following features:
- Root path (
/): Returns a "Hello World!" message - IP Query (
/myip): Obtain and return the client IP information. - Health Check (
/health): Returns the service status information. - Error Handling: Returns a 404 error for unknown paths
Step 5: Create a Startup Script
Create the scf_bootstrap file (without an extension), which is the startup script for CloudBase cloud functions:
#!/bin/bash
./main
⚠️ Note:
- The file name must be
scf_bootstrapwithout an extension- Ensure the file has execute permission
Grant execute permission to the startup script:
chmod +x scf_bootstrap
Step 6: Compile the Application
Compile the Go application:
GOOS=linux GOARCH=amd64 go build -o main main.go
This compiles the executable file in the Linux environment, ensuring it runs properly in the CloudBase environment.
Step 7: Local Testing (Optional)
Before deployment, you can test the application locally:
go run main.go
Or run the compiled binary file:
./main
After successful testing, you can verify it in the following ways:
- Access
http://localhost:9000/to view the Hello World message - Access
http://localhost:9000/myipto view IP information - Access
http://localhost:9000/healthto view the health status
Press Ctrl + C to stop the local server.
Step 8: Deploy to CloudBase HTTP Cloud Function
Preparing Deployment Files
Ensure your project directory contains the following files:
helloworld/
├── scf_bootstrap
├── go.mod
├── go.sum
├── main.go
└── main
Deployment via the Console
- Log in to TCB/Cloud Function
- Click 'Create New Cloud Function'
- Select "HTTP Cloud Function"
- Fill in the function name (e.g.:
helloworld-go) - Select runtime: Go 1.x
- Select the "local upload" method
- Package the project files into a zip file and upload (select files for packaging, do not package the root directory folder)
- Click "OK" to complete deployment
Deploy via CLI
For more details, please refer to CLI Deploy HTTP Function
Package the project
If manual packaging is required, you can use the following command:
# Create a zip package
zip -r helloworld-golang.zip main scf_bootstrap
Step 9: Access Your Application
After successful deployment, you can refer to Web Client Invocation to set up a custom domain for accessing the
You can test in the following ways:
- Access the root path to view the Hello World message
- Access the
/myippath to view IP information - Access the
/healthpath to check the service status
Frequently Asked Questions
Q: Why must port 9000 be used?
A: CloudBase HTTP cloud functions require the application to listen on port 9000, which is the standard configuration of the platform.
Q: How to view function logs?
A: On the CloudBase Console's cloud function page, click the function name to go to the details page where you can view the runtime logs.
Q: Which Go versions are supported?
A: CloudBase supports Go versions 1.16, 1.17, 1.18, 1.19, and others. It is recommended to use a newer stable version.
Q: How to handle CORS cross-origin issues?
A: Configure cross-origin using Gin's CORS middleware, as shown in the example code.
Q: How to handle long cold startup times for functions?
A: You can reduce cold startup time by decreasing the binary size, optimizing code logic, and using static compilation.
Q: How to perform cross-compilation?
A: Use GOOS=linux GOARCH=amd64 environment variables to perform Linux cross-compilation, ensuring it runs properly in the CloudBase environment.
Q: Why is it necessary to compile into a binary file?
A: The CloudBase cloud function environment runs on a Linux system, requiring compilation into a binary file for the corresponding platform to run properly.
Best Practices
- Error Handling: Always add appropriate error handling for HTTP requests.
- Response Header Settings: Properly set the Content-Type and other necessary response headers.
- Logging: Use the
logpackage to log key information for easier debugging. - Environment Variables: Use
os.Getenv()to manage configuration information - Code Structure: For complex applications, it is recommended to split files by feature modules.
- Performance Optimization: Use connection pools, caching, and other techniques to improve performance
- Security Considerations: Validate input parameters to prevent injection attacks
Next Steps
- Learn more about HTTP Cloud Function Configuration Options
- See Gin Framework Integration