- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试使用字符串键和指向结构值的指针来填充映射。具体来说,在填充一个字段时出现问题,需要通过调用函数在另一个数组的范围内递增。 Problem snippet is here .
package main
import (
"fmt"
"net"
)
type bgp struct {
tag net.IP
}
type nbrStruct struct {
bgp
}
var mIPStr = "10.10.10.0"
func main() {
m := make(map[string]*nbrStruct)
s := []string{"string1", "string2"}
mIP := net.ParseIP(mIPStr)
mIP = mIP.To4()
for _, v := range s {
m[v] = &nbrStruct{
bgp: bgp{
tag: mIP,
},
}
fmt.Println(mIP)
mIP, _ = NextIP(mIP, 4)
}
for key, value := range m {
fmt.Printf("key: %v ---> tag: %v\n", key, value.bgp.tag)
}
}
func NextIP(ip net.IP, addIP int) (net.IP, error) {
var err error
if ip = ip.To4(); ip != nil {
// Case IPv4
ip[3] = ip[3] + uint8(addIP)
if ip[3] > 255 {
ip[3] = ip[3] - 255
ip[2]++
}
if ip[2] > 255 {
ip[2] = ip[2] - 255
ip[1]++
}
if ip[1] > 255 {
err = fmt.Errorf("NextIP out of space in top IPv4 Octet %v", ip)
return nil, err
}
// } else if ip = ip.To16(); ip != nil {
// // Case IPv6
} else {
err = fmt.Errorf("NextIP cannot understand IP: %v", ip)
return nil, err
}
return ip, err
}
我遇到的问题是第 31 行
mIP, _ = NextIP(mIP, 4)
我希望这两个值是:
m["string1"].bgp.tag == 10.10.10.0
m["string2"].bgp.tag == 10.10.10.4
...NextIP 函数正确返回。但是看 map ,之前的m["string1"].bgp.tag值好像被新的覆盖了?他们都是 10.10.10.8;对此非常困惑。我做错了什么?
最佳答案
net.IP是一个 byte slice 。
您基本上是在不断地修改 mIP
并存储它。但是由于方式slices work ,您实际上是在存储指向基础数据的指针。
您的问题的快速解决方法是存储 mIP
的副本。例如:
for _, v := range s {
tmpIP := make([]byte, len(mIP))
copy(tmpIP, mIP)
m[v] = &nbrStruct{
bgp: bgp{
tag: tmpIP,
},
}
mIP, _ = NextIP(mIP, 4)
}
这会产生正确的输出:
key: string1 ---> tag: 10.10.10.0
key: string2 ---> tag: 10.10.10.4
我强烈建议您更改 NextIP
以返回新 IP,而不是输入的修改版本。
关于go - 使用递增函数填充结构图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48126879/
我正在尝试使用 Structure Map 在我的项目中配置 NCommon NHRepository。我如何阻止它选择最贪婪的构造函数? public class NHRepository : R
我的注册表中有以下代码: Scan(x => { x.Assembly(Assembly.GetExecutingAssembly());
我有一个这样的界面 public interface IWriter { ... } 和一个类 public class WriterMerger { public WriterMerger(
是否可以在注册表中注册一个接口(interface),然后“重新注册”它以覆盖第一次注册? 即: For().Use(); For().Use(); 我想要的是在运行时,当我请求 ISomeInter
我正在使用注册表 DSL 示例来配置结构图。但是这样做会使我所有注册的类型在我的应用程序的所有层中都可用,我在其中添加了对结构图的引用。我不希望我的业务层知道我的数据访问层的任何信息,反之亦然。如何让
既然 ObjectFactory 静态函数已被标记为过时,我目前正在尝试了解结构图。 从长远来看,我必须在 MVC 和 WebApi 应用程序中使用它。以前使用时,静态方法的一行被放置在 global
我正在使用 StructureMap存储 session 对象: config.For().LifecycleIs(new HttpSessionLifecycle()); 一切正常,所以我可以使用
我需要在扫描仪的 Ctor 中发送自定义实例。听到是我的代码: public class RunnableScanner : IRegistrationConvention {
我正在为基于 OWIN 的 Web API 做一些集成测试。我正在使用结构图作为 DI 容器。在其中一种情况下,我需要模拟一个 API 调用(不能将其作为测试的一部分)。 我将如何使用 Structu
我想在请求的生命周期内动态地将一个实例注入(inject)到结构图中(即在注册表/配置之外)。 目前我正在 IHttpModule 的 HandleBeginRequest 事件中执行此操作: con
我有包含 IEnumerable 参数的构造函数。当我尝试将具体对象注入(inject) automocker 时,它没有被使用。 当我使用包含 IEnumerable 属性的包装类时,一切都按预期工
我有一个具有以下 ctor 的服务类: public class (IMessageService emailService, IMessageService smsService) { ... }
我正在使用 Ubuntu 10.04,正在研究内核对象的编程。 我遇到过一些相当复杂的结构,我很难阅读,所以我想我会尝试找到一些可以帮助我可视化它们的工具。 目前我唯一能找到的是VCG ,它有一个 C
我知道错误“没有为此对象定义无参数构造函数”已被询问大约一百万次。我的情况不同 我有一个可以运行的应用程序。许多 Controller 和一个区域有许多 Controller 。我刚刚添加了一个新区域
我有一个接口(interface)和一个定义如下的类 public interface IShape { } public class Square : IShape { } 我知道我可以在结构图中为
我在最近的项目中实现事件处理时遇到了困难。 我已验证 structuremap 正在正确扫描、组装和添加 EventHandlers Scan(cfg => {
使用 structuremap 2.6.4.1 我的容器配置如下: existingContainer.Configure(expression => { expression.For()
我在注册一些像这样的依赖项时遇到问题。 No default Instance is registered and cannot be automatically determined for typ
具体来说,使用容器而不是静态 ObjectFactory 是否能让我保持多个并发配置,或者容器是单例? 最佳答案 如果容器是静态的,则它们只是单例。静态类型存在很多问题,尤其是在可测试性方面,所以我绝
给定 public class Blah : IBlah { public Blah(decimal argument) { } } 什么时候 ForRequestedType
我是一名优秀的程序员,十分优秀!