Go bool和*bool之间的区别
由于以下情况,上述代码失败Go bool和*bool之间的区别,go,aws-sdk-go,Go,Aws Sdk Go,由于以下情况,上述代码失败 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
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)
}
我想知道的是为什么常规类型(bool)和类型(*bool)之间有区别。我知道其中一个是指针值,但是,条件应该仍然有用
下面是没有适当条件的输出的尾部片段
non-bool zones.IsTruncated (type *bool) used as if condition
您需要取消对结构的引用。您需要使用:=运算符来执行此操作。差不多-
IsTruncated: true,
MaxItems: "100",
NextMarker: "Wouldn'tYouLikeToKnow"
}
然后您将使用新的_结构 来自:
“If”语句根据布尔表达式的值指定两个分支的条件执行
所以,为了回答您的问题,if
语句明确要求布尔表达式<代码>*bool仍然不是bool
。您需要显式地取消对指针的引用(在这种情况下,指针甚至可能为零,您的程序将死机)
以下是您将如何重新编写if语句:
new_struct := *your_pointer
但请确保它不是nil指针不是布尔值。@user2357112我理解,我不理解的是如何以布尔值方式检查指针是否指向布尔值。如果*bool指向一个
bool
即true
您将如何在条件中检查它。取消对指针的引用。user2357112谢谢,这就是解决方案。
if *zones.IsTruncated {
fmt.Printf("%v", zones.NextMarker)
}