В 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)
}
Другие вопросы по тегам