Logo

dev-resources.site

for different kinds of informations.

Getting Started with INFINI Framework - Our homemade framework for building enterprise golang applications

Published at
12/16/2024
Categories
opensource
go
application
Author
medcl
Categories
3 categories in total
opensource
open
go
open
application
open
Author
5 person written this
medcl
open
Getting Started with INFINI Framework - Our homemade framework for building enterprise golang applications

We recently open-sourced our homemade framework for building enterprise golang applications, called INFINI Framework.

The github repo is https://github.com/infinilabs/framework.

In this article, I will show you how to get started with INFINI Framework.

Create New Application

Let's use the NewAPP as the new project for example.

Create the project folder

Use the name new_app as the project id, and create the project folder as below:

cd ~/go/src/infini.sh/
mkdir new_app
Enter fullscreen mode Exit fullscreen mode

Note: Ensure that new_app is located in the same directory as the framework folder. This structure is required for the Makefile to function correctly.

Create the main file

Create a empty main.go file, and paste the code as below:

package main

import (
        "infini.sh/framework"
        "infini.sh/framework/core/module"
        "infini.sh/framework/core/util"
        "infini.sh/framework/modules/api"
        "infini.sh/new_app/config"
)

func main() {

        terminalHeader := ("     __               _      ___  ___ \n")
        terminalHeader += ("  /\\ \\ \\_____      __/_\\    / _ \\/ _ \\\n")
        terminalHeader += (" /  \\/ / _ \\ \\ /\\ / //_\\\\  / /_)/ /_)/\n")
        terminalHeader += ("/ /\\  /  __/\\ V  V /  _  \\/ ___/ ___/ \n")
        terminalHeader += ("\\_\\ \\/ \\___| \\_/\\_/\\_/ \\_/\\/   \\/     \n\n")

        terminalFooter := ("Goodbye~")
        app := framework.NewApp("new_app", "Make a golang application is such easy~.",
                util.TrimSpaces(config.Version), util.TrimSpaces(config.BuildNumber), util.TrimSpaces(config.LastCommitLog), util.TrimSpaces(config.BuildDate), util.TrimSpaces(config.EOLDate), terminalHeader, terminalFooter)
        app.IgnoreMainConfigMissing()
        app.Init(nil)
        defer app.Shutdown()
        if app.Setup(func() {
                module.RegisterSystemModule(&api.APIModule{})
                module.Start()
        }, func() {
        }, nil) {
                app.Run()
        }
}
Enter fullscreen mode Exit fullscreen mode

We use this online tool to generate a beauty ASCII based terminal header.

Create the config file

touch new_app.yml
Enter fullscreen mode Exit fullscreen mode

Create the makefile

create a empty Makefile, and paste the code as below:

SHELL=/bin/bash

# APP info
APP_NAME := new_app
APP_VERSION := 1.0.0_SNAPSHOT
APP_CONFIG := $(APP_NAME).yml
APP_EOLDate ?= "2025-12-31T10:10:10Z"
APP_STATIC_FOLDER := .public
APP_STATIC_PACKAGE := public
APP_UI_FOLDER := ui
APP_PLUGIN_FOLDER := plugins
PREFER_MANAGED_VENDOR=fase

include ../framework/Makefile
Enter fullscreen mode Exit fullscreen mode

Build the application

āžœ  new_app OFFLINE_BUILD=true make build
building new_app 1.0.0_SNAPSHOT main
/Users/medcl/go/src/infini.sh/new_app
framework path:  /Users/medcl/go/src/infini.sh/framework
fatal: not a git repository (or any of the parent directories): .git
update generated info
update configs
(cd ../framework/  && make update-plugins) || true # build plugins in framework
GOPATH=~/go:~/go/src/infini.sh/framework/../vendor/ CGO_ENABLED=0 GRPC_GO_REQUIRE_HANDSHAKE=off  GO15VENDOREXPERIMENT="1" GO111MODULE=off go build -a  -gcflags=all="-l -B"  -ldflags '-static' -ldflags='-s -w' -gcflags "-m"  --work  -o /Users/medcl/go/src/infini.sh/new_app/bin/new_app
WORK=/var/folders/j5/qd4qt3n55dz053d93q2mswfr0000gn/T/go-build435280758
# infini.sh/new_app
./main.go:17:9: can inline main.deferwrap1
./main.go:21:12: can inline main.func2
./main.go:18:22: func literal does not escape
./main.go:19:45: &api.APIModule{} escapes to heap
./main.go:21:12: func literal escapes to heap
restore generated info
Enter fullscreen mode Exit fullscreen mode

Run the application

