我想将我的项目分解为子文件夹.
我想要这个代码结构:
??? main.go
??? models
??? user.go
Run Code Online (Sandbox Code Playgroud)
main.go是:
package main
import (
"fmt"
"./models"
)
func main(){
fmt.Println(User{"new_user"})
}
Run Code Online (Sandbox Code Playgroud)
而user.go是:
package models
type User struct {
Login string
}
Run Code Online (Sandbox Code Playgroud)
但是主程序包中没有定义用户,导入引发警告"导入但未使用".
我究竟做错了什么?我的项目很简单(不是这样的例子,只是文件很少(控制器和模型)),我想要一个简单的结构.
也许我是以完全错误的方式做到的?
我试图学习Go但我经常感到沮丧,因为其他语言的一些基本功能似乎在Go中不起作用.所以基本上,我想使用在其他文件中定义的struct类型.我能够使用除struct类型之外的函数.在main.go中,
package main
import (
"list"
)
func main() {
lst := list.NewList(false)
lst.Insert(5)
lst.Insert(7)
lst.InsertAt(2, 1)
lst.PrintList()
}
Run Code Online (Sandbox Code Playgroud)
这完全(和所有其他功能)完全符合我的预期(列表在$ GOPATH中).在包列表中,我将struct定义如下:
type LinkedList struct {
head *node
size int
isFixed bool
}
Run Code Online (Sandbox Code Playgroud)
我想在其他结构中使用这个结构,所以我试图做这样的事情,
type SomeType struct {
lst *LinkedList
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我得到了没有定义LinkedList类型的错误.如何使用其他包中定义的结构?
这是目录树:
+/project
+---/bin
+---/pkg
+---/src
+---/client_test
+---client_test.go
+---main.go
Run Code Online (Sandbox Code Playgroud)
在main.go中:
package main
import ("client_test")
func main() {
client_test.Send()
}
Run Code Online (Sandbox Code Playgroud)
在client_test.go中:
package client_test
func Send() {
}
Run Code Online (Sandbox Code Playgroud)
错误:
src/main.go|8| imported and not used: "client_test"
src/main.go|32| undefined: client_test
Run Code Online (Sandbox Code Playgroud)
我已经阅读了如何在golang中使用自定义包?而且我觉得我和这个家伙有同样的解决方案,但我只是不知道如何解决这个问题.请帮忙.
去环境:
GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOCHAR="6"
GOEXE=""
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/staff/projects/Minigame_Server" (that's exactly my working directory)
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
CGO_ENABLED="1"
Run Code Online (Sandbox Code Playgroud) 我对 Go 还很陌生,但我来自 C++ 学校。我只想制作一个项目并将逻辑分成多个文件。
在 C++ 中,我只需要穿上我的main_file.cpp单
#include "my_own_lib.hpp"
Run Code Online (Sandbox Code Playgroud)
(类似于Node.js 中的module.exports和 then require('relative/path/to/my-own-lib'))
就是这样。在 Go 中我遵循相同的逻辑,但我的结果是:
$ go run main.go
main.go:4:8: open /Users/mt/Documents/Codes/go/src/github.com/mt/Apollo/tst: no such file or directory
Run Code Online (Sandbox Code Playgroud)
我的文件:
主程序
package main
import "fmt"
import "./tst"
func main() {
fmt.Println("just testing")
tst.p()
}
Run Code Online (Sandbox Code Playgroud)
尖沙咀
package tst
import "fmt"
func p() {
fmt.Println("ola")
}
Run Code Online (Sandbox Code Playgroud)
当然我的文件结构是:
myFolder/
|- main.go
|_ tst.go
Run Code Online (Sandbox Code Playgroud)
有人能告诉我这样做的正确方法是什么吗?
我有一个想要分发的 Go 库。它有 62 个源文件,但我想将 API 保存在一个包中。有没有办法可以在单个包中使用多个目录来存储代码?这不是大量的源代码,因为源文件本身很小,如果可能的话,我想保持这种状态以使其可导航。
由于它模仿了其他语言的类似库,因此它目前有两个包:/project 和 /project/models。在了解了有关 Go 打包的更多信息后,我现在意识到这对于分发和使用来说很笨拙。用户更喜欢单个包。
有没有一种“gopheric”的方式来做到这一点?
我想从另一个go程序中执行另一个go程序并给它args,如下所示:
package main
func main() {
//here I want to call a specific go file, e.g. test.go with args
}
Run Code Online (Sandbox Code Playgroud)
test.go
package main
func main(x int) {
//do stuff with x
}
Run Code Online (Sandbox Code Playgroud)
我不想发送一个int作为arg,但像http.ResponseWriter
我想到的解决方案,但它不会很好:
谢谢你的回答:D
我正在尝试编写一个包含多个子项目的 go 项目。举一个简单的例子,该项目如下所示
Main
|- package one
|- package one.one
|- package one.two
|- package two
Run Code Online (Sandbox Code Playgroud)
从我的主包中,我可以通过导入它们来使用任何子包的任何函数或结构。但我的问题是如何从任何子包访问 main 的结构或函数。
我知道以前有人问过这个问题,我已经尝试了所有可能的答案,但仍然没有任何帮助。
但是,再次刷新问题并详细说明我的问题。我实际上是在尝试将一个简单的文件包含到 main.go 文件中。我的文件夹结构和其余信息如下:
\src\
Multi-file\
lib\Car.go
main.go
Run Code Online (Sandbox Code Playgroud)
货物
package main
type Car struct {
numberOfDoors int
cylinders int
}
Run Code Online (Sandbox Code Playgroud)
main.go
package main
import (
"fmt"
)
func main() {
c := Car{4,6}
fmt.Println(c)
}
Run Code Online (Sandbox Code Playgroud)
当我编译 main.go 时,出现以下错误
# command-line-arguments
.\main.go:8: undefined: Car
Run Code Online (Sandbox Code Playgroud)
这是我的go env详细信息:
set GOARCH=amd64
set GOBIN=
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\xampp\htdocs\golang
set GORACE=
set GOROOT=C:\Go
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GO15VENDOREXPERIMENT=
set CC=gcc
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
set CXX=g++
set …Run Code Online (Sandbox Code Playgroud)