В golang как вы получаете доступ к методу, который получает указатель на приемник и также находится в другом пакете?
package tests
import (
"testing"
"strconv"
"dir/model"
)
type TestStruct struct {
ID int
a string
b string
c string
d string
ac bool
ad bool
}
func TestUpdate(t *testing.T) {
t.Log("Updating")
cur := TestStruct{i,a,b,c,d,true,true}
err := cur.model.Update(a,b,c,d,true,true)
}
В приведенном выше блоке кода я пытаюсь вызвать метод, который принимает указатель получателя и находится в пакете "модель".
Ошибка компилятора для этого:
ссылка на неопределенное поле или метод 'модель' err:= cur.model.Update(a,b,c,d,e,true,true)
В приведенном ниже блоке кода метод "Udpate" в пакете "model" переводит точку приемника в struct и другие входные параметры.
package model
type Struct struct {
ID int
a string
b string
c string
d string
ac bool
ad bool
}
func (update *Struct) Update(a, b, c, d,
e string, f, g bool) error {
/* code */
}
Я знаю, что для функций в других пакетах я могу вызвать их в моем текущем пакете, сказав:
packageName.method(parameters)
Как я могу вызвать метод "Update" из пакета "model" в пакете "tests" при вводе указателя приемника, когда я его вызываю?
2 ответа
func (update *Struct) Update(a, b, c, d, e string, f, g bool)
это метод, который определяется по типу model.Struct
, Вы не можете назвать это другим типом, таким как TestStruct
определено в вашем тестовом пакете.
Что вы, вероятно, хотите сделать, это:
cur := model.Struct{i,a,b,c,d,true,true}
err := cur.Update(a,b,c,d,true,true)
Например,
package tests
import (
"dir/model"
"testing"
)
func TestUpdate(t *testing.T) {
t.Log("Updating")
cur := model.Struct{i, a, b, c, d, true, true}
err := cur.Update(a, b, c, d, true, true)
}