port
変数のタイプは*string
です(これはflag.String()
が返すものです)。 string
の値を取得するには、逆参照する以外の方法はありません:*port
。
あなたはstring
としてそれを渡す必要があり、すべての場所でそれを行うこと、またはあなたの代わりにflag.StringVar()
使用することができます。この場合
var port string
func init() {
flag.StringVar(&port, "port", "", "port")
}
を、あなたのport
変数の型string
でれないので、逆参照します必要です。ここでは、使用するflag
パッケージに*string
の値を明示的に指定します。タイプstring
の変数のアドレスは、もちろんタイプ*string
となります(したがって、flag
パッケージは、指し示された値を変更/設定できるようになります)。 flag.String()
は、string
という値を割り当て、それにポインタを戻す便利な関数です。
別のオプションは、一度それを間接参照することがあり、例えば、タイプstring
の別の変数にstring
値を格納します:
var portp = flag.String("port", "", "port")
var port string
func main() {
flag.Parse()
port = *portp
// Now you can use port which is of type string
}
しかし、私はflag.StringVar()
ソリューションを好みます。
var port int
func init() {
flag.IntVar(&port, "port", 0, "port")
}
'flag'パッケージ関数によって返されるものは、「裏の場面」で修正する必要があるため、ポインタです。あなたはおそらく 'flag.Int'を使うほうが良いでしょう。誰かがあなたのプログラムを" -flag crashy "で呼び出すことができるようになっているので、おそらくパニックが起こります。 – Vatine
さて、 'flag.StringVar'を使用してください。時には、パッケージのドキュメントを読むことが本当に役に立ちます。 – Volker