Wątek przeniesiony 2021-09-16 09:48 z Inne języki programowania przez cerrato.

Struct in struct - runtime error

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]

2

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

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.

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