package orm import ( "database/sql/driver" "fmt" "net/netip" ) type Inet struct { netip.Addr } func (inet Inet) Value() (driver.Value, error) { return inet.MarshalText() } func (inet *Inet) Scan(value any) (err error) { switch value := value.(type) { case string: return inet.UnmarshalText([]byte(value)) default: return fmt.Errorf("不支持的类型: %T", value) } } func ParseInet(ip string) (*Inet, error) { addr, err := netip.ParseAddr(ip) if err != nil { return nil, err } return &Inet{addr}, nil }