Не видит публичные функции структуры Golang - PullRequest
0 голосов
/ 22 мая 2019

Я не вижу публичный метод структуры, которую я определил.Может кто-нибудь, пожалуйста, дайте мне понять, почему?Вот код:

// DataSaver.go:

package DataStorage

import (
   "fmt"
   "os"
)

type DataSaver struct {
   // doesn't relevant to my question
   fileName string
   file     *os.File
}

func PrintStr() {
   fmt.Println("hello")
}

Тогда у меня есть метод main в другом классе.Я инициализировал структуру и хотел вызвать функцию PrintStr ().Однако я не могу вызвать этот метод.Зачем?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 мая 2019

Это не метод, это просто функция.

Импортируйте DataStorage (вы должны сделать его строчным), затем вы можете вызвать DataStorage.PrintStr ()

0 голосов
/ 23 мая 2019

Кажется, у вас еще нет концепции приемника метода.Ваш метод для структуры должен быть определен следующим образом:

func (this DataSaver)PrintStr() {
   fmt.Println("hello")
}

или

func (this *DataSaver)PrintStr() {
   fmt.Println("hello")
}

, какой метод вы выберете, зависит от того, хотите вы вызвать метод по указателю или нет;

0 голосов
/ 22 мая 2019

Я поэкспериментировал с этим, и есть несколько вещей, о которых следует позаботиться:

  1. Убедитесь, что вы правильно импортировали пакет по отношению к вашей GOPATH, например,

    import "github.com/some-repo/datastorage"

И убедитесь, что ваши пакеты / репозитории находятся в вашей GOPATH и в правильных каталогах (go очень суетливо относится к тому, как вы это делаете)

  1. Обратитесь к своей функции, используя имя пакета следующим образом:

    func main () { DataStorage.PrintStr () }

Другой плакат верен в том, что соглашения о том, что имена пакетов должны быть строчными,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...