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

私は何か間違ったことをしていますか?それとも、これは単に go の制限ですか?

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、およびの基になる型T2ですstring[]T1T3、およびの基になる型T4です[]T1

コンバージョン

変換は、 が型であり、 が型に変換できる式であるという形式の 式T(x)です。TxT

非定数値は、次の場合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]
于 2013-07-13T02:53:06.917 に答える