package main import ( "encoding/json" "fmt" "os" "git.algo.com.cn/public/saasapi" ) // MapConfig 配置 type MapConfig struct { Targets map[string]*Target `json:"targets"` } // Target 配置 type Target struct { WriteByte *byte `json:"write_byte"` // byte值 WriteBytePos uint32 `json:"write_byte_pos"` // byte写入位置 WriteUint32 *uint32 `json:"write_uint32"` // uint32值 WriteUint32Pos uint32 `json:"write_uint32_pos"` // uint32写入位置 WriteFlag *bool `json:"write_flag"` // 标志位 WriteExpire *uint32 `json:"write_expire"` // 过期时间 WriteFlagWithExpirePos uint32 `json:"write_flag_with_expire_pos"` // 标志与过期写入位置 } // LoadConfigFile 加载配置文件 func LoadMapFile(filename string) (*MapConfig, error) { // 打开文件 f, err := os.Open(filename) if err != nil { return nil, err } defer f.Close() sc := &MapConfig{} err = json.NewDecoder(f).Decode(sc) if err != nil { return nil, err } for targetName, targetInfo := range sc.Targets { if targetInfo.WriteBytePos >= uint32(saasapi.MAX_U8) { err = fmt.Errorf("%v WriteBytePos>MAX_U8 , current %v, MAX %v", targetName, targetInfo.WriteBytePos, uint32(saasapi.MAX_U8)-1) break } if targetInfo.WriteUint32Pos >= uint32(saasapi.MAX_U32) { err = fmt.Errorf("%v WriteUint32Pos>MAX_U32 , current %v, MAX %v", targetName, targetInfo.WriteUint32Pos, uint32(saasapi.MAX_U32)-1) break } if targetInfo.WriteFlagWithExpirePos >= uint32(saasapi.MAX_FLAG) { err = fmt.Errorf("%v WriteFlagWithExpirePos>MAX_FLAG , current %v, MAX %v", targetName, targetInfo.WriteFlagWithExpirePos, uint32(saasapi.MAX_FLAG)-1) break } } return sc, err }