Unlock the Full Potential of Cost-Effective Cloud Infrastructure
Elevate your cloud operations with GoCroot, the ultimate solution for businesses and developers seeking high performance and cost-efficiency. Designed to optimize backend infrastructure, GoCroot streamlines resource management and orchestration, ensuring seamless scalability and reduced overhead.
- Eco-Friendly: Operate with a low carbon footprint.
- Efficient: Simplify complex cloud architectures.
- Reliable: Enhance operational stability.
🚀 Ready to scale efficiently? Try GoCroot Core today!
Otherwise, we offer two production modes tailored for different platforms:
-
- Fully compatible with Google Cloud Functions
- Recommended for most use cases.
-
Fiber-Based
- Ideal for platforms like fly.io and alwaysdata.
In Go, data structures are defined as struct. Here’s an example:
type Example struct {
ID primitive.ObjectID `json:"_id,omitempty" bson:"_id,omitempty" query:"id" url:"_id,omitempty" reqHeader:"token"`
Messages string `json:"messages" bson:"messages" query:"messages" url:"messages" reqHeader:"token"`
}json: Used for JSON payloads in REST APIs.bson: MongoDB field name.query: URL query parameters, e.g.,https://domain.com/?messages=example.url: URL generator for queries.reqHeader: HTTP headers, e.g.,Authorization,Token.
Quick struct declaration:
var request struct {
Token string `json:"token"`
}Define routes in a simple switch statement. Example:
With URL Parameter
case method == "POST" && at.URLParam(path, "/webhook/nomor/:nomorwa"):
controller.PostInboxNomor(w, r)Without URL Parameter
case method == "GET" && path == "/data/phone/all":
controller.GetBotList(w, r)Controllers handle API logic. Below is a sample for Net HTTP and Fiber:
func Homepage(w http.ResponseWriter, r *http.Request) {
// Your logic here
}- Decode WhatsAuth Token to PhoneNumber and get Document by Phonenumber in MongoDB:
Furthermore, to protect every endpoint with authentication.
payload, err := watoken.Decode(config.PublicKeyWhatsAuth, at.GetLoginFromHeader(r)) Example, err := atdb.GetOneDoc[model.Userdomyikado](config.Mongoconn, "user", primitive.M{"phonenumber": payload.Id})
var respn model.Response payload, err := watoken.Decode(config.PublicKeyWhatsAuth, at.GetLoginFromHeader(r)) if err != nil { respn.Status = "Error : Token Tidak Valid " respn.Info = at.GetSecretFromHeader(r) respn.Location = "Decode Token Error: " + at.GetLoginFromHeader(r) respn.Response = err.Error() at.WriteJSON(w, http.StatusForbidden, respn) return } _, err = atdb.GetOneDoc[model.Userdomyikado](config.Mongoconn, "user", primitive.M{"phonenumber": payload.Id}) if err != nil { respn.Status = "Error : User tidak ada di database " respn.Info = payload.Alias respn.Location = payload.Id at.WriteJSON(w, http.StatusNotFound, respn) return }
- Parse JSON body:
var tasklists []report.TaskList err := json.NewDecoder(r.Body).Decode(&tasklists)
- Extract header:
login := at.GetLoginFromHeader(r) //or secret := r.Header.Get("Secret")
- Get URL parameter:
at.URLParam(path, "/data/pelanggan/one/:id")Furthermore, with get data logic using mongoDB object IDid:=at.GetParam(r) //or id := r.URL.Path[strings.LastIndex(r.URL.Path, "/")+1:]
// get param objectId, err := primitive.ObjectIDFromHex(at.GetParam(r)) if err != nil { respn.Status = "Error : object ID tidak valid" respn.Response = err.Error() at.WriteJSON(w, http.StatusPreconditionFailed, respn) return } //get database datapelanggan, err := atdb.GetOneDoc[model.DataPelanggan](config.Mongoconn, "pelanggan", primitive.M{"_id": objectId}) if err != nil { respn.Status = "Error : gagal input database" respn.Response = err.Error() at.WriteJSON(w, http.StatusExpectationFailed, respn) return }
- Parse query parameter:
id := r.URL.Query().Get("id")
- Handle file upload:
_, header, err := r.FormFile("image")
Return JSON Response:
at.WriteJSON(w, http.StatusOK, Example)func Homepage(ctx *fiber.Ctx) error {
// Your logic here
return ctx.Status(fiber.StatusOK).JSON(fiber.Map{"message": "success"})
}- Parse JSON body:
var userreq models.UserReq err := ctx.BodyParser(&userreq)
- Extract header:
var h models.Header err := ctx.ReqHeaderParser(&h)
- Get URL parameter:
login := ctx.Params("login")
- Parse query parameter:
p := new(Example) err := ctx.QueryParser(p)
- Handle file upload:
file, err := ctx.FormFile("image")
Return JSON Response:
return ctx.Status(fiber.StatusOK).JSON(fiber.Map{"status": "success"})Easily log or manage documents in MongoDB:
document := bson.D{
{Key: "username", Value: "user1"},
{Key: "createdAt", Value: time.Now()},
}- String to
primitive.ObjectID:objectId, err := primitive.ObjectIDFromHex(strid)
ObjectIDto String:strid := objectId.Hex()
Ensure code quality with Go’s built-in testing tools.
-
Write Test Cases:
main_test.gofunc TestSum(t *testing.T) { result := Sum(2, 3) if result != 5 { t.Errorf("Expected 5, got %d", result) } }
-
Run Tests with Coverage:
go test -cover -
Generate Detailed Report:
go test -coverprofile=coverage.out go tool cover -html=coverage.out
Set up your Go environment:
export GOPROXY=proxy.golang.orgUpdate dependencies and publish packages:
go get -u all
go mod tidy
git tag v0.1.0
git push origin --tagsDeploy your application following our deployment guide.