2017-08-26 5 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の相違点

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

の結果に

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

です。私は1つがポインタ値であることを理解していますが、条件はまだ有用であるはずです。ここで

あなたは構造体への間接参照に必要な場所に条件なし

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

ではないことを確認しますが。 – user2357112

+0

@ user2357112私が理解していないことは、ポインタがブール値を指しているかどうかを真偽チェックする方法です。 * boolが '真'である 'bool'を指している場合は、それをどのようにチェックしますか? –

+3

ポインタを参照解除します。 – user2357112

答えて

0

出力の尾抜粋です。これを行うには、=演算子を使用する必要があります。何かのように -

new_struct := *your_pointer 

代わりにnew_structを使用します。 standard referenceから

2

文は、ブール式の値に応じて二つの分岐の条件付き実行を指定し、「場合」。

質問に答えるために、ifステートメントは明示的にブール式を必要とします。 *boolはまだboolではありません。ポインタを明示的に逆参照する必要があります(この場合、プログラムがパニックする場合もありません)。

ここでは、再書き込みする方法をあなたのif文です:

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

が、ポインタがブール値ではありません、それがnil