golang自定义struct undefined,无法正确导入

jj1*_*111 3 go

我有2个兄弟文件:main和test_two.每个文件分别是main.go和test_two.go文件.在一个我有一个自定义结构,而在另一个我想运行一个函数与该结构作为一个参数.我收到错误"undefined:Struct".

package main

import "github.com/user/test_two"

type Struct struct {
    Fn    string
    Ln    string
    Email string
}

func main() {
    foo := new(Struct)
    foo.Fn = "foo"
    foo.Ln = "bar"
    foo.Email = "foo@bar.com"
    test_two.Fn(foo)
Run Code Online (Sandbox Code Playgroud)

test_two.go:

package test_two

import (
    "fmt"
)

func Fn(arg *Struct) {
    fmt.Println(arg.Fn)
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*ant 10

一些生活规则:

  • 不要在main中定义类型(通常)
  • 不要尝试在其他包中导入main
  • 不要尝试双向导入(导入周期)
  • 始终从较低级别导入较高级别(因此mypkg为main)
  • 所有文件夹都是包,将相关的数据/功能放在其中并命名

你可能想要这样的东西:

app/main.go
app/mypkg/mypkg.go
Run Code Online (Sandbox Code Playgroud)

与main.go的内容:

// Package main is your app entry point in main.go
package main

import (
    "stackoverflow/packages/mypkg"
)

func main() {
    foo := mypkg.Struct{
        Fn:    "foo",
        Ln:    "foo",
        Email: "foo@bar.com",
    }
    mypkg.Fn(foo)
}
Run Code Online (Sandbox Code Playgroud)

mypkg.go的内容:

package mypkg

import (
    "fmt"
)

type Struct struct {
    Fn    string
    Ln    string
    Email string
}

func Fn(s Struct) {
    fmt.Printf("func called with %v\n", s)
}
Run Code Online (Sandbox Code Playgroud)