我想使用IntelliJ IDE Community Edition在GO(GoLang)中编写代码.我安装了正确的插件,并且需要工具来构建应用程序.我的应用程序包含两个下面的文件.每个都在direcytory ../EventServer.
如果我想使用函数Run(Ctlr + Shift + F10)从IntelliJ运行项目,我得到以下错误
/usr/lib/go/bin/go build -o "/tmp/Build Main.go and run0go" -gcflags "-N -l" /my/home/blah/EventServer/Main.go
# command-line-arguments
./Main.go:11: undefined: Data
Run Code Online (Sandbox Code Playgroud)
我可以没有任何问题从终端编译代码与项目和执行命令进入direcytory
:~/Pulpit/EventServer$ go build
./EventServer
Hello
dane w strukturze someone
Run Code Online (Sandbox Code Playgroud)
树direcytory和文件看起来像
EventServer$ tree -a
.
??? Data.go
??? EventServer
??? EventServer.iml
??? .idea
? ??? compiler.xml
? ??? copyright
? ? ??? profiles_settings.xml
? ??? libraries
? ? ??? GOPATH__EventServer_.xml
? ??? misc.xml
? ??? modules.xml
? …
Run Code Online (Sandbox Code Playgroud) 我有Linux系统,我编写程序使用Clion IDE,使用CMake.我有一个部分我的程序,我想调试子进程 我从这个论坛阅读了一些主题,但我仍然不知道如何或在哪里,我可以打开这个功能:
fork之后的gdb调试子进程(跟随fork-mode子配置)
我只是尝试设置标志CMAKE_CXX_FLAGS_DEBUG
,set follow-fork-mode child
但CMake给我错误.下面的屏幕截图包含用于编译和dbug我的程序的所有标志.那么我必须设置这个功能的地方和地点.
..::编辑::..
我相信这是好方法.我认为你的提示很有用,但我有下一个问题.使用您的说明后,我的代码就会崩溃
pid_t newProcessForClient = fork();
Run Code Online (Sandbox Code Playgroud)
声明是:
(gdb)设置follow-fork-mode子句[新进程31667]警告:文件"/lib32/libthread_db-1.0.so"自动加载已被``auto-load safe-path'设置为"$ debugdir: $ DATADIR /自动加载".警告:无法找到libthread_db匹配劣质的线程库,线程调试将无法使用.[切换到过程31667]继续信号SIGABRT.
程序终止,信号SIGABRT,Aborted.该计划已不复存在.
我想知道什么是在go中处理多级抽象错误的最佳方法.每次如果我必须在程序中添加新的级别抽象,我就不得不将错误代码从级别转移到级别高.因此是日志文件中的重复社区或我必须重新删除通信表单级别并将其转移到更高级别.以下简单示例.我跳过创建每个对象更快和celar代码,但我认为你了解我的问题
type ObjectOne struct{
someValue int
}
func (o* ObjectOne)CheckValue()error{
if o.someValue == 0 {
SomeLogger.Printf("Value is 0 error program") // communicate form first level abstraction to logger
return errors.New("Internal value in object is 0")
}
return nil
}
type ObjectTwoHigherLevel struct{
objectOne ObjectOne
}
func (oT* ObjectTwoHigherLevel)CheckObjectOneIsReady() error{
if err := oT.objectOne.CheckValue() ; err != nil{
SomeLogger.Printf("Value in objectOne is not correct for objectTwo %s" , err) // second communicate
return err
}
return nil
}
type …
Run Code Online (Sandbox Code Playgroud) 实际上,我知道减少重复distinct()
或分配的List
方法Set
,但我有一些不同的问题.如何解决JAVA 8中使用流的问题以下的智能方式或可能StreamEx
?
假设我们在List中有一个对象
A, A, A, B, B, A, A, A, C, C, C, A, A, B, B, A
现在我需要
A, B, A, C, A, B, A
所以复制被删除了,但只有当下一个出现时,但如果旁边是不同的对象则应该保留.我尝试了一些解决方案但是丑陋,而且不易阅读.
我有一个容器,该容器在日志中有时会写一个对我来说很重要的关键字,我想在终端中用彩色突出显示该单词,但重要的是仍要实时查看所有内容日志(-跟随)。我刚试过命令
docker logs -f my_app --tail=100 | grep --color -E '^myWord'
Run Code Online (Sandbox Code Playgroud)
但不起作用。
因此,存在一些执行此操作的方法吗?
我尝试在Clion IDE中编写代码(c/c ++).我需要在项目中添加一些共享库.在这一刻,我想只运行程序(只有主要功能),它将能够添加我的外部库libAPIenergy.so的任何功能.我从这个论坛尝试了一些解决方案,但任何人都没有帮助.
下面我将介绍给出最少错误的解决方案.
在主要功能我包括
#include "APIenergy.h"
Run Code Online (Sandbox Code Playgroud)
CMake文件
cmake_minimum_required(VERSION 3.3)
project(TestProject)
add_library( libAPIenergy SHARED IMPORTED )
link_directories (/home/I/Lib/Linux/x86)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lAPIenergy ")
set(SOURCE_FILES main.cpp APIenergy.h)
add_executable(TestProject ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)
和错误:
/home/I/clion-1.2/bin/cmake/bin/cmake --build /home/I/.CLion12/system/cmake/generated/9faec492/9faec492/Debug --target TestProject -- -j 8
[ 50%] Building CXX object CMakeFiles/TestProject.dir/main.cpp.o
[100%] Linking CXX executable TestProject
/usr/bin/ld: cannot find -lAPIenergy
collect2: error: ld returned 1 exit status
CMakeFiles/TestProject.dir/build.make:94${PROJECT_SOURCE_DIR}/P2PTunnelAPIs.h.in": polecenia dla obiektu 'TestProject' nie powiod?y si?
make[3]: *** [TestProject] B??d 1
CMakeFiles/Makefile2:67: polecenia dla obiektu 'CMakeFiles/TestProject.dir/all' nie powiod?y …
Run Code Online (Sandbox Code Playgroud) 我有这种情况不工作的功能
os.GetEnv()
我在我的系统ADDR ="192.168.1.100"trought文件.bashrc和.profile中设置了一个变量.所以,如果我打开终端并输入以下命令,我会得到很好的结果
$ echo $ ADDR
192.168.1.100
为什么在下面非常简单的程序我得到错误如果变量在系统中设置正确?
func main(){
addr := os.Getenv("ADDR")
if addr == "" {
return errors.New("missing addres")
}
}
Run Code Online (Sandbox Code Playgroud)
我也多次重启IDE.试着再次写入终端
$ env ADDR ="192.168.1.100"
但仍然有同样的效果.
我想知道何时或是否应该在 golang 中使用自己的类型。当这将更容易理解我的代码时,或者当我不应该使用自己的类型时。
示例:我想创建带有MAC 的map
类型,并命名为 host:
我可以用第一种最简单的方式做到这一点
var machines map[string]string{
"11:22...": "myHost",
"22:33..": "yourHost",
}
Run Code Online (Sandbox Code Playgroud)
第二种方式
type MAC string
type HOST string
machines := map[MAC]HOST{
MAC("11:22..") : HOST("myHost"),
MAC("22:33..") : HOST("yourHost"),
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我可以对我的类型进行额外的控制MAC
,HOST
通过编写验证、比较等方法更好吗?
第三条路
type MACHINES map[string]string
m := MACHINES{}
m = map[string]string{
"11:22.." : "myHost",
"22:33" : "yourHost",
}
Run Code Online (Sandbox Code Playgroud)
上面的例子对我来说是最难理解的,对其他人来说不太直观。我认为上面的示例还应该填写有关 HOST 和 MAC 的内容,因为类型 MACHINE 没有说明开发人员应该如何实现,所以我想
type MACHINES map[MAC]HOST
Run Code Online (Sandbox Code Playgroud)
但是,请评论以更好地了解 golang 中使用自己的类型。
我有问题解决是否作为函数的接口传递的对象没有初始化字段,像被定义为刚才的对象someObject{}
是空的,因为所有字段,值为0或nil
如果我传递不同的对象,问题会变得更复杂,因为每个对象都有不同的类型字段值,所以在这一刻我找不到通用的方法.
例
func main(){
oo := objectOne{}
ot := objectTwo{}
oth := objectThree{"blah" , "balbal" , "blaal"}
resolveIsNotIntialized(oo)
resolveIsNotIntialized(ot)
resolveIsNotIntialized(oth)
}
func resolveIsNotIntialized(v interface{}) bool{
// and below, how resolve that oo and ot is empty
if (v.SomeMethodWhichCanResolveThatAllFiledIsNotIntialized){
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
我想避免使用switch
如下所示的用法语句,并为每个对象添加额外的功能,如果可能的话.
func unsmartMethod(v interface{}) bool{
switch v.(type){
case objectOne:
if v == (objectOne{}) {
return true
}
// and next object, and next....
}
return false
}
Run Code Online (Sandbox Code Playgroud) 我的功能有奇怪的问题bytes.Contains(b, subslice []byte) bool
.它没有在函数中接收的字节数组中找到字符(c *IPConn) Read(b []byte) (int, error)
.应用程序是一个简单的服 所以我有字节数组,它通过服务器接收到变量buf
buf := make([]byte, 1024)
Len, err := c.conn.Read(buf)
// below received content in buf
//{"abc":[{"b":5,"bca":14,"xyz":0}]}{"abc":[{"b":7,"hjk":14,"qwe":0}]}
Run Code Online (Sandbox Code Playgroud)
现在我想使用下面的函数来查找} {数组buf中的字符
if bytes.Contains(buf, []byte(`}{`) != false {
fmt.Printf("I got you")
}
Run Code Online (Sandbox Code Playgroud)
但是函数总是返回false.为什么?
我在我的程序中做了一些实验,如下所示:
worker := []byte('{"abc":[{"b":5,"bca":14,"xyz":0}]}{"abc":[{"b":7,"hjk":14,"qwe":0}]}')
// try find }{
if bytes.Contains(worker, []byte(`}{`) != false {
fmt.Printf("I got you")
}
Run Code Online (Sandbox Code Playgroud)
是正确的 !!!我不明白这一点......因为它允许通过服务器接收的数据和通常在程序中附加的数据之间的内容必须不同.