Home > database >  Set int64 value to *int64 pointer
Set int64 value to *int64 pointer

Time:01-12

I need map the struct to create a JSON structure. The collector_id attribute in JSON should be able to take null value or int value. I hace the follow code:

type purchaseInfo struct {
    CollectorID *int64 `json:"collector_id"`
}

func mapPurchaseInfo(collectorID int64) purchaseInfo {
    var collectorIDToSend *int64
    if collectorID < 0 {
        collectorIDToSend = nil
    } else {
        collectorIDToSend = collectorID
    }

    return purchaseInfo{
        CollectorID: collectorIDToSend,
    }
}

This code doesn't compile, the collectorID can't be assigned to collectorIDToSend. Is there a way to be able to do this?

Thanks!

CodePudding user response:

  • In the declaration of the mapPurchaseInfo function, to correctly assign the value passed in parameter to collectorIDToSend, the & operator must be used to retrieve the memory address of collectorID.
  • When constructing the purchaseInfo return variable, it is possible to put the fields of the structure directly as in the example.
type purchaseInfo struct {
        CollectorID *int64 `json:"collector_id"`
    }

    func mapPurchaseInfo(collectorID int64) purchaseInfo {
        var collectorIDToSend *int64
        if collectorID < 0 {
            collectorIDToSend = nil
        } else {
            collectorIDToSend = &collectorID
        }

        return purchaseInfo{
            CollectorID: collectorIDToSend,
        }
    }

CodePudding user response:

type purchaseInfo struct {
    CollectorID *int64 `json:"collector_id"`
}

func mapPurchaseInfo(collectorID *int64) purchaseInfo {
    if *collectorID < 0 {
        return purchaseInfo{CollectorID: nil}
    }
    return purchaseInfo{
        CollectorID: collectorID,
    }
}

  • Related