Shyaka,
The list package does all operation on list pointer.
In your case, I think you are passing list object instead of pointer.
You have defined your structure as:-
type Persons struct {
name string
Names list.List <<<<<<<<<<<<< Its a list object and not a pointer to
list object.
}
Then you assign a list object to it.
p := &Persons{
name: "",
Names: *list.New(),
}
All your operations are on Names list object & due to that its not getting
passed as reference to PushBack &
you don't see desired result.
The fix would be to make your list a pointer.
type Persons struct {
name string
Names *list.List<--------------------- Make it a pointer.
}
func main() {
p := &Persons{
name: "",
Names: list.New(), <------------- Create a new list
}
With these two changes its working as expected.
On Sat, Aug 29, 2020 at 2:01 PM burak serdar <[email protected]> wrote:
> On Sat, Aug 29, 2020 at 2:01 PM Shyaka <[email protected]> wrote:
> >
> > Hello, I need help, I have a struct Person wiith list inside, I add 5
> string on list at the end I found that the list is nil, I don't know whre
> is the error, any help is appreciated.
> >
> > package main
> >
> > import (
> > "container/list"
> > "fmt"
> > )
> >
> > type Persons struct {
> > name string
> > Names list.List
> > }
> >
> > func main() {
> >
> > p := &Persons{
> > name: "",
> > Names: *list.New(),
> > }
>
> Your program doesn't work because of the above line. list.New()
> creates a new list containing the head/tail pointers within an Element
> instance, both pointing to the list created by list.New() by
> reference. They do not point to p.Names. When you add elements, those
> are added to the list returned by list.New(), not to Person.Names, but
> the size of Person.Names is incremented with each addition.
>
> Do not use list.New(), leave the Names uninitialized. It will
> initialize correctly the first time you add an element to it.
>
>
> > p.setName("John Peter")
> > p.add("one")
> > p.add("two")
> > p.add("three")
> > p.add("four")
> > p.add("five")
> > p.display()
> >
> > }
> >
> > func (p *Persons) setName(name string) {
> > p.name = name
> > }
> > func (p *Persons) add(name string) {
> > p.Names.PushBack(name)
> > }
> > func (p *Persons) display() {
> > fmt.Println(p.name)
> > for e := p.Names.Front(); e != nil; e = e.Next() {
> > fmt.Println(e.Value)
> > }
> > }
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "golang-nuts" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected].
> > To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/e8975da6-9af2-4660-8dbb-1a7e7e9b67cfn%40googlegroups.com
> .
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/CAMV2RqrH6v3wXMN1bw%3D2stUqfMTjB%2B%2BDmaQGYaV6OFw22af%2B_g%40mail.gmail.com
> .
>
--
-Siddhesh.
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/CAMjfk%2Bj_Td7y%2BRnPLBZ-%3DUFHfsNYndvn-g_TQQWYysheJk_6cQ%40mail.gmail.com.