我正在定义一种类型.我注意到Go有一个叫做的类型uint8和一个叫做函数的函数uint8来创建一个uint8值.
但是当我尝试为自己做这件事时:
12: type myType uint32
14: func myType(buffer []byte) (result myType) { ... }
Run Code Online (Sandbox Code Playgroud)
我收到了错误
./thing.go:14: myType redeclared in this block
previous declaration at ./thing.go:12
Run Code Online (Sandbox Code Playgroud)
如果我将其更改为func newMyType有效,但感觉我是二等公民.我可以使用与类型类型相同的标识编写类型构造函数吗?
uint8()不是函数也不是构造函数,而是类型转换.
对于原始类型(或其他明显的转换,但我不知道确切的定律),您不需要创建构造函数.
你可以这样做:
type myType uint32
v := myType(33)
Run Code Online (Sandbox Code Playgroud)
如果您在创建值时要执行操作,则应使用"make"功能:
package main
import (
"fmt"
"reflect"
)
type myType uint32
func makeMyType(buffer []byte) (result myType) {
result = myType(buffer[0]+buffer[1])
return
}
func main() {
b := []byte{7, 8, 1}
c := makeMyType(b)
fmt.Printf("%+v\n", b)
fmt.Println("type of b :", reflect.TypeOf(b))
fmt.Printf("%+v\n", c)
fmt.Println("type of c :", reflect.TypeOf(c))
}
Run Code Online (Sandbox Code Playgroud)
newMyType只应在返回指针时使用命名函数.