How to add item to array in struct in golang

huangapple go评论101阅读模式
英文:

How to add item to array in struct in golang

问题

使用以下代码,将IP结构添加到Server结构的ips数组中:

import (
    "net"
)

type Server struct {
    id  int
    ips []net.IP
}

func main() {
    o := 5
    ip := net.ParseIP("127.0.0.1")
    server := Server{o, []net.IP{ip}}
}

在上述代码中,我们使用[]net.IP{ip}将IP结构添加到Server结构的ips数组中。

关于ips数组的问题,你的代码是正确的。你可以使用切片(slice)来存储多个IP地址。如果你想在函数之间共享Server结构的实例,并且希望在不同函数中修改ips数组时,可以考虑使用指针。通过使用指针,你可以在不同函数之间共享相同的Server实例,并且对ips数组的修改将在所有函数中生效。以下是使用指针的示例:

import (
    "net"
)

type Server struct {
    id  int
    ips []*net.IP
}

func main() {
    o := 5
    ip := net.ParseIP("127.0.0.1")
    server := Server{o, []*net.IP{&ip}}
}

在上述代码中,我们使用[]*net.IP{&ip}将指向IP结构的指针添加到Server结构的ips数组中。

英文:

With the code below how do I add an IP struct to the Server struct's ips array?

import (
    "net"
)

type Server struct {
    id int
    ips []net.IP
}

func main() {
    o := 5
    ip := net.ParseIP("127.0.0.1")
    server := Server{o, ??ip??}
}

Do I even have the ips array correct? Is it better to use a pointer?

答案1

得分: 13

一个切片字面量的写法是[]net.IP{ip}(或者[]net.IP{ip1,ip2,ip3...})。从风格上讲,使用带有字段名的结构体初始化器更加常见,所以Server{id: o, ips: []net.IP{ip}}更加标准。整个代码示例如下所示:

package main

import (
	"fmt"
	"net"
)

type Server struct {
	id  int
	ips []net.IP
}

func main() {
	o := 5
	ip := net.ParseIP("127.0.0.1")
	server := Server{id: o, ips: []net.IP{ip}}
	fmt.Println(server)
}

你问道:

我的ips数组是否正确?使用指针会更好吗?

你不需要使用指向切片的指针。切片本身就是一个小的结构体,包含指针、长度和容量。

英文:

A slice literal looks like []net.IP{ip} (or []net.IP{ip1,ip2,ip3...}. Stylistically, struct initializers with names are preferred, so Server{id: o, ips: []net.IP{ip}} is more standard. The whole code sample with those changes:

package main

import (
	"fmt"
	"net"
)

type Server struct {
	id  int
	ips []net.IP
}

func main() {
	o := 5
	ip := net.ParseIP("127.0.0.1")
	server := Server{id: o, ips: []net.IP{ip}}
	fmt.Println(server)
}

You asked

> Do I even have the ips array correct? Is it better to use a pointer?

You don't need to use a pointer to a slice. Slices are little structures that contain a pointer, length, and capacity.

huangapple
  • 本文由 发表于 2013年12月1日 10:57:19
  • 转载请务必保留本文链接:https://go.coder-hub.com/20308229.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定