Как поделиться переменными через пакеты - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь выяснить, как я могу вернуть значение из функции в файле package name другому package. например, давайте предположим, что у вас есть

package main

func main(){
   x := 5
   a := res.Test(x)
}
package res

func Test(x int) (y int){
    y := x*2
    return y
}

Если я скомпилирую его, я получу ошибку: res.Test used as value. Где я делаю не так, как я могу вернуть y в основной / и другой пакет? ТНХ

1 Ответ

1 голос
/ 05 марта 2020

В большинстве своем c пакеты Go должны находиться в своем собственном файловом каталоге. res входит в ~/go/src/res/.

// ~/go/src/res/res.go
package res

func Test(x int) (y int){
    // Note that y is already declared.
    y = x*2
    return y
}

Тогда ваш main.go может импортировать этот пакет.

package main

import(
    "res"
    "fmt"
);

func main(){
   x := 5
   a := res.Test(x)
   fmt.Println(a)
}

См. Также


Вот еще немного отладки для вашей спецификации c ошибка.

Обратите внимание, что отправленный вами код res не должен компилироваться. Вы должны получить сообщение об ошибке типа ./res.go:4:7: no new variables on left side of :=.

res.Test used as value означает, что res.Test не возвращает значение, но вы все равно пытались использовать его как единое. Ваш res.Test имеет возвращаемое значение.

Кроме того, ваш основной. go не импортирует res. Вы должны были получить ошибку вроде undefined: res, но вы этого не сделали.

Это означает, что есть еще один пакет res, который где-то плавает с Test функция без возвращаемого значения.

...