gpt4 book ai didi

go - 如何在 Go 中将包分配给变量?

转载 作者:IT王子 更新时间:2023-10-29 02:03:23 26 4
gpt4 key购买 nike

首先,问题中的“变量”一词可能有误,但我认为详细的问题解释了我使用“变量”一词的原因。

我有两个名称不同但功能完全相同的包。

根据用户的输入我想使用一个包的功能。但是我不想切换包,而是想将包分配给具有通用名称的新函数,该怎么做?如果不可能,为什么?

// foo/bar.go

package foo

func Test() {
fmt.Println("hola from bar")
}

// baz/bar.go

package baz

func Test() {
fmt.Println("hola from baz")
}

// main.go

package main

import (
"foo"
"baz"
)

func main() {

thePackage := flag.String("package", "foo", "a package")

if thePackage == "foo" {
howToSetThis := foo // How to do this?
} else {
howToSetThis := baz // How to do this?
}

howToSetThis.Test() // execs Println from one of the two bar.go files

}

在 JavaScript 中我会做类似(简化)的事情:

function foo(){
console.log("hola from foo")
}

function baz(){
console.log("hola from baz")
}

if(somethingInput == "foo"){
var howToSetThis = foo;
} else {
var howToSetThis = baz;
}

howToSetThis();

最佳答案

您可以在一个包中定义一个接口(interface),该接口(interface)需要您希望在这两个包中拥有的功能。

package intfc

type Intfc interface {
Test()
}

然后是实现该接口(interface)的不同包中的两个结构

package foo

import "fmt"

type Foo struct {

}

func (f Foo) Test() {
fmt.Println("hola from foo")
}

package baz

import "fmt"

type Baz struct {

}

func (f Baz) Test() {
fmt.Println("hola from baz")
}

然后在 main 中做这样的事情:

package main

import (
"foo"
"baz"
"intfc"
"flag"
)

func main() {

var howToSetThis intfc.Intfc

thePackage := flag.String("package", "foo", "a package")

if *thePackage == "foo" {
howToSetThis = foo.Foo{}
} else {
howToSetThis = baz.Baz{}
}

howToSetThis.Test() // execs Println from one of the two bar.go files

}

关于go - 如何在 Go 中将包分配给变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43153133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com