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