Синтаксис инициализации переменной Go - PullRequest
0 голосов
/ 31 января 2019

Я заметил два стиля инициализации переменной типа структуры в примерах кода Go, но не понимаю, когда их использовать.

Стиль 1:

package main

import (
    "fmt"
)

type Msg struct {
  value string
}

func NewMsg(value string) (Msg) {
  return Msg{value}
}

func main() {
  fmt.Println("Hello, playground")

  var helloMsg Msg
  helloMsg = NewMsg("oi")

  fmt.Println("Hello, ", helloMsg.value)
}

Стиль 2:

package main

import (
    "fmt"
)

type Msg struct {
  value string
}

func NewMsg(value string) (Msg) {
  return Msg{value}
}

func main() {
  fmt.Println("Hello, playground")

  var helloMsg Msg
  {
     helloMsg = NewMsg("oi")
  }

  fmt.Println("Hello, ", helloMsg.value)
}

Первый стиль - это простая инициализация переменной, а второй более неясен для меня.Что делают фигурные скобки?Почему я должен использовать вторую форму?

РЕДАКТИРОВАТЬ:

Для большего контекста по вопросу, она взята из этого примера кода библиотеки Go Kit: https://github.com/go-kit/kit/blob/master/examples/profilesvc/cmd/profilesvc/main.go

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Я не вижу разницы между этими двумя стилями.Они абсолютно одинаковы.

{} это определяет коды области действия, и некоторые переменные, объявленные внутри него, могут использоваться только внутри этой области.Но если вы объявляете helloMsg снаружи и делаете = внутри блока {}.'helloMsg' не ограничен.

Итак, эти два отформатированных стиля абсолютно одинаковы.

0 голосов
/ 31 января 2019

Что делают фигурные скобки?

Они обозначают кодовый блок.Вы используете блоки кода, когда хотите ограничить область действия идентификатора (этим блоком).Здесь это действительно не имеет смысла, потому что у вас есть только один идентификатор, и он из внешней области видимости.

Некоторое чтение:

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