Невозможно импортировать после объявлений - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь импортировать некоторые модули после объявлений в Go.

Например, я пытался импортировать время после объявления переменной, но это не работает, может кто-нибудь сказать, почему это происходит в Go?

Это работает:

package main

import (
       "fmt"
)
import "time";

var test = "testing"

func main() {
    currtime := time.Now()

    fmt.Println(test) 
    fmt.Println(currtime)//Output: 16:44:53

}

Но это не так:

package main

import (
       "fmt"
)

var test = "testing"
import "time"

func main() {
    currtime := time.Now()

    fmt.Println(test) 
    fmt.Println(currtime)//Output: 16:44:53

}

Ошибка «оператор без объявления вне тела функции». Почему это происходит в Go?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

почему это происходит в go lang?

Потому что это запрещено спецификацией языка.Довольно просто, или?

0 голосов
/ 13 ноября 2018

Ошибка «оператор без объявления вне тела функции». Почему это происходит в Go?

Потому что так определено, как работает Go. От спецификации :

Каждый исходный файл состоит из предложения пакета, определяющего пакет, к которому он принадлежит, за которым следует возможно пустой набор объявлений импорта, которые объявляют пакеты, содержимое которых он желает использовать, за которыми следует возможно пустой набор объявлений функций, типов , переменные и константы.

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

В вашем случае у вас есть объявление переменной, поэтому компилятор Go знает, что операторов import больше не будет. Затем он видит ваш ошибочный оператор импорта, видит, что он не объявлен, и правильно генерирует ошибку, которую вы наблюдаете.

0 голосов
/ 13 ноября 2018

У вас обычно есть два способа импортировать пакеты в Go:

import "fmt"
import "time" 

Или

import (
    "fmt"
    "time"
)

Хитрость в том, что у вас не может быть смеси import и чего-то еще, как во втором примере.

package main

import (
       "fmt"
)

var test = "testing" //<-- This does not comply with the definition of a Go file
import "time"

func main() {
    currtime := time.Now()

    fmt.Println(test) 
    fmt.Println(currtime)//Output: 16:44:53

}

Здесь вы можете найти документацию Анатомии .go файла.

Структура каждого файла .go одинакова.

  • Во-первых, это предложение пакета, которому могут предшествовать комментарии, обычно описывающие назначение пакета.

  • Тогда ноль или более объявлений об импорте.

  • 3-й раздел содержит ноль или более объявлений верхнего уровня

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