Pointers 将别名类型的变量传递到需要指向基础类型的指针的函数中
我的自定义类型别名(带有方法)定义为:Pointers 将别名类型的变量传递到需要指向基础类型的指针的函数中,pointers,go,reference,Pointers,Go,Reference,我的自定义类型别名(带有方法)定义为: type AwsRegion string 然后,我想将此类型的变量传递给另一个旧函数(不在我的控制下),该函数接受指向字符串的指针(指向底层类型的指针): 当然,我不能这样做,错误消息声明: cannot use ®ion (type *AwsRegion) as type *string in argument to f 如何正确地强制转换区域变量?应将区域变量强制转换为字符串类型的指针。 但由于*运算符的优先级,应通过以下方式执行:
type AwsRegion string
然后,我想将此类型的变量传递给另一个旧函数(不在我的控制下),该函数接受指向字符串的指针(指向底层类型的指针):
当然,我不能这样做,错误消息声明:
cannot use ®ion (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)(®ion)) // 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)(®ion), "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)(®ion), "region", "us-west-1", "AWS region to use")
flag.Parse()
}
func f(s *string) {
fmt.Println(*s) // just an example
}