package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/route53"
)
func main() {
sess := session.Must(session.NewSession())
client := route53.New(sess)
zones, err := client.ListHostedZones(&route53.ListHostedZonesInput{
MaxItems: aws.String("100"),
})
if err != nil {
fmt.Printf("Error occurred")
}
fmt.Printf("%v", zones)
if zones.IsTruncated {
fmt.Printf("%v", zones.NextMarker)
}
}
由于以下条件,上述代码失败。
if zones.IsTruncated {
fmt.Printf("%v", zones.NextMarker)
}
结果为
non-bool zones.IsTruncated (type *bool) used as if condition
我想知道的是为什么常规类型(bool)和类型(* bool)之间存在差异。我知道一个是指针值,但条件应该仍然有用。
这是输出的尾部片段,没有条件
IsTruncated: true,
MaxItems: "100",
NextMarker: "Wouldn'tYouLikeToKnow"
}
答案 0 :(得分:2)
"如果"语句根据布尔表达式的值指定两个分支的条件执行。
因此,要回答您的问题,if
语句明确要求使用布尔表达式。 *bool
仍然不是bool
。你需要明确地取消引用指针(在这种情况下,你的程序可能会出现恐慌)。
以下是重写if语句的方法:
if *zones.IsTruncated {
fmt.Printf("%v", zones.NextMarker)
}
但要确保它不是零
答案 1 :(得分:0)
您需要取消引用结构。您需要使用:=运算符来执行此操作。像 -
这样的东西new_struct := *your_pointer
然后您将使用new_struct。