Невозможно запустить несколько файлов Go - PullRequest
0 голосов
/ 31 мая 2018

У меня есть два файла go в каталоге.

  Go  
   ├── mains.go  
   └── vars.go

Ниже приведены коды для mains.go и vars.go:

mains.go
--------
package main

import "fmt"

func main() {
     fmt.Println("This is the mains file")
}


vars.go
--------
package main

import "fmt"

func main() {
     fmt.Println("This is the vars file")
}

При отдельном запуске файла с помощью команды терминала

go run mains.go
go run vars.go

Я получаю вывод.Когда я использую VScode , я получаю следующую ошибку

main, повторно объявленную в этом блоке
предыдущее объявление на ./mains.go:5:6

Из-за этой ошибки я не могу запустить код.Код работает нормально, когда каждый файл разделен на папки.Я пытался удалить главное объявление из файла перед сохранением, но функция автозаполнения / автоформат заполняет основной пакет & import "fmt" команды автоматически.Мои сомнения:

  • Это проблема с редактором?(Поскольку команды терминала работают нормально)

  • Любая другая рекомендуемая IDE для go?

Мои спецификации

Ubuntu: 16.04
Код Visual Studio: 1.23.1
go версия: 1.9.2

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Нет смысла переопределять основную функцию дважды в одном пакете.Вы упомянули, что код работает нормально, помещая файлы mains.go и vars.go в отдельные папки.Это ожидается, и это то, что нужно сделать - размещение файлов в разных папках .

Если, однако, вам нужно запустить обе функции, измените настройки, используя простую процедуру, как определенониже:

// main.go
package main

import (
          "fmt"
          "sync"
)

var wg sync.WaitGroup

func main() {
     fmt.Println("This is the mains file")

     wg.Add(1)
     go vars()

     // do other stuff...
     wg.Wait()
}

// vars.go
package main

import "fmt"

func vars() {
     fmt.Println("This is the vars file")
     // do other stuff...

     wg.Done()
}

Это позволит вам запускать обе функции одновременно, находясь в одном пакете.Поскольку функции не могут иметь одно и то же имя функции: main(), вам нужно заменить одно из них на другое, как я сделал.

Обратите внимание, что вы можете просто вызвать функцию vars()без этого одновременно.

0 голосов
/ 31 мая 2018

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

Также Golang рекомендует иметь один пакет на каталог.Вы можете иметь несколько файлов в одном пакете.

Например:

- Root directory of program
   -- main.go - package main (define main func here) 
   -- vars.go - package main (You can not redefine main func or package in this file, since everything under directory falls in to same package in golang)

   - lib directory
   -- lib.go - package lib
   -- something.go - package lib  

Надеюсь, это поможет!

...