将类型别名的变量传递给需要指向底层类型的指针的函数

时间:2017-10-18 14:49:52

标签: pointers go reference

我的自定义类型别名( with methods )定义为:

type AwsRegion string

然后我想将此类型的变量传递给另一个遗留(不在我的控制下)函数,该函数接受指向字符串的指针(指向底层类型的指针): / p>

func main() {
    var region AwsRegion = "us-west-2"
    f(&region) // How to properly cast AwsRegion type here?
}

func f(s *string) {
    fmt.Println(*s) // just an example
}

当然我不能那样做,错误信息说明:

cannot use &region (type *AwsRegion) as type *string in argument to f

如何正确投射region变量?

2 个答案:

答案 0 :(得分:1)

region变量应该投放到pointer to string类型。 但是由于*运算符优先级,这应该以这种方式完成:

package main

import (
    "fmt"
)

type AwsRegion string


func main() {
    var region AwsRegion = "us-west-2"
    f((*string)(&region)) // parentheses required!
}

func f(s *string) {
    fmt.Println(*s)
}

链接到playground

答案 1 :(得分:0)

如果您的输入需要AwsRegion作为输入,我不明白为什么需要定义string类型。

使用f(s *AwsRegion)

编辑 - 根据您的意见

package main

import (
    "flag"
    "fmt"
)

type AwsRegion string

var region AwsRegion

func main() {
    flag.StringVar((*string)(&region), "region", "us-west-1", "AWS region to use")
    flag.Parse()
}

func f(s *string) {
    fmt.Println(*s) // just an example
}