2

我正在尝试按照以下方式做一些事情:

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)
}

难道我做错了什么?或者这仅仅是一个限制?

4

1 回答 1

2

Go 编程语言规范

类型

类型确定特定于该类型值的一组值和操作。类型可以由(可能限定的)类型名称或类型文字指定,它由先前声明的类型组成新类型。

Type      = TypeName | TypeLit | "(" Type ")" .
TypeName  = identifier | QualifiedIdent .
TypeLit   = ArrayType | StructType | PointerType | FunctionType |
            InterfaceType | SliceType | MapType | ChannelType .

布尔、数字和字符串类型的命名实例是预先声明的。复合类型——数组、结构、指针、函数、接口、切片、映射和通道类型——可以使用类型文字来构造。

每种类型T都有一个底层类型:如果T是预先声明的类型或类型字面量,则对应的底层类型就是T它本身。否则,T的基础类型是T在其类型声明中引用的类型的基础类型。

   type T1 string
   type T2 T1
   type T3 []T1
   type T4 T3

stringT1和的基础类型T2string[]T1T3和的基础类型T4[]T1

转换

转换是形式的表达式T(x)where Tis a type 并且 x是可以转换为 type 的表达式T

在 case: 的类型中,非常量值x可以转换为类型,并且具有相同的基础类型。TxT

例如,

package main

import "fmt"

type StringSliceWrap []string

func main() {
    s := []string{"a", "b", "c"}
    ssw := StringSliceWrap(s)
    fmt.Println(ssw)
}

输出:

[a b c]
于 2013-07-13T02:53:06.917 回答