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 <bser...@computer.org> wrote:

> On Sat, Aug 29, 2020 at 2:01 PM Shyaka <renek...@gmail.com> 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 golang-nuts+unsubscr...@googlegroups.com.
> > 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 golang-nuts+unsubscr...@googlegroups.com.
> 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 golang-nuts+unsubscr...@googlegroups.com.
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.

Reply via email to