2017-08-26 136 views
-1
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) 
    } 
} 

上述代碼由於以下條件而失敗。bool和* bool的區別

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

non-bool zones.IsTruncated (type *bool) used as if condition 

的結果我想知道的是爲什麼會有一個普通類型(布爾)和類型(*布爾)之間的差異。我知道一個是指針值,但條件應該仍然有用。

這裏是沒有條件的輸出到位

IsTruncated: true, 
MaxItems: "100", 
NextMarker: "Wouldn'tYouLikeToKnow" 
} 
+2

的指針是不是一個布爾值。 – user2357112

+0

@ user2357112我明白,我不明白的是如果指針指向一個布爾值,如何檢查布爾時尚。如果*布爾指向一個「布爾」是「真」,你將如何檢查在一個條件。 –

+3

取消引用指針。 – user2357112

回答

0

有尾部片斷您需要取消引用一個struct。您需要使用:=運算符來執行此操作。類似於 -

new_struct := *your_pointer 

然後,您會使用new_struct來代替。

2

standard reference

「if」語句根據一個布爾表達式的值指定兩個分支的條件執行。

因此,要回答您的問題,if語句顯式需要布爾表達式。 *bool仍然不是bool。你需要明確地解引用指針(甚至可以是零,在這種情況下你的程序會恐慌)。

這裏是你將如何重新寫你的if語句:

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

但要確保它不是零