2017-07-03 37 views
-2

我是Go Lang的新人。前往 - 不能用在type中作業

我很困惑爲什麼這個錯誤信息還在。

不能使用cmd.Args()(類型cli.Args)類型CmdArgs在分配

該錯誤消息解釋cmd.Args() (type cli.Args)不能分配到type CmdArgs這是type CmdArgscli.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'包進行交互操作,通常會使用'cli.Args'。 – JimB

回答

2

錯誤的含義正是它所說的:你試圖將函數的返回值賦給一個與返回值不同的類型的變量,而這個變量是無效的。當你定義一個新類型時,它是一個新類型,不能直接賦值。您可以他們之間投,但在Go沒有隱式轉換 - 投必須明確完成:

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

雖然我想知道爲什麼你要創建一個新的類型CmdArgs到首先,但我認爲有一些原因沒有在代碼示例中指出。但是,您可能更容易嵌入而不是別名。

+0

感謝您的幫助。有用!! –

1

argsCmdArgs類型的變量具有vairable型cli.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) 
} 

,它應該運行。