Golang优质教程和书籍推荐及常见问题解答

Golang优质教程和书籍推荐及常见问题解答 你好, 我过去曾使用 bash/perl 进行过一些脚本编写。也接触过一点点 Python。 我对 Go 感兴趣的原因是,据我目前了解,我可以用 Go 编写脚本/代码,生成一个二进制文件,然后只需将这个二进制文件上传到服务器即可,无需在服务器上安装编译器/解释器。我的理解正确吗?

如果我安装了外部模块(即那些不属于核心部分的模块),这一点是否仍然成立?例如,我的大部分工作是通过 SSH 登录服务器/设备并捕获输出,或者进行 scp/sftp 文件传输等。

我还需要将数据写入 Excel 表格、创建图表等,并通过电子邮件发送。我可以用 Go 实现这些功能吗?

如果以上都能实现,是否有好的教程或书籍可以让我尝试“浅尝”一下 Go?请告诉我。


更多关于Golang优质教程和书籍推荐及常见问题解答的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

你可以查阅一本关于Go语言的优秀书籍——https://go101.org/article/101.html

更多关于Golang优质教程和书籍推荐及常见问题解答的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


欢迎 notadev。

你所有问题的答案都是肯定的。

我在阅读《Go Workshop》时,对 Go 有了“顿悟时刻”。

干杯

是的,你的理解完全正确。Go 编译后生成的是静态链接的二进制文件,可以直接部署到服务器上运行,无需安装额外的运行时或解释器。即使使用了外部模块,Go 默认也会将所有依赖静态编译到二进制文件中(除非依赖了 C 语言库)。下面是一个简单的示例,演示如何编译一个使用外部模块的程序:

package main

import (
    "fmt"
    "github.com/pkg/sftp"
)

func main() {
    fmt.Println("SFTP client example")
    // 实际使用 sftp 包的代码...
}

编译命令:

go build -o myapp main.go

生成的 myapp 二进制文件可以直接复制到任何相同操作系统的服务器上运行。

对于你提到的需求,Go 有成熟的库支持:

  1. SSH/SCP/SFTP:使用 golang.org/x/crypto/ssh 标准库或第三方库如 github.com/pkg/sftp
  2. Excel 操作:推荐使用 github.com/xuri/excelize/v2
  3. 图表生成:可以使用 github.com/wcharczuk/go-chart
  4. 邮件发送:标准库 net/smtp 或第三方库 github.com/go-gomail/gomail

示例:使用 excelize 创建 Excel 文件

package main

import (
    "fmt"
    "github.com/xuri/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    f.SetCellValue("Sheet1", "A1", "Hello")
    f.SetCellValue("Sheet1", "B1", "World")
    if err := f.SaveAs("test.xlsx"); err != nil {
        fmt.Println(err)
    }
}

推荐学习资源

官方资源

书籍

  • 《The Go Programming Language》(Donovan & Kernighan 著)
  • 《Go in Action》(William Kennedy 著)

中文资源

实践建议: 从官方教程开始,然后尝试用 Go 重写你现有的 Perl/Python 脚本。例如,一个简单的 SSH 连接示例:

package main

import (
    "fmt"
    "golang.org/x/crypto/ssh"
)

func main() {
    config := &ssh.ClientConfig{
        User: "username",
        Auth: []ssh.AuthMethod{
            ssh.Password("password"),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }
    client, err := ssh.Dial("tcp", "host:22", config)
    if err != nil {
        panic(err)
    }
    defer client.Close()
    
    session, err := client.NewSession()
    if err != nil {
        panic(err)
    }
    defer session.Close()
    
    output, err := session.Output("ls -la")
    fmt.Println(string(output))
}

Go 的编译特性和丰富的库生态完全能满足你的自动化运维需求。

回到顶部