我打算为字符串类型创建一些方法扩展.
我需要将所有扩展方法写入一个单独的包中.
这是我的层次结构.
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上的其他问题中找到了一些答案,但他们并没有完全谈论字符串类型并将方法放在不同的包文件中.
在您的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
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |