所以我一直在这个现在抓我的头几个星期,阅读关于如何几个源后$ go build作品和它的三个法宝目录/bin,/pkg,/src,它仍然不是很清楚,我如何使用自定义包和如何构建Golang项目应该管理一个 git repo。
让我更详细地说明一下我的情况:
我正在项目目录中的 Go 项目与默认.../user/go/.... 对于我的所有项目,我有一个不同的目录树,其结构如下:
projects
| project-a
| project-b
| docs
| media
| scrum
| project-b <-- git repo containg Go structure
| .git
| gitignore.txt
| bin
| pkg
| src
| custom-package-a
| | foo.go
| custom-package-b
| | bar.go
| | main.go
| project-c
Run Code Online (Sandbox Code Playgroud)
我的projects目录可以包含任何类型的项目:java、Unity3D、VisualC# 等……然后在每个项目下,它都包含一个带有源代码的存储库。
我最近能够通过添加projects/project-b/project-b到我的 GOPATH来成功构建,因此它可以看到 src 目录。
即使构建正确,典型 Go 项目的文件结构也应该是这样吗?
在我的 GOPATH 中,我删除了原始路径 …
UnityPlayer我在将依赖项添加到 Unity 的 Android 库插件中时遇到问题。
我只是想不出向我的插件添加依赖项的正确方法。
在我尝试将一个classes.jar文件添加到libs包含所有 UnityPlayer 代码的目录之前,这让我可以编写代码而不会出现智能感知错误,但是当我构建并运行时,我得到了如此大量的输出。
CommandInvokationFailure: Gradle build failed.
C:\Program Files\Unity\Hub\Editor\2018.4.14f1\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\OpenJDK\Windows\bin\java.exe -classpath "C:\Program Files\Unity\Hub\Editor\2018.4.14f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-5.1.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"
stderr[
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':checkReleaseDuplicateClasses'.
> 1 exception was raised by workers:
java.lang.RuntimeException: Duplicate class bitter.jnibridge.JNIBridge found in modules classes-2.jar (:coffeeplugin-release:) and unity-classes.jar (unity-classes.jar)
Duplicate class bitter.jnibridge.JNIBridge$a found in modules classes-2.jar (:coffeeplugin-release:) and unity-classes.jar (unity-classes.jar)
Duplicate class com.unity3d.player.NativeLoader found in modules classes-2.jar (:coffeeplugin-release:) …Run Code Online (Sandbox Code Playgroud) 我看到了Mat Ryer撰写的一篇文章,内容涉及如何使用服务器类型和HTTP处理程序类型的包装程序,func(http.ResponseWriter, *http.Request)
我认为这是一种构建REST API的更优雅的方式,但是我完全迷住了使包装器正常运行的想法。我要么在编译时收到类型不匹配的错误,要么在调用时收到404的错误。
这基本上是我目前用于学习的目的。
package main
import(
"log"
"io/ioutil"
"encoding/json"
"os"
"net/http"
"github.com/gorilla/mux"
)
type Config struct {
DebugLevel int `json:"debuglevel"`
ServerPort string `json:"serverport"`
}
func NewConfig() Config {
var didJsonLoad bool = true
jsonFile, err := os.Open("config.json")
if(err != nil){
log.Println(err)
panic(err)
recover()
didJsonLoad = false
}
defer jsonFile.Close()
jsonBytes, _ := ioutil.ReadAll(jsonFile)
config := Config{}
if(didJsonLoad){
err = json.Unmarshal(jsonBytes, &config)
if(err != nil){
log.Println(err)
panic(err)
recover()
}
}
return config
} …Run Code Online (Sandbox Code Playgroud) 所以,我已经解决了我遇到的问题。这与我是否在 C# 客户端的 StreamWriter 上使用编码有关,但我想知道无论如何如何处理这些额外的 3 个字节。
这是一个用 C# 编写的客户端和一个用 Go 编写的服务器。为什么是 C#?稍后它将有用于云计算的 Unity 应用程序。为什么去?我只是想使用它。另外我的服务器是 Linux 并且 Go 很容易 x-compile。
问题是从我的 C# 客户端发送的数据在前面附加了 3 个额外的字节,这与 Go 的Json.Unmarshal函数在这些数据到达服务器后直接提供它相冲突。
这是离开 C# 客户端的 JSON 格式字符串
{"channel":0, "data": {"name":"Hasty Wombat","uuid":"e91ccc23-7e80-4189-958e-9b778dce1146","type":"Drone"}}\n
这是通过在 C# 客户端中配置为 UTF8 的流编写器之前的字节数组。
_sWriter = new StreamWriter(_tStream, System.Text.Encoding.UTF8, 8192);
长度:108
123 34 99 104 97 110 110 101 108 34 58 48 44 32 34 100 97 116 97 34 58 32 123 34 110 97 …Run Code Online (Sandbox Code Playgroud)