小编Bar*_*rim的帖子

如何从Golang创建一个在运行时不打开命令(cmd)窗口的可执行文件?

我创建了一个我想在后台无形运行的应用程序(没有命令/ cmd控制台).我该怎么做呢?

(这适用于Windows,在Windows 7 Pro 64位上测试过)

console go

50
推荐指数
3
解决办法
3万
查看次数

如何使用Python3中的换行符将列表写入文件

我正在尝试使用Python 3将数组(列表?)写入文本文件.目前我有:

def save_to_file(*text):

    with open('/path/to/filename.txt', mode='wt', encoding='utf-8') as myfile:
        for lines in text:
            print(lines, file = myfile)
    myfile.close
Run Code Online (Sandbox Code Playgroud)

这会将类似于数组的内容直接写入文本文件,即

['element1', 'element2', 'element3']
username@machine:/path$
Run Code Online (Sandbox Code Playgroud)

我要做的是创建文件

element1
element2
element3
username@machine:/path$
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的循环方式并附加了一个"\n",但似乎写入是在一次操作中转储数组.问题类似于如何将字符串列表写入文件,添加换行符?但语法看起来像是Python 2?当我尝试它的修改版本时:

def save_to_file(*text):

    myfile = open('/path/to/filename.txt', mode='wt', encoding='utf-8')
    for lines in text:
        myfile.write(lines)
    myfile.close
Run Code Online (Sandbox Code Playgroud)

... ... Python shell给出了"TypeError:必须是str,而不是list",我认为是因为Python2和Python 3之间的变化.我想让每个元素在换行符上缺少什么?

编辑:谢谢@agf和@arafangion; 结合你们两个人的写作,我想出了:

def save_to_file(text):

    with open('/path/to/filename.txt', mode='wt', encoding='utf-8') as myfile:
        myfile.write('\n'.join(text))
        myfile.write('\n')
Run Code Online (Sandbox Code Playgroud)

看起来我有"*text"问题的一部分(我读过这个扩展了参数,但直到你写了[元素]变成[[元素]]我才得到一个str-not-列表类型错误;我一直在想我需要告诉定义它是一个传递给它的列表/数组,而只是声明"test"将是一个字符串.)一旦我将它改为文本并使用了myfile,它就起作用了.用连接写,附加的\n放在文件末尾的最后一行.

python python-3.x

20
推荐指数
1
解决办法
6万
查看次数

使用-ldflags -H = windowsgui编译golang应用程序时,将输出打印到命令窗口

我有一个通常在后台运行的应用程序,所以我用它编译它

go build -ldflags -H=windowsgui <gofile>
Run Code Online (Sandbox Code Playgroud)

要在命令行检查版本,我想将-V标志传递给命令行,以获取保存要打印到命令提示符的版本的字符串,然后让应用程序退出.我添加了标志包和代码.当我测试它时

go run <gofile> -V
Run Code Online (Sandbox Code Playgroud)

...打印版本很好.当我编译exe时,它只是退出,什么都不打印.我怀疑它是编译标志,导致它无法访问控制台并将我的文本发送到位桶.

我已尝试使用println和fprintf以及os.stderr.write打印到stderr和stdout的变体,但编译的应用程序中没有任何内容.在使用这些标志编译时,我应该如何尝试将字符串打印到命令提示符?

go

13
推荐指数
1
解决办法
3392
查看次数

在GoLang中为uint64分配类型uintptr

我正在尝试将在uintptr类型的变量中找到的值分配给Go中的uint64变量.运用

myVar = valFromSystem
Run Code Online (Sandbox Code Playgroud)

给我

不能在赋值时使用valFromSystem(类型uintptr)作为类型uint64

并尝试

myVar = *valFromSystem
Run Code Online (Sandbox Code Playgroud)

给我

valFromSystem的无效间接(类型uintptr)

有没有办法拉出valFromSystem指向的值来分配给myVar?

pointers variable-assignment go

10
推荐指数
1
解决办法
8554
查看次数

使用Golang获取Windows空闲时间(GetLastInputInfo或类似)

是否有使用Go获取Windows系统空闲时间的示例或方法?
我一直在看Golang网站上的文档,但我想我错过了如何访问(和使用)API来获取系统信息,包括空闲时间.

winapi go idle-timer

9
推荐指数
1
解决办法
5083
查看次数

Google 数据工作室连接器:“抱歉,我们遇到错误,无法完成您的请求。”

我不确定在哪里可以获取有关 Google Data Studio 在运行自定义 Google App 脚本连接器时遇到的错误的信息。

我创建了一个脚本,作为新版本的清单发布并复制了 ID。

在 Data Studio 中,我打开编辑,打开新的连接器页面,然后在开发人员中输入 ID,这会显示我的应用程序脚本并要求我授权对外部资源的访问(假设这是因为它正在查询非 Google 网站) 。

连接器页面显示我的架构标签。我填写了一些信息,然后单击“连接”,然后弹出一个框:“抱歉,我们遇到错误,无法完成您的请求”以及错误 ID。

我在哪里可以找到该 ID 背后的信息?我发现脚本执行页面包含已运行的函数,但它们看起来都成功运行(没有失败)。

