2013-07-13 44 views
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) 
} 

難道我做錯了什麼?或者這只是一個限制?

回答

2

The Go Programming Language Specification

Types

A型決定了組與特定的值該類型的 值和操作。類型可以由名稱或類型文字(可能爲合格)類型 指定,該類型文字組成以前的 聲明的類型的新類型。布爾,數字和字符串類型的

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。底層的 類型的[]T1T3T4[]T1

Conversions

換算的形式爲T(x)其中T是一種類型和 x是可被轉換爲類型T表達式的表達式。

非恆定值x可以轉換的情況下鍵入Tx的類型和T具有相同的基礎類型。

例如,

package main 

import "fmt" 

type StringSliceWrap []string 

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

輸出:

[a b c]