如何在Golang中创建字符串类型的方法

usr*_*638 2 go

我打算为字符串类型创建一些方法扩展.

我需要将所有扩展方法写入一个单独的包中.

这是我的层次结构.

root
|    main.go
|    validation
     |   validate.go
Run Code Online (Sandbox Code Playgroud)

main.go我想要的,"abcd".Required()

main.go

package main

import (
    "fmt"
    "./validation"
)

func main() {
    fmt.Println( "abcd".Required() )
}
Run Code Online (Sandbox Code Playgroud)

validate.go

package validation

func (s string) Required() bool {

    if s != "" {
        return true
    }

    return false
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,会出错.

错误

cannot define new methods on non-local type string
Run Code Online (Sandbox Code Playgroud)

我在StackOverflow上的其他问题中找到了一些答案,但他们并没有完全谈论字符串类型并将方法放在不同的包文件中.

Iai*_*can 6

在您的validate.go中创建一个新类型String:

package validation

type String string

func (s String) Required() bool {

    return s != ""
}
Run Code Online (Sandbox Code Playgroud)

然后使用validation.String主要对象:

package main

import (
    "fmt"

    "./validation"
)

func main() {
    fmt.Println(validation.String("abcd").Required())
}
Run Code Online (Sandbox Code Playgroud)

这是一个可执行的例子,它在同一个文件中:

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

  • `return s!=""` (2认同)