猿问

Golang PutItem DynamoDB:运行时错误无效的内存地址或零指针取消引用

刚开始使用 golang 和 AWS 进行编程。我的函数中的代码块,尝试使用 AWS DynamoDB 创建一个新表并向其写入值。创建成功,但是当Write发生时程序崩溃。不知道为什么..如果有人能帮助我,我将不胜感激!


**Logs**:


2015/07/22 15:46:46 TableStatus: 0xc208193cb0

2015/07/22 15:46:46 End

2015/07/22 15:46:48 Sleep 2: Before Write

2015/07/22 15:46:48 Before Defining Input

panic: runtime error: invalid memory address or nil pointer dereference

[signal 0xb code=0x1 addr=0x20 pc=0x401b28]


**Code Block:**

 {

    log.Println("Entry+++")

        cfg := aws.DefaultConfig


        svc := dynamodb.New(cfg)


        tableDefinition := &dynamodb.CreateTableInput{

            TableName:            aws.String("table1"),

            AttributeDefinitions: make([]*dynamodb.AttributeDefinition, 1, 1),

            KeySchema:            make([]*dynamodb.KeySchemaElement, 1, 1),

            ProvisionedThroughput: &dynamodb.ProvisionedThroughput{

                ReadCapacityUnits:  aws.Long(1),

                WriteCapacityUnits: aws.Long(1),

            },

        }


        tableDefinition.KeySchema[0] = &dynamodb.KeySchemaElement{

            AttributeName: aws.String("batch_id"),

            KeyType:       aws.String("HASH"),

        }

        tableDefinition.AttributeDefinitions[0] = &dynamodb.AttributeDefinition{

            AttributeName: aws.String("batch_id"),

            AttributeType: aws.String("S"),

        }


        resp, err := svc.CreateTable(tableDefinition)

        log.Println("After CreateTable---")


        if err != nil {

            log.Println("create table failed", err.Error())

            return

        }

        if resp != nil && resp.TableDescription != nil {

            log.Println(

                "TableStatus:", resp.TableDescription.TableStatus)

        }


        log.Println("End")

        //Some time before the createTable transaction gets committed. 

        time.Sleep(2 * time.Second)

        log.Println("Sleep 2 Before Write")


        testA := "batch_1" //value to be written to the db

        // testB := "batch_name"

        // testC := "530"

        // testD := "Sample-Keyy-98"


    }



交互式爱情
浏览 167回答 2
2回答

偶然的你

如果您可以显示错误的堆栈跟踪,那将非常有帮助。但在那之前我可以说当您尝试访问任何未初始化变量的成员时通常会发生此错误。例如,如果此错误出现在以下行a := b.c那么你需要检查 b 是否正确初始化。b 的值很可能是 nil,因此 nil 指针取消引用。
随时随地看视频慕课网APP

相关分类

Go
我要回答