Почему Go возвращает значение 0 в неназначенную целочисленную переменную? - PullRequest
1 голос
/ 01 ноября 2019

Меня попросили объявить переменную целочисленного типа как:

var someInteger int8

Позже, когда я напечатал эту переменную, она печатает значение 0.

My GoПрограмма выглядит следующим образом:

package main

import "fmt"

func main() {
  var someInteger int
  fmt.Println(someInteger)      // Prints 0 in terminal
}

У меня такой вопрос, поскольку я не назначил никакого значения, поэтому он должен вернуть некоторое Значение мусора , например C вести себя как статические переменные, которые автоматически инициализируются значением 0 .

Ответы [ 2 ]

10 голосов
/ 01 ноября 2019

В Go вы не можете получить доступ к неинициализированным переменным / памяти. Если вы не инициализируете переменную явно, она будет неявно инициализирована нулевым значением ее типа.

Это рассматривается в Спецификация: Объявления переменных:

Если задан список выражений, переменные инициализируются с помощью выражений, следующих правилам для Назначение . В противном случае каждая переменная инициализируется своим нулевым значением .

Также упоминается в Spec: Переменные:

Если aпеременной еще не присвоено значение, ее типом является нулевое значение для ее типа.

А также рассматривается в Go Tour: нулевые значения который я настоятельно рекомендую взять, если вы изучаете язык.

Переменным, объявленным без явного начального значения, присваивается нулевое значение.

3 голосов
/ 01 ноября 2019

Go облегчает эту задачу, добавляя разумные значения по умолчанию в зависимости от типа переменных. Например:

var someInteger int8         // will print 0 as default
var someFloat float32        // will print 0 as default
var someString string        // will print nothing as it prints empty string
var someBoolean bool         // will print false as default

Как упомянул @icza в своем ответе, вы можете узнать больше об этом здесь

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