Skip to content

gocroot/gocroot.github.io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoCroot: Greatly Optimized Cloud Resource Operation and Orchestration Transformer

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!


GoCroot Modes

GoCroot Core

Otherwise, we offer two production modes tailored for different platforms:

  1. Net HTTP-Based

  2. Fiber-Based


Type Declaration in Go

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"`
}

Explanation of Tags:

  • 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"`
}

Routing with Net HTTP

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)

Controller Implementation

Controllers handle API logic. Below is a sample for Net HTTP and Fiber:

Net HTTP Example

func Homepage(w http.ResponseWriter, r *http.Request) {
	// Your logic here
}

Common Operations:

  • Decode WhatsAuth Token to PhoneNumber and get Document by Phonenumber in MongoDB:
    payload, err := watoken.Decode(config.PublicKeyWhatsAuth, at.GetLoginFromHeader(r))
    Example, err := atdb.GetOneDoc[model.Userdomyikado](config.Mongoconn, "user", primitive.M{"phonenumber": payload.Id})
    Furthermore, to protect every endpoint with authentication.
    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")
    id:=at.GetParam(r)
    //or
    id := r.URL.Path[strings.LastIndex(r.URL.Path, "/")+1:]
    Furthermore, with get data logic using mongoDB object ID
      // 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)

Fiber Example

func Homepage(ctx *fiber.Ctx) error {
	// Your logic here
	return ctx.Status(fiber.StatusOK).JSON(fiber.Map{"message": "success"})
}

Common Operations:

  • 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"})

MongoDB Integration

Easily log or manage documents in MongoDB:

Insert Document without Struct:

document := bson.D{
    {Key: "username", Value: "user1"},
    {Key: "createdAt", Value: time.Now()},
}

Convert ObjectID:

  • String to primitive.ObjectID:
    objectId, err := primitive.ObjectIDFromHex(strid)
  • ObjectID to String:
    strid := objectId.Hex()

Testing and Code Coverage

Ensure code quality with Go’s built-in testing tools.

  1. Write Test Cases:
    main_test.go

    func TestSum(t *testing.T) {
        result := Sum(2, 3)
        if result != 5 {
            t.Errorf("Expected 5, got %d", result)
        }
    }
  2. Run Tests with Coverage:

    go test -cover
  3. Generate Detailed Report:

    go test -coverprofile=coverage.out
    go tool cover -html=coverage.out

Deployment

Set up your Go environment:

export GOPROXY=proxy.golang.org

Update dependencies and publish packages:

go get -u all
go mod tidy
git tag v0.1.0
git push origin --tags

Deploy your application following our deployment guide.

About

Golang with low cost production deployment

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •