bool和* bool之间的区别

时间:2017-08-26 21:32:26

标签: 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 := 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"
}

2 个答案:

答案 0 :(得分:2)

来自standard reference

  

"如果"语句根据布尔表达式的值指定两个分支的条件执行。

因此,要回答您的问题,if语句明确要求使用布尔表达式。 *bool仍然不是bool。你需要明确地取消引用指针(在这种情况下,你的程序可能会出现恐慌)。

以下是重写if语句的方法:

if *zones.IsTruncated {
    fmt.Printf("%v", zones.NextMarker)
}

但要确保它不是零

答案 1 :(得分:0)

您需要取消引用结构。您需要使用:=运算符来执行此操作。像 -

这样的东西
new_struct := *your_pointer

然后您将使用new_struct。