Go
Go语言是模块化的,引入箱子->使用工具
Go特色:(相较python而言)
- packge main:主程序入口,必须要有 mian() 函数
- import 分组用括号分组导入,导入路径:从标准库或从模块路径导入
- 结构体
type定义(相当于class):- 必须声明字段类型
- 结构体标签
json:"host"是元数据,用于序列化 - 大写字母开头用于公开访问,小写字母开头是私有
var zabbixData ZabbixRawData- // 声明一个 ZabbixRawData 类型的变量
- 方法定义(相当于def):
- func ()
- (p *ZabbixProcessor)相当于 Python 的 self
- ([]byte, error)返回结果+错误
- 错误是显式返回值,不是异常
- json
- 解析 json :
json.Unmarshal(rawJson, &zabbixData)- 将JSON字符串解析并填充到 zabbixData 结构体变量中
- rawJson是一个字节切片
byte slice(存储原始的Json数据) - &是 取地址运算符,&zabbixData获取变量 zabbixData的内存地址
- 为什么要加&:
不加&:Go的函数参数的传递是“值传递”,函数内部修改的是副本,外部的zabbixData不变
加&:直接传递zabbixData的地址,函数内部通过低智直接修改原始的zabbixData的变量
- 为什么要加&:
- 生成 json :
json.Marshal(result) - 对比python:解析
json.load()序列化json.dumps()
- 解析 json :
关于参数传递三种语言的对比:
C语言(最原始最危险):必须显式使用 &和 *
// 函数声明
void modify_c(int *ptr) {
*ptr = 100; // 通过指针直接修改内存
}
int *ptr = (int*)0x1000; // 任意地址
*ptr = 123; // 可能崩溃或破坏系统
Go语言(安全版的C指针):语法类似C,不支持指针算术,运行时检查
package main
import "fmt"
func modify_go(ptr *int) {
*ptr = 100 // 通过指针修改
}
python(完全不同的哲学):对象引用,不可变对象函数内修改创建新对象,可变对象函数内可修改原对象
def change_number(n):
n = 100 # 创建新的整数对象
print(f"函数内: {n}") # 100
x = 10
print(f"调用前: {x}") # 10
change_number(x)
print(f"调用后: {x}") # 10,没变!
python 不可变对象:数字、字符串、元组
python 可变对象:列表、字典、集合
Go中的工具包:
fmt:-- 打印
fmt.Println自动换行打印fmt.Printf格式化打印 (需要把变量的值嵌入到一句话里打印出来时用)
time:-- 时间
- Timestamp:
time.Now().UnixMilli()// 毫秒时间戳
encoding/json
json.Unmarshal([]byte(jsonStr), &myData)把JSON字符串翻译成结构体json.Marshal(myData)把结构体翻译成JSON字符串
strings -- 字符串
- import "strings"
ip := "10.10.10.32;10.10.10.33"
// 判断是否包含
strings.Contains(ip, "10.10.10.32") // true
// 分割
ips := strings.Split(ip, ";") // 变成数组 ["10.10.10.32", "10.10.10.33"]
// 替换
newIp := strings.Replace(ip, ";", ",", -1)
net/http -- 网络
- 发 HTTP 请求。相当于 Python 的
requests库或 Linux 的curl命令。 - import "net/http"
// 发送一个 GET 请求
resp, err := http.Get("http://cmdb.api.com/get_host?ip=10.0.0.1")
if err != nil {
// 处理错误
}
// 别忘了关闭连接
defer resp.Body.Close()
log -- 日志
log是给程序看的(记录日志)。它会自动在前面加上日期和时间,方便排查问题。- import "log"
log.Println("系统启动成功")
// 输出:2024/10/29 10:00:00 系统启动成功
log.Fatal("发生严重错误,程序退出") // 打印日志并强制退出程序






Comments NOTHING