2014-09-11 2 views
0

Я написал пример приложения о назначении значения переменной. Посмотрите следующий фрагмент кода:Тип структуры immtable

package main 

import (
    "fmt" 
) 

func main() { 

    cp := 344 
    fmt.Println(cp) 
    cp = 566565 
    fmt.Println(cp) 

    res := []struct { 
     Email  string `json:"n.email"` 
     Activated bool `json:"n.activated"` 
    }{} 

    fmt.Println(res) 

    res = []struct { 
     Email string `json:"n.email"` 
    }{} 

    fmt.Println(res) 
} 

Первая переменная cp, я назначаю значение, после чего повторю это, и оно работает. В конце cp имеет значение 566565. Для меня int mutable.

Второй код не работает, переназначить новую структуру для res, я получил ошибку компилятора.

./double_assignment.go:23: не можешь использовать [] {структуру E-mail строку} буквальных (типа [] STRUCT {} строка E-mail) как тип [] STRUCT {E-mail строку; Активированный bool} при назначении

Является ли структура неизменяемой?

ответ

2

Первый short variable declarationres := сделал установленный тип ([]struct { Email string; Activated bool}).

Если вы хотите присвоить другой тип (здесь отличный struct литерал []struct { Email string }), вам нужна другая переменная.

res2 = []struct { 
     Email string `json:"n.email"` 
}{} 

fmt.Println(res2) 

(как в play.golang.org)

+0

Зачем нужна переменная? –

+2

@zero_coding Поскольку res уже имеет определенный тип: вы не можете назначить ему объект другого типа. – VonC

+1

Я такой глупый. Спасибо. –

2

Нет, ваши типы несовместимы. Тип res является

[]struct { 
    Email  string 
    Activated bool 
} 

но вы пытаетесь дать ему

[]struct { 
    Email string 
    // notice no Activated! 
} 

Тип элемента кусочком является частью типа; вы не можете смешивать и сопоставлять, как это, даже если некоторые поля, по-видимому, являются общими.

Смежные вопросы