簡體   English   中英

如何重寫中去的語言從嵌套包變量?

[英]How to override variables from nested packages in go language?

我如何覆蓋 go from package 中的變量?

例如:

文件1.go

package A

import "A/B"

var Arg1 = "Hello"

文件2.go

package A/B

var Arg1 = "World"  

如果 arg1 存在於 file2.go 中,如何覆蓋 file1.go 中的 arg1?

在這種情況下,我不確定您所說的“覆蓋”是什么意思。 (另外讓我假設 file1.go 是“包 a”而 file2.go 是“包 b”)

如果您打算訪問Arg1 ,在包“b”中/從包“a”中定義,則例如:

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

但是,這里沒有發生類似覆蓋的事情。 在包“a”中,a 的Arg1和 b 的Arg1都可以作為不同的實體訪問; 后者通過強制限定符“b”。

你不能。 包是自包含的。 如果包 A 不導出 arg1(小寫),則它對於其他包 B 不可見,因此無法設置。

BTW:“包A / B”小艾我奇怪的。

你試圖做這樣的事情,在這里,例如,一個特定的位置(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

如果沒有,請提供你正在嘗試做一個更好的和具體的例子。

您可能可以使用構建標志來做到這一點:

go build -ldflags="-X 'package_path.variable_name=new_value'"

不過有幾點需要注意:

為了使用 ldflags,您要更改的值必須存在並且是string 類型的包級變量。 此變量可以導出或未導出 該值不能是 const或由函數調用的結果設置其值

您將在 DO 團隊的這篇優秀帖子中找到所需的所有信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM