fscan/Common/target.go
ZacharyZcR b463984e78 refactor: 重构main.go入口文件并引入依赖注入架构
- 创建app包实现依赖注入容器和初始化器模式
- 重构main.go为六阶段清晰的初始化流程
- 新增结构化错误处理替代简陋的os.Exit调用
- 为HostInfo添加辅助函数增强功能但保持向后兼容
- 引入TargetInfo包装器支持上下文和元数据管理
- 优化代码组织提升可维护性和可测试性
2025-08-12 14:37:28 +08:00

118 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package common
import (
"context"
)
// TargetInfo 包装HostInfo提供更丰富的功能
type TargetInfo struct {
*HostInfo // 嵌入HostInfo保持向后兼容
context context.Context
metadata map[string]interface{}
}
// NewTargetInfo 创建新的目标信息
func NewTargetInfo(hostInfo HostInfo) *TargetInfo {
return &TargetInfo{
HostInfo: &hostInfo,
context: context.Background(),
metadata: make(map[string]interface{}),
}
}
// NewTargetInfoFromPtr 从HostInfo指针创建目标信息
func NewTargetInfoFromPtr(hostInfo *HostInfo) *TargetInfo {
return &TargetInfo{
HostInfo: hostInfo,
context: context.Background(),
metadata: make(map[string]interface{}),
}
}
// WithContext 设置上下文
func (t *TargetInfo) WithContext(ctx context.Context) *TargetInfo {
t.context = ctx
return t
}
// GetContext 获取上下文
func (t *TargetInfo) GetContext() context.Context {
if t.context == nil {
t.context = context.Background()
}
return t.context
}
// SetMetadata 设置元数据
func (t *TargetInfo) SetMetadata(key string, value interface{}) *TargetInfo {
if t.metadata == nil {
t.metadata = make(map[string]interface{})
}
t.metadata[key] = value
return t
}
// GetMetadata 获取元数据
func (t *TargetInfo) GetMetadata(key string) (interface{}, bool) {
if t.metadata == nil {
return nil, false
}
value, exists := t.metadata[key]
return value, exists
}
// GetAllMetadata 获取所有元数据
func (t *TargetInfo) GetAllMetadata() map[string]interface{} {
if t.metadata == nil {
return make(map[string]interface{})
}
// 返回副本,防止外部修改
result := make(map[string]interface{})
for k, v := range t.metadata {
result[k] = v
}
return result
}
// Clone 克隆目标信息
func (t *TargetInfo) Clone() *TargetInfo {
clonedHost := CloneHostInfo(t.HostInfo)
cloned := &TargetInfo{
HostInfo: &clonedHost,
context: t.context,
metadata: make(map[string]interface{}),
}
// 复制元数据
for k, v := range t.metadata {
cloned.metadata[k] = v
}
return cloned
}
// GetHostInfo 获取原始HostInfo向后兼容
func (t *TargetInfo) GetHostInfo() HostInfo {
return *t.HostInfo
}
// Validate 验证目标信息
func (t *TargetInfo) Validate() error {
return ValidateHostInfo(t.HostInfo)
}
// String 返回字符串表示
func (t *TargetInfo) String() string {
return HostInfoString(t.HostInfo)
}
// IsValid 检查目标是否有效
func (t *TargetInfo) IsValid() bool {
return t.Validate() == nil
}
// HasMetadata 检查是否有指定的元数据
func (t *TargetInfo) HasMetadata(key string) bool {
_, exists := t.GetMetadata(key)
return exists
}