1

go from package で変数をオーバーライドするにはどうすればよいですか?

例えば:

file1.go

package A

import "A/B"

var Arg1 = "Hello"

file2.go

package A/B

var Arg1 = "World"  

arg1 が file2.go に存在する場合、file1.go の arg1 をオーバーライドするにはどうすればよいですか?

4

4 に答える 4

3

この場合の「オーバーライド」の意味がわかりません。(また、file1.go が「パッケージ a」であり、file2.go が「パッケージ b」であると仮定します)

Arg1パッケージ "a" 内/内からパッケージ "b" で定義されたにアクセスする場合は、次のようになります。

// In package "a"
x = Arg1    // references a.Arg1
y = b.Arg1  // references b.Arg1

ただし、オーバーライドに似た処理はここでは行われません。パッケージ "a" では、Arg1a と b の両方Arg1が異なるエンティティとしてアクセス可能です。後者は必須の修飾子 'b' を使用します。

于 2013-04-17T07:37:39.317 に答える
1

できません。パッケージは自己完結型です。パッケージ A が arg1 (小文字) をエクスポートしない場合、他のパッケージ B では表示されないため、設定できません。

ところで:「パッケージA / B」は私にはかなり奇妙に見えます。

于 2013-04-17T07:13:02.957 に答える
1

たとえば、特定の場所 (USA) が存在する場合、一般的な場所 (世界) を上書きするようなことをしようとしていますか?

// file A/B.go

package B

var location = "USA"

func Location() string {
    return location
}

// file A.go

package A

import "A/B"

var location = "World"

func Location() string {
    loc := B.Location()
    if len(loc) == 0 {
        loc = location
    }
    return loc
}

// file main.go

package main

import (
    "A"
    "fmt"
)

func main() {
    fmt.Println("Hello,", A.Location())
}

出力:

Hello, USA

そうでない場合は、あなたがやろうとしていることのより良い具体的な例を提供してください.

于 2013-04-17T11:53:45.373 に答える