本教程着重Go项目的整体理解和实践,不重点解说变量和函数使用等语法细节,语法教程资源丰富,请自行在网上扩展学习。
JAVA以跨平台著称,号称"一次编译,处处运行"。实际上,每台机器,都必须安装JAVA虚拟机能运行。
所以,从跨平台的表现上看,JAVA对比普通脚本语言并无太大优势。
Go和C一样,一份源码,在任意操作系统上,直接编译成二进制可执行文件,便可在其他机器上独立运行。(指运行环境和编译环境一致。如: 在win-x64系统上编译,在win-x64系统上运行)
Go安装包下载链接,请以官方显示的不同操作系统平台的Go最新版本链接为准: https://go.dev/dl/
下载Go文件压缩包并解压,设置Go环境变量
# 下载go环境压缩包,链接可自行替换为最新版本
wget -c https://go.dev/dl/go1.19.3.linux-amd64.tar.gz
# 解压缩到/usr/local目录
tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz
# 添加go可执行文件所在的目录到环境变量。
# 可在系统初始化文件 /etc/profile 的最末行添加代码: export PATH=$PATH:/usr/local/go/bin
vim /etc/profile
# 手动执行初始化文件,使得环境变量更改生效
source /etc/profile
# 验证go是否安装成功。
go version
同Linux
下载Go环境安装文件,安装结束后,安装程序自动设置Go环境变量
下载并安装文件: https://go.dev/dl/go1.19.3.windows-amd64.msi
打开cmd命令窗口验证go命令: go version
查看所有go环境设置项的值: go env
输入如下命令,更改默认设置项以方便后续开发:
# 开启GO111MODULE,方便第三方包的导入
go env -w GO111MODULE=on
# 使用国内Go模块代理,加速第三方包导入速度
go env -w GOPROXY=https://goproxy.cn,direct
main.go 文件示例(提取百度首页热搜):
最新源码: https://github.com/iotames/miniutils/tree/main/examples/myproject
package main
import (
"fmt"
"log"
"github.com/iotames/miniutils"
)
func main() {
// 构建HTTP请求(默认GET方法)
req := miniutils.NewHttpRequest("https://www.baidu.com")
// 设置HTTP请求头
req.SetRequestHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/533.33")
// 执行HTTP请求
err := req.Do(nil)
if err != nil {
log.Println(err)
return
}
body := string(req.BodyBytes)
// 提取网页中,以`<span class="title-content-title">`字符串开头,`</span>` 字符串结尾的所有字符串片段。
strfind := miniutils.NewStrfind(body).SetRegexpBeginEnd(`<span class="title-content-title">`, `</span>`)
hots := strfind.DoFind().GetAll(false)
hotsMsg := "百度热搜:\n"
for i, v := range hots {
hotsMsg += fmt.Sprintf("[%d]----->[%s]\n", i, v)
}
log.Println(hotsMsg)
}
运行结果:
----RequestBegin---GET: https://www.baidu.com -------------------------------------------
User-Agent: [Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/533.33]
----RequestEnd---(200 OK)----------------------
2022/11/18 14:59:21 百度热搜:
[0]----->[“两个全球倡议”有何含义]
[2]----->[携手应对挑战 加快经济复苏]
[2]----->[新华社:一封了之、一放了之要不得]
[3]----->[张伯礼:奥密克戎难以彻底消灭]
[4]----->[31省份昨日新增本土2276+22853]
[5]----->[女子戴隐形10年角膜长满新生血管]
至此,一个简单的 Hello Word 应用程序编写完成, 用于提取百度首页的热搜关键词.
程序编译成独立的可执行文件: myproject.exe(Linux或Mac系统文件名为myproject).
请打开命令行窗口执行:
Linux系统若报权限问题,请先赋予文件可执行权限: chmod +x myproject
Go语言使用包(package)来组织golang工程项目。特点如下:
Go基础语法 在线练习: https://go.dev/play/
result := ""
for i := 'a'; i <= 'g'; i++ {
result += fmt.Sprintf("%c", i)
}
fmt.Println(result) // 输出 "abcdefg"
result := ""
for i := 0; i <= 5; i++ {
result += fmt.Sprintf("%d", i)
}
fmt.Println(result) // 输出 "012345"
mapstr := map[string]string{"a":"aa11", "b":"bb22"}
result := ""
for k, v := range mapstr {
result += fmt.Sprintf("%s->%s", k, v)
}
fmt.Println(result) // 输出 "a->aa11b->bb22"
sliceStr:= []string{"aa11", "bb22"}
result := ""
for i, v := range sliceStr {
result += fmt.Sprintf("%d->%s", i, v)
}
fmt.Println(result) // 输出 "0->aa111->bb22"
本教程调用库 miniutils,对日常开发的常见功能进行封装,不依赖其他第三方库,包含 examples 示例源码。
同步仓库:
Github: https://github.com/iotames/miniutils
Gitee: https://gitee.com/catmes/miniutils
安装go开发环境: https://go.dev/doc/install