我正试图沿着这些方向做点什么:
package main
import (
"fmt"
)
type StringWrap string
func main() {
s := []string{"a","b","c"}
sw := []StringWrap(s) //ERROR: cannot convert s (type []string) to type []StringWrap
fmt.Println(sw)
}
我做错了吗?或者这只是一个限制吗?
答案 0 :(得分:2)
The Go Programming Language Specification
类型确定特定于值的值集和操作集 那种类型可以由(可能合格的)类型指定 名称或类型文字,它组成以前的新类型 声明的类型。
Type = TypeName | TypeLit | "(" Type ")" . TypeName = identifier | QualifiedIdent . TypeLit = ArrayType | StructType | PointerType | FunctionType | InterfaceType | SliceType | MapType | ChannelType .
布尔值,数字和字符串类型的命名实例 预声明。复合类型 - 数组,结构,指针,函数, 接口,切片,映射和通道类型 - 可以使用类型构造 文字。
每种类型
T
都有一个基础类型:如果T
是预先声明的类型或 类型为literal,相应的底层类型为T
本身。 否则,T
的基础类型是类型的基础类型 其T
在其类型声明中引用。type T1 string type T2 T1 type T3 []T1 type T4 T3
string
,T1
和T2
的基础类型为string
。潜在的[]T1
,T3
和T4
的类型为[]T1
。转化是
T(x)
形式的表达式,其中T
是一种类型x
是一个可以转换为T
类型的表达式。在这种情况下,非常量值
x
可以转换为T
类型:x
的类型和T
具有相同的基础类型。
例如,
package main
import "fmt"
type StringSliceWrap []string
func main() {
s := []string{"a", "b", "c"}
ssw := StringSliceWrap(s)
fmt.Println(ssw)
}
输出:
[a b c]