Получить длину обнуляемой строки - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть следующая структура:

type NetAuth struct {
        Identificator *string `json:"identificator"`
        Password      *string `json:"password"`
        DeviceID      *string `json:"deviceId"`
        Type          int  `json:"type"`
}

Я пытаюсь получить длину Идентификатор с len(event.Identificator), однако я получаю Неверный аргумент для len

Перед тем, как позвонить Лен, я проверяю, равен ли он нулю. Я пришел из Java / C # / PHP фона, и я впервые пишу в GO.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вы используете указатель, поэтому попробуйте это:

println(len(*vlr.Identificator))

Например,

package main

import (
    //"fmt"
    "encoding/json"
    "strings"
    "io"
)

type NetAuth struct {
        Identificator *string `json:"identificator"`
        Password      *string `json:"password"`
        DeviceID      *string `json:"deviceId"`
        Type          int  `json:"type"`
}

func jsondata() io.Reader {
  return strings.NewReader(`{"identificator": "0001", "password": "passkey"}`)
}

func main() {
    dec := json.NewDecoder(jsondata())
    vlr := new(NetAuth)
    dec.Decode(vlr)
    println(*vlr.Identificator)
    println(len(*vlr.Identificator))

}

Детская площадка: https://play.golang.org/p/duf0tEddBsR

Выход:

0001
4
0 голосов
/ 29 апреля 2018

В Go нет простой концепции len(string). Вам нужно либо количество байтов в строковом представлении, либо количество символов (так называемые руны). Для строк ASCII оба значения одинаковы, в то время как для строк в кодировке Юникод они обычно разные.

import "unicode/utf8"

// Firt check that the pointer to your string is not nil
if nil != event.Identificator {
    // For number of runes:
    utf8.RuneCountInString(*event.Identificator)

    // For number of bytes:
    len(*event.Identificator)
}

Для получения дополнительной информации вы можете проверить этот ответ https://stackoverflow.com/a/12668840/1201488.

UPD : event.Identificator - это указатель на строковое значение в структуре NetAuth, а не на строковое значение. Поэтому вам нужно сначала разыменовать его через *event.Identificator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...