Как создать методы для строкового типа в Голанге - PullRequest
0 голосов
/ 24 января 2019

Я планирую создать некоторое расширение метода для строкового типа.

Мне нужно записать все мои методы расширения в отдельный пакет.

Вот моя иерархия.

root
|    main.go
|    validation
     |   validate.go

на main.go, который я хотел бы получить, "abcd".Required()

main.go

package main

import (
    "fmt"
    "./validation"
)

func main() {
    fmt.Println( "abcd".Required() )
}

validate.go

package validation

func (s string) Required() bool {

    if s != "" {
        return true
    }

    return false
}

Когда я запускаю его, выдается ошибка.

ошибка

cannot define new methods on non-local type string

Я нашел некоторые ответы в другихвопросы о StackOverflow, но они точно не говорят о типе строки и о том, что метод находится в другом файле пакета.

1 Ответ

0 голосов
/ 24 января 2019

В вашем validate.go создайте новый тип String:

package validation

type String string

func (s String) Required() bool {

    return s != ""
}

, а затем работайте с validation.String объектами в вашем основном:

package main

import (
    "fmt"

    "./validation"
)

func main() {
    fmt.Println(validation.String("abcd").Required())
}

Исполняемый пример сздесь все в одном файле:

https://play.golang.org/p/z_LcTZ6Qvfn

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