Struct in struct - runtime error

Odpowiedz Nowy wątek
2019-08-25 09:57
0

Poniżej podaje uproszczony kod, który zwraca błąd.
Proszę o informację dlaczego pojawia się błąd i jak można naprawić poniższy kod.

Ps.
Oczywiście można zmienić kod żeby metoda nie zwracała struktury, ale chciałbym żeby metody wpisywać w jednym ciągu x.methoda1().metoda2().metoda3()

Mało tu wątków odnośnie tego języka, mam nadzieję że jednak znajdą się osoby, które są w stanie pomóc.

Kod

package main

import (
    "testing"
)

func TestDog(t *testing.T) {

    var x = &dog{}
    x.getArgs().setColor("red")
}

type dog struct {
    arguments *arguments
}

type arguments struct {
    color string
}

func (s *dog)getArgs() *arguments {
    return s.arguments
}

func (a *arguments)setColor(color string) *arguments {
    a.color = color
    return a
}

Otrzymuję taki błąd:

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x54b260]

Pozostało 580 znaków

2019-08-25 10:22

Nigdzie nie uzupełniasz pola x.arguments, stąd jest ono równe nil.


Pozostało 580 znaków

2019-08-26 07:08
1

i trochę uzupełnię - nie musisz inicjować pól, które nie są wskaźnikami/mapami/tablicami. Poza tym, potrzebny Ci taki łańcuszek wywołań? :) Mógłbyś spokojnie napisać

x.setColor("red")

i byłoby by czytelniejsze :) oraz chowasz szczegół implementacyjny jak fakt, iż trzymasz to w strukturze arguments.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0