Golang中应该传递什么值以及如何传递给函数

Golang中应该传递什么值以及如何传递给函数 我有一个函数 f5.ModifyVirtualServer(vs.Name, config),它使用了如下所示的结构体:

type VirtualServer struct {
	Name                       string `json:"name,omitempty"`
	Partition                  string `json:"partition,omitempty"`
	FullPath                   string `json:"fullPath,omitempty"`
	Generation                 int    `json:"generation,omitempty"`
        Rules               []string  `json:"rules,omitempty"`

我想将 Rules 的值传递给上述函数,该值为 "/Common/Tetration_TCP_L4_ipfix"
函数代码如下:

func (b *BigIP) ModifyVirtualServer(name string, config *VirtualServer) error {
	return b.put(config, uriLtm, uriVirtual, name)
}

更多关于Golang中应该传递什么值以及如何传递给函数的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

想了解更多关于Go语言指针的内容
Go语言的指针特性继承自C语言

更多关于Golang中应该传递什么值以及如何传递给函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我的示例不应直接照搬。出现错误的原因是 VirtualServer 结构体需要从其他包导入,ModifyVirtualServer 函数也是如此。您应该为 VirtualServer 和 ModifyVirtualServer 都加上它们所属的包名前缀。

你的意思是这样吗:

vs := VirtualServer{"Name","Partition","FullPath",1,[]string{"/Common/Tetration_TCP_L4_ipfix"}}
ModifyVirtualServer("name", &vs)

Common/Tetration_TCP_L4_ipfix

感谢 @imatmati,这个方法有效!!!

for _, vs := range vservers.VirtualServers {
		fmt.Printf(" Name: %s Virtual Server type is %s %s\n ", vs.Name, vs.IPProtocol, vs.Rules)
		vs.Rules = []string{"/Common/Tetration_TCP_L4_ipfix"}
		//vs.Description = "Modified Sanjay Shitole"
		f5.ModifyVirtualServer(vs.Name, &vs)

	}

}

go run f5gohello.go
 TCP iRule  exists on your local machine
 UDP iRule exists on your local machine
 Attempting to connect...
 Checking TCP irule exists on bigip ......
Name: Tetration_TCP_L4_ipfix
 TCP irule Exists on BIG-IP

imatmati:

vs := VirtualServer{“Name”,“Partition”,“FullPath”,1,[]string{"/Common/Tetration_TCP_L4_ipfix"}}

这让我遇到了错误

for _, vs := range vservers.VirtualServers {
		fmt.Printf(" Name: %s Virtual Server type is %s %s\n ", vs.Name, vs.IPProtocol, vs.Rules)
		vs := VirtualServer{"Name", "Partition", "FullPath", 1, []string{"/Common/Tetration_TCP_L4_ipfix"}}
		//vs.Description = "Modified Sanjay Shitole"
		f5.ModifyVirtualServer(vs.Name, &vs)

	}
 go run f5gohello.go
# command-line-arguments
./f5gohello.go:175:9: undefined: VirtualServer
SJC-ML-00028512:tet shitole$ 

该函数位于 https://github.com/f5devcentral/terraform-provider-bigip/blob/master/vendor/github.com/f5devcentral/go-bigip/ltm.go

在Go语言中,你需要创建一个VirtualServer结构体实例,设置Rules字段的值,然后将该实例的指针传递给ModifyVirtualServer函数。

示例代码:

// 创建VirtualServer配置
config := &VirtualServer{
    Name:       vs.Name, // 保持原有名称
    Partition:  "Common", // 根据实际情况设置分区
    Rules:      []string{"/Common/Tetration_TCP_L4_ipfix"},
}

// 调用函数
err := f5.ModifyVirtualServer(vs.Name, config)
if err != nil {
    // 处理错误
    log.Printf("修改虚拟服务器失败: %v", err)
}

如果你只想更新Rules字段而保持其他字段不变,可以这样做:

config := &VirtualServer{
    Rules: []string{"/Common/Tetration_TCP_L4_ipfix"},
}

err := f5.ModifyVirtualServer(vs.Name, config)
if err != nil {
    log.Printf("修改虚拟服务器失败: %v", err)
}

注意:由于结构体字段使用了omitempty标签,未设置的字段在JSON序列化时会被忽略,不会影响服务器上现有的配置值。

回到顶部