英文:
How to use variable package selector in go
问题
我正在为你翻译以下内容:
我正在跟随 Go 之旅,并且仍在努力学习该语言的基础知识。对于导入的包 time
,是否有一种方法可以通过变量访问其导出内容?例如,使用 time[day]
而不是 time.Saturday
。
以下是一个更完整的示例:
package main
import (
"fmt"
"time"
)
func main() {
day := "Thursday"
fmt.Printf("When's %v?", day)
today := time.Now().Weekday()
switch time[day] { // 这是我在 JavaScript 中的做法
case today + 0:
fmt.Println("Today.")
default:
fmt.Println("Too far away.")
}
}
另外,我想知道我想要做的这个操作的正确术语是什么?我在使用谷歌搜索时没有找到太多有用的结果。
英文:
I'm following the Go tour, and still trying to learn the basics of the language. For the imported package time
, is there a way to access its exports with a variable? E.g. time[day]
instead of time.Saturday
Here's a more complete example
package main
import (
"fmt"
"time"
)
func main() {
day := "Thursday"
fmt.Printf("When's %v?", day)
today := time.Now().Weekday()
switch time[day] { // This is how I would do it in javascript
case today + 0:
fmt.Println("Today.")
default:
fmt.Println("Too far away.")
}
}
Also, what is the correct terminology for what I want to do? I'm having very little luck using Google
答案1
得分: 2
不,没有办法在不显式引用的情况下从存储在堆栈上的包中引用导出变量。你可以通过在运行时定义的数据结构中显式引用它们来实现。
例如,你可以这样做:
var days = map[string]time.Weekday{
"Monday": time.Monday,
"Tuesday": time.Tuesday,
"Wednesday": time.Wednesday,
"Thursday": time.Thursday,
"Friday": time.Friday,
"Saturday": time.Saturday,
"Sunday": time.Sunday,
}
fmt.Println(days["Thursday"])
参考 http://play.golang.org/p/6EYqcklf8X
英文:
No, there's no way to reference exported variables from a package, which are stored on the stack, without explicitly referencing them using a data structure that you define that's built at runtime.
For example, you could do:
var days = map[string]time.Weekday{
"Monday": time.Monday,
"Tuesday": time.Tuesday,
"Wednesday": time.Wednesday,
"Thursday": time.Thursday,
"Friday": time.Friday,
"Saturday": time.Saturday,
"Sunday": time.Sunday,
}
fmt.Println(days["Thursday"])
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论