Pointers 将别名类型的变量传递到需要指向基础类型的指针的函数中

Pointers 将别名类型的变量传递到需要指向基础类型的指针的函数中,pointers,go,reference,Pointers,Go,Reference,我的自定义类型别名(带有方法)定义为: type AwsRegion string 然后,我想将此类型的变量传递给另一个旧函数(不在我的控制下),该函数接受指向字符串的指针(指向底层类型的指针): 当然,我不能这样做,错误消息声明: cannot use &region (type *AwsRegion) as type *string in argument to f 如何正确地强制转换区域变量?应将区域变量强制转换为字符串类型的指针。 但由于*运算符的优先级,应通过以下方式执行:

我的自定义类型别名(带有方法)定义为:

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

当然,我不能这样做,错误消息声明:

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

如何正确地强制转换
区域
变量?

应将
区域
变量强制转换为字符串类型的
指针。
但由于
*
运算符的优先级,应通过以下方式执行:

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)
}

链接到

如果您的输入采用了
字符串
作为输入,我不理解为什么您需要定义
AWS区域
类型

使用
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
}
f()
函数超出了我的控制范围。它基本上是
flag.StringVar(p*string,…)
函数的简化签名。所以,需要满足合同。我有一个类型为
AwsRegion
(附带我的方法)的变量,我想把它传递到
flag.StringVar()
函数中。实际上,我通过为我的
AwsRegion
实现
flag.Value
接口中的所有方法解决了这个问题,但这是另一回事。
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
}