2017-07-03 3 views
-2

私はGo Langを新しくしました。Go - 譲渡でタイプとして使用できません。

なぜこのエラーメッセージが表示されるのか混乱しました。

エラーメッセージがcmd.Args() (type cli.Args)type CmdArgsあるtype CmdArgsしない割り当てがcli.Argsであることができることを説明割当タイプのCMDARGSとしてcmd.Args()(タイプcli.Args)を使用することができません。

私はCannot use as type in assignment in goを読んでいますが、私の間違いがどこにあるのか分かりません。それは私とは別の問題だと思う。

解決方法はありますか?

ここに私のコードです。

package main 

import (
    "fmt" 
    "os" 

    "github.com/urfave/cli" 
) 

// CmdArgs is command arguments 
type CmdArgs cli.Args 

func main() { 
    program := cli.NewApp() 
    program.Action = func(cmd *cli.Context) error { 
     var args CmdArgs 
     args = cmd.Args() 
       ▼▼▼▼▼▼▼▼▼ 
       cannot use cmd.Args() (type cli.Args) as type CmdArgs in assignment 

     return nil 
    } 

    program.Run(os.Args) 
} 

ご協力いただきありがとうございます。

+3

あなたの宣言である 'CmdArgs'は新しいタイプを作成します。なぜあなたは新しいタイプを作成していますか? – JimB

+0

私はあなたがこのような呼びかけをしたのか分かりません。 'func(ca CmdArgs)Len()int { \t return len(ca) }' 私はそれを使用する予定です。 –

+2

これを使用する計画は何ですか?新しい型を宣言する唯一の理由は、元の型からメソッドセットを置き換えることですが、これを行う理由はほとんどありません。同じ種類の基本型で変換できる型を作ることができます。これはあまり混乱しませんが、通常は 'cli.Args'を使用します。これは、その特定の' cli'パッケージと相互運用する場合です。 – JimB

答えて

2

エラーとは、関数の戻り値を、戻り値と異なる型の変数に割り当てることを意味します。これは無効です。新しい型を定義すると、それは新しい型であり、直接代入可能ではありません。あなたはは、それらの間をキャストすることができますが、はゴーには暗黙のキャストはありません - キャスト明示的に実行する必要があります。

var args CmdArgs 
    normalArgs := cmd.Args() 
    args = CmdArgs(normalArgs) 

私はあなたに新しいタイプCmdArgsを作成している理由を疑問に持っていますがまず始めに、コード例に示されていない何らかの理由があると仮定します。しかし、エイリアシングではなく、埋め込みが簡単になるかもしれません。

+0

ご協力ありがとうございます。できます!! –

1

args

package main 

import (
    "fmt" 
    "os" 

    "github.com/urfave/cli" 
) 

func main() { 
    program := cli.NewApp() 
    program.Action = func(cmd *cli.Context) error { 
     args := cmd.Args() 
     return nil 
    } 

    program.Run(os.Args) 
} 

にあなたの関数を変更し

タイプcli.Args

のvairableを持っているタイプ CmdArgsの変数であり、それは実行する必要があります。

関連する問題