在Go中,如何为具有字符串基类型的类型创建"构造函数"?

cc *_*ung 12 constructor types go

想有一个类型Char是一个string一个字符.我无法做的是创建一个"构造函数".我知道我错过了一些完全明显的东西.

声明Char类型

  type Char string

可以在声明中使用该类型

  var c1 Char("abc")
  var c2 Char = "abc"

这些都是错误的: c1c2需要是"a",而不是"ABC"

我真正想要的是一个将Char限制为一个字符的"构造函数"

 func Char( s string ) Char {
   var ch string = s[0]
   return ch
 }

当然有,type Charfunc Char不是这样做的方式

 type.go:8: Char redeclared in this block

有没有办法强制type通过构造函数初始化?或者我甚至问正确的问题?

让我的状态是不同的:如果用户说var c Char = "abc",他们将有类型的值无效Char-没有任何办法强迫用户到func NewChar(string) Char作为Char唯一有效的构造?

pet*_*rSO 8

这是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)