Две формы объявления структуры в Go - PullRequest
3 голосов
/ 27 сентября 2010

У меня есть две формы объявления структуры в области действия функции.Насколько я мог видеть, приведенный ниже фрагмент кода работает просто отлично.Вопрос в том, в чем разница между двумя способами декларации?Это только семантический вопрос или что-то хитрое под одеялом?

package main

import "fmt"

func main() {
    type Person1 struct {
        Name string
        Id int
    }
    person1 := &Person1{Name : "John Smith", Id : 10}
    fmt.Printf("(%s, %d)\n", person1.Name, person1.Id)
    var person2 struct {
        name string
        id int
    }
    person2.name = "Kenneth Box"
    person2.id = 20
    fmt.Printf("(%s, %d)\n", person2.name, person2.id)
}

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

Один является именованным типом - вы можете создать несколько переменных этого типа, если вам нужно, используя имя типа.

Другой тип не имеет имени.Вы не можете создавать больше переменных типа, кроме как с помощью оператора :=.

2 голосов
/ 27 сентября 2010

person1 - это указатель на структуру, а person2 - это само значение структуры.Если бы вы сделали person1 := Person1{Name : "John Smith", Id : 10}, то это было бы то же самое

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