我无法从Pointer接收器获取价值。它不断返回内存地址。
我正在尝试以以下格式访问来自其他文件的指针接收器的值
package types
import (
// "Some product related imports"
"golang.org/x/oauth2"
"time"
)
type TestContext struct {
userId string
}
func (cont *TestContext) GetUserId() string {
return cont.userId
}
在其他文件中,我像这样使用它
package abc
import (
myType "xyz_path/types"
)
func getAllUsersConn() map[string]interface{} {
// Technique 1
// Below commands working fine and returning memory address
ctx1 := myType.TestContext{}
logging.Debug("Here 3 = ", ctx1.GetUserId())
// above working fine but with address
// Technique 2
// Below return will nill values
ctx := myType.TestContext{}
var101 := (ctx.GetUserId())
logging.Debug(ctx, var101)
// Technique 3
// Below returns with error : invalid indirect of types.TestContext literal (type types.TestContext)
ctx2 := *myType.TestContext{} // Error : invalid indirect of types.TestContext literal (type types.TestContext)
// and if
ctx2 := *myType.TestContext // ERROR : type *types.TestContext is not an expression
logging.Debug("exp id = ", ctx2.GetUserId)
UsersConn := make(map[string]interface{})
// passing some hardcoded values for test, but need to get the user id from above then pass
return UsersConn
}
我正在尝试通过多种方式来解决它,但要么获取内存地址,nil
值要么出错。
答案 0 :(得分:1)
始终编写干净的代码:
let nameStartingWithBArray = name.filter {$0.first != "B"}.map {$0.uppercased()}.sorted()
而非userID
。 userId
而非UserID()
。 使用GetUserId()
代替ctx2 := &myType.myType{}
。
尝试this代码:
ctx2 := *myType.myType{}
输出:
package main
import (
"fmt"
)
type myType struct {
userID string
}
func (cont *myType) UserID() string {
return cont.userID
}
func main() {
ctx1 := myType{"1"}
fmt.Println(ctx1.UserID()) // 1
ctx := myType{"2"}
var101 := ctx.UserID()
fmt.Println(ctx1.UserID(), var101) // 1 2
ctx2 := &myType{}
fmt.Println(ctx2) // &{}
var ctx3 *myType
fmt.Println(ctx3) // <nil>
}
答案 1 :(得分:-1)
对于技术1。我不确定logging.Debug()会做什么,但是我认为您正在尝试将字符串传递给它。在这种情况下,请使用ctx2.GetUserId()
而不是ctx2.GetUserId
。我知道这听起来很愚蠢,但是要调用不带参数的函数,您仍然需要括号。
主要问题是您使用的是myType包,但您认为您使用的是type包。否则我认为技术2可以。
就像沃尔克暗示的那样,您需要使用&
而不是*
来获取对象的地址。