我有一个用Go编写的消息服务器.现在我要求服务器需要在纸上打印一些消息.
我怎样才能在Go中实现这一点?我很难找到关于这个主题的任何内容.
该应用程序将在Windows机器上运行,并且需要能够以固定宽度的字体打印UTF8编码的文本.因此不需要花哨的格式(粗体文本,颜色等).
对于如何解决这个问题,我完全处于黑暗中......有人可以为我阐明这一点,并指出我正确的方向吗?
我现在花了很多时间搜索和阅读关于这个主题的帖子但是已经设法完全回答了我的问题 - 或许我只需要对现有答案进行更多澄清.
我读过这篇与我的标题相同的帖子,但它是关于日志而不是包的日志.
我想要解决的是记录主应用程序及其使用的任何包.我需要一个可以记录到多个位置的记录器(可以使用io.MultiWriter完成),并且可以执行log.Error()和log.Debug()之类的操作.
我知道有这样做的包,我知道如何自己实现这些.
我无法理解的是如何正确使用我的包裹.
一种方法当然是在main中创建记录器,然后将其传递给需要记录的所有函数.但它似乎很尴尬.
我理想的解决方案是从日志包中获得一个类似于内置全局记录器的记录器,但具有上述附加功能.
我主要想在包中进行可选的调试日志记录,因此如果需要,我可以在生产版本中启用它.
这样做的正确方法是什么?
我得到了在远程主机上创建文件的代码:
config := &ssh.ClientConfig{
User: "xx",
HostKeyCallback: nil,
Auth: []ssh.AuthMethod{
ssh.Password("xx"),
},
}
config.SetDefaults()
sshConn, err := ssh.Dial("tcp", "192.xx.1.xx:22", config)
if err != nil {
panic(err)
}
defer sshConn.Close()
client, err := sftp.NewClient(sshConn)
if err != nil {
panic(err)
}
defer client.Close()
file, err := client.Create("/www/hello9.txt")
if err != nil {
panic(err)
}
defer file.Close()
if _, err := file.Write([]byte("Hello world")); err != nil {
log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)
但需要将文件从远程主机复制到本地主机.我怎样才能做到这一点使用golang工具github.com/pkg/sftp和golang.org/x/crypto/ssh只?
说我有以下代码:
var x interface{}
y := 4
x = y
fmt.Println(reflect.TypeOf(x))
Run Code Online (Sandbox Code Playgroud)
这将打印int作为类型.我的问题是如何测试类型?我知道有这样的类型开关,所以我可以这样做:
switch x.(type) {
case int:
fmt.Println("This is an int")
}
Run Code Online (Sandbox Code Playgroud)
但如果我只想检查一个特定的类型,那么交换机似乎是错误的工具.是否有更直接的方法来做到这一点
reflect.TypeOf(x) == int
Run Code Online (Sandbox Code Playgroud)
或类型开关的方式去?