Конвертирование Map в Struct и обратно
This commit is contained in:
parent
12e96926e2
commit
b6866f8540
5 changed files with 118 additions and 1 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -25,4 +25,6 @@ go.work.sum
|
||||||
# env file
|
# env file
|
||||||
.env
|
.env
|
||||||
|
|
||||||
testconfig.json
|
testconfig.json
|
||||||
|
go.sum
|
||||||
|
main
|
||||||
9
miku/go.mod
Normal file
9
miku/go.mod
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
module main
|
||||||
|
|
||||||
|
go 1.24.2
|
||||||
|
|
||||||
|
replace miku/users => ../users/
|
||||||
|
|
||||||
|
require miku/users v0.0.0-00010101000000-000000000000
|
||||||
|
|
||||||
|
require github.com/google/uuid v1.6.0 // indirect
|
||||||
28
miku/main.go
Normal file
28
miku/main.go
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"miku/users"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var confFile map[string]interface{}
|
||||||
|
file, err := os.ReadFile("../testconfig.json")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(file, &confFile)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
vlessUsers := users.MapToStruct(confFile)
|
||||||
|
newUsers := vlessUsers.Add("test")
|
||||||
|
newConfFile, err := users.StructToConfig(newUsers, confFile)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
log.Println(newConfFile)
|
||||||
|
}
|
||||||
5
users/go.mod
Normal file
5
users/go.mod
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
module users
|
||||||
|
|
||||||
|
go 1.24.2
|
||||||
|
|
||||||
|
require github.com/google/uuid v1.6.0
|
||||||
73
users/users.go
Normal file
73
users/users.go
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
package users
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type VLESSUsers []struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
UUID uuid.UUID `json:"uuid"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u VLESSUsers) Del(user string) VLESSUsers {
|
||||||
|
var newU VLESSUsers
|
||||||
|
for _, v := range u {
|
||||||
|
if v.Name != user {
|
||||||
|
newU = append(newU, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newU
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u VLESSUsers) Add(user string) VLESSUsers {
|
||||||
|
var userStruct struct {
|
||||||
|
Name string
|
||||||
|
UUID uuid.UUID
|
||||||
|
}
|
||||||
|
userStruct.Name = user
|
||||||
|
randUUID, err := uuid.NewUUID()
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
userStruct.UUID = randUUID
|
||||||
|
|
||||||
|
newU := append(u, struct {
|
||||||
|
Name string "json:\"name\""
|
||||||
|
UUID uuid.UUID "json:\"uuid\""
|
||||||
|
}(userStruct))
|
||||||
|
return newU
|
||||||
|
}
|
||||||
|
|
||||||
|
func MapToStruct(toStructMap map[string]interface{}) VLESSUsers {
|
||||||
|
var vlessUsers VLESSUsers
|
||||||
|
usedMap := toStructMap["inbounds"].([]interface{})[0].(map[string]interface{})["users"].([]interface{})
|
||||||
|
for _, curretMap := range usedMap {
|
||||||
|
userMap := curretMap.(map[string]interface{})
|
||||||
|
vlessUsers = append(vlessUsers, struct {
|
||||||
|
Name string "json:\"name\""
|
||||||
|
UUID uuid.UUID "json:\"uuid\""
|
||||||
|
}{
|
||||||
|
Name: userMap["name"].(string),
|
||||||
|
UUID: uuid.MustParse(userMap["uuid"].(string)),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return vlessUsers
|
||||||
|
}
|
||||||
|
|
||||||
|
func StructToConfig(vlessUsers VLESSUsers, configMap map[string]interface{}) (map[string]interface{}, error) {
|
||||||
|
var toInterface []map[string]interface{}
|
||||||
|
newConfigMap := configMap
|
||||||
|
structJson, err := json.Marshal(vlessUsers)
|
||||||
|
if err != nil {
|
||||||
|
return map[string]interface{}{}, err
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(structJson, &toInterface)
|
||||||
|
if err != nil {
|
||||||
|
return map[string]interface{}{}, err
|
||||||
|
}
|
||||||
|
newConfigMap["inbounds"].([]interface{})[0].(map[string]interface{})["users"] = toInterface
|
||||||
|
return newConfigMap, nil
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue