Skip to content

Commit

Permalink
Merge pull request #22 from osspkg/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
markus621 authored Jul 1, 2024
2 parents b332278 + f06d6b4 commit d6b6b5f
Show file tree
Hide file tree
Showing 33 changed files with 2,658 additions and 1 deletion.
2 changes: 1 addition & 1 deletion algorithms/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ module go.osspkg.com/x/algorithms

go 1.20

replace go.osspkg.com/x/test => ./../test
replace go.osspkg.com/x/test => ./../test
143 changes: 143 additions & 0 deletions app/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# Application as service

## Base config file

***config.yaml***

```yaml
env: dev
level: 3
log: /var/log/simple.log
pig: /var/run/simple.pid
```
level:
* 0 - error only
* 1 - + warning
* 2 - + info
* 3 - + debug
## Example
```go
package main

import (
"fmt"

"go.osspkg.com/x/app"
"go.osspkg.com/x/log"
xc "go.osspkg.com/x/context"
)

type (
//Simple model
Simple struct{}
//Config model
Config struct {
Env string `yaml:"env"`
}
)

//NewSimple init Simple
func NewSimple(_ Config) *Simple {
fmt.Println("--> call NewSimple")
return &Simple{}
}

//Up method for start Simple in DI container
func (s *Simple) Up(_ xc.Context) error {
fmt.Println("--> call *Simple.Up")
return nil
}

//Down method for stop Simple in DI container
func (s *Simple) Down(_ xc.Context) error {
fmt.Println("--> call *Simple.Down")
return nil
}

func main() {
app.New().
Logger(log.Default()).
ConfigFile(
"./config.yaml",
Config{},
).
Modules(
NewSimple,
).
Run()
}
```

## HowTo

***Run the app***

```go
app.New()
.ConfigFile(<path to config file: string>, <config objects separate by comma: ...interface{}>)
.Modules(<config objects separate by comma: ...interface{}>)
.Run()
```

***Supported types for initialization***

* Function that returns an object or interface

*All incoming dependencies will be injected automatically*

```go
type Simple1 struct{}
func NewSimple1(_ *log.Logger) *Simple1 { return &Simple1{} }
```

*Returns the interface*

```go
type Simple2 struct{}
type Simple2Interface interface{
Get() string
}
func NewSimple2() Simple2Interface { return &Simple2{} }
func (s2 *Simple2) Get() string {
return "Hello world"
}
```

*If the object has the `Up(xc.Context) error` and `Down() error` methods, they will be called `Up(xc.Context) error`
when the app starts, and `Down() error` when it finishes. This allows you to automatically start and stop routine
processes inside the module*

```go
var _ service.IServiceCtx = (*Simple3)(nil)
type Simple3 struct{}
func NewSimple3(_ *Simple4) *Simple3 { return &Simple3{} }
func (s3 *Simple3) Up(_ xc.Context) error { return nil }
func (s3 *Simple3) Down(_ xc.Context) error { return nil }
```

* Named type

```go
type HelloWorld string
```

* Object structure

```go
type Simple4 struct{
S1 *Simple1
S2 Simple2Interface
HW HelloWorld
}
```

* Object reference or type

```go
s1 := &Simple1{}
hw := HelloWorld("Hello!!")
```
Loading

0 comments on commit d6b6b5f

Please sign in to comment.