日志查看器或 Stackdriver 日志中没有记录任何内容。

我不知道如何在脚本编辑器中测试它,因为 Data Studio 应该使用请求对象调用函数,而在编辑器中尝试测试需要该对象的函数会失败,因为它是未定义的。

有没有地方可以查看更多触发错误的原因?或者我可以插入一些可以从 Data Studio 执行尝试正确记录到 Logger.log 的内容?

编辑:好的,看起来 console.log() 会将消息发送到 stackdriver 日志,但我仍然没有找到错误或 Data Studio 到底有什么问题。我在每个函数的开头添加了一条日志消息,表示它们即将运行,日志查看器显示 Data Studio 所需的函数 getAuthType()、isAuthValid()、getConfig()、isAdminUser() 和getSchema 已运行,没有其他任何事情......

我仍在寻找来自 lambda 引擎(或 Data Studio)的日志,以告诉我在尝试运行时它到底不喜欢什么。

google-apps-script looker-studio

7
推荐指数
0
解决办法
9115
查看次数

有没有办法告诉Go中的文件类型(可执行文件,文本等)?

它有一个内置的方式来获取Go中的文件类型?

仅从文件名中猜测是否足够(在Windows中)或者是否有一种方法只能告诉基本文件是否是可执行文件?我想找到一个跨平台的方法来做到这一点,并且读取文件名并从中工作可能会错过重命名为*.jpg的可执行文件.

go

5
推荐指数
1
解决办法
94
查看次数

Golang:访问 Windows 共享(来自 Linux 应用程序)

是否有一种正确的方法可以从在 Linux 设备上编译并运行的 Go 应用程序连接到 Windows 共享,例如 \windowspc\c$\myshare?

共享将需要凭据才能将文件保存到目标 UNC 路径。

是否有最佳实践来实现这一点?

windows-share go

5
推荐指数
1
解决办法
5594
查看次数

结构体中的 Golang 通道:传递给函数时可以定向吗?

将通道传递给函数时,我知道您可以指定通道可以使用通道的方向;例如,

func MyFunc(ch chan<- string) {
    ch <- "Hello"
}
Run Code Online (Sandbox Code Playgroud)

“ch”只能被 MyFunc 用来向别处的接收者发送字符串,而 MyFunc 不能监听来自 ch 的消息。

为了简化为一定数量的 goroutine 创建动态数量的通道,我创建了一个包含通道的结构。

type ChanStruct struct {
    chMessages chan string
}
Run Code Online (Sandbox Code Playgroud)

然后我实例化一个结构:

var slcChanStruct []ChanStruct
for a:= 0; a <=2; a++ {
    var tmpChanStruct ChanStruct
    tmpChanStruct.chMessages = make(chan string)
    slcChanStruct = append(slcChanStruct, tmpChanStruct)
}
Run Code Online (Sandbox Code Playgroud)

现在我有 3 个结构,我可以通过覆盖一片结构来单独读/写一个通道。但是当我将它们发送到 goroutines 时:

for a:=0; a <=2; a++{
    go SomeFunc(slcChanStruct[a])
}
Run Code Online (Sandbox Code Playgroud)

...有没有办法通过指定 goroutines 只能,例如,使用 ChanStruct.ch 通道发送来增加一点安全性?

注意我这样做的原因是,如果我不知道一组并行进程需要多少个通道(进程数作为命令行参数传递)使用带有通道的结构意味着我可以创建一个切片,可以传递给任意数量的 goroutine,并通过遍历它们直接单独访问它们;以前,如果我想从多个 goroutine 中单独读取,我必须创建一定数量的通道。我想通过指定进程只能以某种方式使用通道来增加一些安全性,就像我在使用单个通道时一样(单个通道意味着我可以做一些事情,比如告诉特定的 goroutine 在没有其他 goroutine 拦截它的情况下退出)。如果可以的话,有没有更惯用的方法来做到这一点?

struct channel go channels

5
推荐指数
1
解决办法
2万
查看次数

如何在Golang中将网络客户端的IP转换为字符串?

我正在尝试在与服务器建立连接时获取客户端IP.尝试使用RemoteAddr()返回一个addr类型,虽然我可以使用打印到控制台fmt.Println,我正在尝试将值赋给字符串变量.

这可能吗?或者有更好的方法来提取连接客户端的IP地址吗?

我正在处理的函数示例(strRemoteAddr赋值是问题部分,但我将其作为占位符保留...):

func GrabInput(conn net.Conn, strFromListenerNumber string) {
    var strMessage string
    var strRemoteAddr string

    bufIncoming := make([]byte, 1024)

    strRemoteAddr = conn.RemoteAddr()

    for {
        bytesRead, err := conn.Read(bufIncoming)
        if err != nil {
            LogEvent(strFromListenerNumber, err.Error())
            return
        }

        strMessage = string(bufIncoming[0 : bytesRead-1])
        LogEvent(strFromListenerNumber+": "+strRemoteAddr, strMessage)
    }
}
Run Code Online (Sandbox Code Playgroud)

string network-programming go

4
推荐指数
2
解决办法
1万
查看次数