āžœ  new_app git:(main) āœ— ./bin/new_app
     __               _      ___  ___
  /\ \ \_____      __/_\    / _ \/ _ \
 /  \/ / _ \ \ /\ / //_\\  / /_)/ /_)/
/ /\  /  __/\ V  V /  _  \/ ___/ ___/
\_\ \/ \___| \_/\_/\_/ \_/\/   \/

[NEW_APP] Make a golang application is such easy~.
[NEW_APP] 1.0.0_SNAPSHOT#001, 2024-12-16 06:15:10, 2025-12-31 10:10:10, HEAD
[12-16 14:15:19] [INF] [env.go:203] configuration auto reload enabled
[12-16 14:15:19] [INF] [env.go:209] watching config: /Users/medcl/go/src/infini.sh/new_app/config
[12-16 14:15:19] [INF] [app.go:311] initializing new_app, pid: 64426
[12-16 14:15:19] [INF] [app.go:312] using config: /Users/medcl/go/src/infini.sh/new_app/new_app.yml
[12-16 14:15:19] [INF] [api.go:214] local ips: 192.168.3.17
[12-16 14:15:19] [INF] [api.go:312] api server listen at: http://0.0.0.0:2900
[12-16 14:15:19] [INF] [module.go:159] started module: api
[12-16 14:15:19] [INF] [module.go:184] all modules are started
[12-16 14:15:19] [INF] [instance.go:101] workspace: /Users/medcl/go/src/infini.sh/new_app/data/new_app/nodes/ctfs8hbq50kevmkb3m6g
[12-16 14:15:19] [INF] [app.go:537] new_app is up and running now.
^C
[NEW_APP] got signal: interrupt, start shutting down
[12-16 14:15:23] [INF] [module.go:213] all modules are stopped
[12-16 14:15:23] [INF] [app.go:410] new_app now terminated.
[NEW_APP] 1.0.0_SNAPSHOT, uptime: 4.13334s

Goodbye~
Enter fullscreen mode Exit fullscreen mode

Conclusion

The demo code can be found here.

By leveraging the INFINI Framework, creating a Go application becomes significantly simpler and more efficient.
The framework provides built-in commands and modules, streamlining the development process and enabling you to focus on building your application's core functionality.

Follow us AT: https://github.com/infinilabs

application Article's
30 articles in total
Favicon
POS sale Interface - POS application agnostic
Favicon
Top Reasons to Choose a Mobile App Development Company for Your Business Growth
Favicon
Getting Started with INFINI Framework - Our homemade framework for building enterprise golang applications
Favicon
Choosing the Right Application Maintenance Provider: A Comprehensive Guide
Favicon
Navigating the Best Practices for Enterprise Application Testing in the Digital Landscape
Favicon
Run your application in Docker and build your own image
Favicon
Why Is Enterprise Application Testing Important?
Favicon
Master Microservices Packaging for Private Clouds: 5 Essential Tips
Favicon
Comprehensive Guide to Application Maintenance Services
Favicon
Top 9 Mistakes to Avoid in Application Performance Monitoring (APM)
Favicon
Build a Scalable AMQP-Based Messaging Framework on MongoDB in 5 Steps
Favicon
What Organizations Forget When Automating Enterprise Application Testing
Favicon
Unlock Seamless AWS Integration: 1-Click Cloud Logging Solution
Favicon
5 Reasons to Go for Enterprise Application Testing
Favicon
Mastering AWS Serverless: Build and Deploy Applications
Favicon
How to Create an Application Load Balancer (ALB) in AWS: A Step-by-Step Guide
Favicon
Boost App Performance: Unlock 1000+ TPS with JMeter Throughput Testing
Favicon
3DtoMe - Pitch your 3D product, together
Favicon
How Automated App Testing is Helpful for Business
Favicon
Revolutionize Cloud Development: Unlock the Full Potential of Spring WebFlux for Scalable and Efficient Applications
Favicon
The Best Technologies for Developing Fintech Applications in 2024
Favicon
App Development Companies: Finding the Best Fit for You
Favicon
94% of Workloads Will Be in Cloud by 2021: Expert Insights to Avoid Costly Mistakes
Favicon
Unlock Real-Time Data Streaming in 5 Minutes with Apache Kafka & Quarkus
Favicon
Strategies for Elevating Regression Testing: A Comprehensive Guide to Improvement
Favicon
Unlock API Potential in 7 Steps: Master RedHat 3-Scale for Beginners
Favicon
Innovative Applications of Data Science in Scientific Research
Favicon
Understanding Application Load Balancer: A Comprehensive Guide
Favicon
Unlock 3-Scale API Management: Master 5 Key Steps to Success in 30 Minutes!
Favicon
AI in MVP Development: Benefits and Applications You Never Knew Existed!

Featured ones: