Jakie jest zero dla stringów?

134
func NewKey(c appengine.Context, kind, stringID string, intID int64, parent *Key) *Key

Dokumentacja mówi:

NewKey tworzy nowy klucz. rodzaj nie może być pusty. Jedna lub obie opcje stringID i intID muszą mieć wartość zero . Jeśli oba mają wartość zero, zwrócony klucz jest niekompletny. rodzic musi być kompletnym kluczem lub zerem.

Jakie jest zero dla stringów?

Próbowałem 0i nilotrzymałem błędy takie jak:

cannot use nil as type string in function argument
DeanSinaean
źródło

Odpowiedzi:

227

To jest "":

var s string
fmt.Println(s=="") // prints "true"

Ciąg nie może być nil (ale *stringmoże).

Możesz po prostu przetestować

if stringId=="" {

Aby przekazać ciąg zerowy stringID, użyj

k := NewKey(c, "kind", "", 0, p)

Ze specyfikacji :

Gdy pamięć jest przydzielana do przechowywania wartości, za pośrednictwem deklaracji lub wywołania make lub new i nie jest dostarczana jawna inicjalizacja, pamięć otrzymuje domyślną inicjalizację. Każdy element takiej wartości jest ustawiany na zero dla swojego typu: false dla wartości logicznych, 0 dla liczb całkowitych, 0,0 dla liczb zmiennoprzecinkowych, "" dla łańcuchów i zero dla wskaźników, funkcji, interfejsów, wycinków, kanałów i map.

Denys Séguret
źródło
Prosty test dla łańcucha o zerowej wartości i * string: var s string; fmt.Println (s == "", * new (* string) == nil)
Tom L
0

w tym przypadku pusty ciąg lub możesz użyć NewIncompleteKey ()

Noypi Gilas
źródło