Go:将基元的切片转换为其别名的一部分

时间:2013-07-13 02:11:57

标签: casting go alias

我正试图沿着这些方向做点什么:

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

我做错了吗?或者这只是一个限制吗?

1 个答案:

答案 0 :(得分:2)

  

The Go Programming Language Specification

     

Types

     

类型确定特定于值的值集和操作集   那种类型可以由(可能合格的)类型指定   名称或类型文字,它组成以前的新类型   声明的类型。

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
     

stringT1T2的基础类型为string。潜在的   []T1T3T4的类型为[]T1

     

Conversions

     

转化是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]