后端
cmd
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
go env
go install
go run main.go
go.mod
module HelloTOSAPP
go 1.18
require (
github.com/gin-gonic/gin v1.8.1
gitlab.local/golibrary/resp v1.0.5
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069
)
require (
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/go-playground/validator/v10 v10.10.0 // indirect
github.com/goccy/go-json v0.9.7 // indirect
github.com/gogf/gf v1.16.6 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
github.com/ugorji/go/codec v1.2.7 // indirect
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 // indirect
golang.org/x/text v0.3.6 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
main.go
package main
import (
"flag"
"github.com/gin-gonic/gin"
// "golang.org/x/sys/unix"
"log"
"os"
"os/exec"
"os/signal"
)
var daemonType bool
// const LOG_PATH = "var/log/HelloTOSAPP.log"
// const SOCK_PATH = "var/api/TOS6_APP_HelloWorld.sock"
const LOG_PATH = "HelloTOSAPP.log"
const SOCK_PATH = "TOS6_APP_HelloWorld.sock"
func init() {
vFlag := &flag.FlagSet{}
vFlag.BoolVar(&daemonType, "D", false, "Run in daemon")
err := vFlag.Parse(os.Args[1:])
if err != nil {
os.Exit(255)
}
}
func main() {
if daemonType {
cmd := exec.Command(os.Args[0])
cmd.Env = append(os.Environ(), "__Daemon=true")
if err := cmd.Start(); err != nil {
log.Fatalln(err)
}
return
}
if os.Getenv("__Daemon") == "true" {
stdOut, err := os.OpenFile(LOG_PATH, os.O_TRUNC|os.O_RDWR|os.O_CREATE, 0640)
if err != nil {
log.Fatalln(err)
}
defer stdOut.Close()
os.Stdout = stdOut
os.Stderr = stdOut
}
gin.SetMode(gin.ReleaseMode)
app := gin.New()
app.Use(gin.Recovery(), gin.Logger())
g := app.Group("/TOS6_APP_HelloWorld")
{
g.GET("/", func(c *gin.Context) {
c.String(200, "Hello TOS6 Application")
})
g.GET("/welcome", func(c *gin.Context) {
c.String(200, "Welcome, Developers!")
})
}
app.Run()
go func() {
ch := make(chan os.Signal)
signal.Notify(ch/*, unix.SIGINT, unix.SIGTERM, unix.SIGQUIT, unix.SIGHUP*/)
<-ch
_ = os.Remove(SOCK_PATH)
os.Exit(0)
}()
if err := app.RunUnix(SOCK_PATH); err != nil {
log.Panicln(err)
}
}
Makefile
target=TOS6_APP_HelloWorld
init:
go mod tidy
clean:
@rm -f ${target}*
amd64: clean init
@env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o ${target}-amd64
upx --best --lzma -9 -f -o ./${target} ./${target}-amd64
cp -a ${target} ../output/sbin/${target}
arm64: clean init
@env CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=7 go build -ldflags "-s -w" -o ${target}-arm64
upx --best --lzma -9 -f -o ./${target} ./${target}-arm64
cp -a ${target} ../output/sbin/${target}
前端
build.sh
rm -f webui.bz2 >/dev/null 2>&1
tar -Jcvf webui.bz2 -C dist/ .
cp webui.bz2 ../output