cc *_*ung 12 constructor types go
想有一个类型Char是一个string一个字符.我无法做的是创建一个"构造函数".我知道我错过了一些完全明显的东西.
声明Char类型
type Char string
可以在声明中使用该类型
var c1 Char("abc")
var c2 Char = "abc"
这些都是错误的: c1和c2需要是"a",而不是"ABC"
我真正想要的是一个将Char限制为一个字符的"构造函数"
func Char( s string ) Char {
var ch string = s[0]
return ch
}
当然有,type Char而func Char不是这样做的方式
type.go:8: Char redeclared in this block
有没有办法强制type通过构造函数初始化?或者我甚至问正确的问题?
让我的状态是不同的:如果用户说var c Char = "abc",他们将有类型的值无效Char-没有任何办法强迫用户到func NewChar(string) Char作为Char唯一有效的构造?
这是char包.请注意未导出的Char struct字段c.
package char
type Char struct {
c rune
}
func New(c rune) *Char {
return &Char{c}
}
func (c *Char) Char() rune {
return c.c
}
func (c *Char) String() string {
return string(c.c)
}
Run Code Online (Sandbox Code Playgroud)
这是一个如何使用该char包的示例.
package main
import (
"char"
"fmt"
)
func main() {
var c = char.New('z')
var d = c.Char()
hello := "Hello, world; or ????????????"
h := []rune(hello)
? := char.New(h[len(h)-1])
fmt.Println(c, "a-"+c.String(), '0' <= d && d <= '9', ?)
}
Run Code Online (Sandbox Code Playgroud)
输出:
z a-z false ?
Run Code Online (Sandbox Code Playgroud)