GO 语言进阶之 进程 OS与 编码,数据格式转换

更多个人笔记见:
github个人笔记仓库
gitee 个人笔记仓库

个人学习,学习过程中还会不断补充~ (后续会更新在github上)

文章目录

进程信息OS操作

基本例子

GO 复制代码
package main

import (
	"fmt"
	"os"
	"os/exec"
	"runtime"
)

func main() {
	// 1. 获取当前进程信息
	fmt.Println("--- 进程信息 ---")
	fmt.Println("进程ID:", os.Getpid())
	fmt.Println("父进程ID:", os.Getppid())
	fmt.Println("用户ID:", os.Getuid())
	fmt.Println("组ID:", os.Getgid())

	// 2. 获取系统信息
	fmt.Println("\n--- 系统信息 ---")
	fmt.Println("操作系统:", runtime.GOOS)
	fmt.Println("CPU核心数:", runtime.NumCPU())
	hostname, _ := os.Hostname()
	fmt.Println("主机名:", hostname)

	// 3. 环境变量操作
	fmt.Println("\n--- 环境变量 ---")
	fmt.Println("PATH:", os.Getenv("PATH"))
	os.Setenv("TEST_ENV", "test_value")
	fmt.Println("TEST_ENV:", os.Getenv("TEST_ENV"))

	// 4. 执行系统命令
	fmt.Println("\n--- 执行命令 ---")
	cmd := exec.Command("echo", "Hello, Go!")
	output, _ := cmd.Output()
	fmt.Printf("命令输出: %s", output)

	// 5. 文件系统操作
	fmt.Println("\n--- 文件操作 ---")
	_, err := os.Stat("test.txt")
	if os.IsNotExist(err) {
		fmt.Println("创建test.txt文件")
		os.WriteFile("test.txt", []byte("测试内容"), 0644)
	} else {
		data, _ := os.ReadFile("test.txt")
		fmt.Println("文件内容:", string(data))
	}

	// 6. 退出进程
	fmt.Println("\n--- 进程退出 ---")
	defer fmt.Println("清理工作...") // defer语句会在函数退出前执行
	// os.Exit(0) // 立即退出,不执行defer
	// syscall.Exit(0) // 系统调用方式退出

	// 7. 创建子进程
	fmt.Println("\n--- 创建子进程 ---")
	attr := &os.ProcAttr{ //创建ProcAttr结构体定义子进程属性
		Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, //Files字段设置子进程的标准输入/输出/错误流,这里复用父进程的IO
	}
	process, err := os.StartProcess("/bin/ls", []string{"ls", "-l"}, attr) //启动/bin/ls程序执行ls -l命令
	if err != nil {
		fmt.Println("启动失败:", err)
		return
	}
	fmt.Println("子进程ID:", process.Pid) //输出子进程 pid
	state, _ := process.Wait()
	fmt.Println("子进程退出状态:", state.Success()) //检查退出状态

}
  1. os.Getpid() - 获取当前进程ID
  2. exec.Command() - 执行系统命令
  3. os.Stat() - 检查文件状态
  4. os.StartProcess() - 创建子进程
  5. os.Getenv()/Setenv() - 环境变量操作
  6. runtime包 - 获取运行时信息
  7. signal包 - 处理系统信号(示例中已注释)
  8. os.Exit() - 控制进程退出

编码相关

HASH 哈希

Base64 encoding 基础64编码

数据格式转换和处理

需要转换和接收成特定的数据类型,方便传递 比如int转换为string

字符串和int之间

主要是 strconv (str-conversion理解)

  • 字符串转到 int以及数字类型之间转换
GO 复制代码
package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 字符串转浮点数
	f, _ := strconv.ParseFloat("1.234", 64)
	fmt.Println(f) // 1.234

	// 字符串转整数(十进制)
	n, _ := strconv.ParseInt("111", 10, 64)
	fmt.Println(n) // 111

	// 字符串转整数(自动识别进制)
	n, _ = strconv.ParseInt("0x1000", 0, 64)
	fmt.Println(n) // 4096

	// 简化版字符串转整数
	n2, _ := strconv.Atoi("123")
	fmt.Println(n2) // 123

	// 错误处理示例
	n2, err := strconv.Atoi("AAA")
	fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}
  • int 转到字符串的方法
GO 复制代码
package main

import (
	"fmt"
	"strconv"
)

func main() {
	// 方法1:strconv.Itoa(仅适用于int)
	num := 42
	str1 := strconv.Itoa(num)
	fmt.Println(str1) // "42"

	// 方法2:strconv.FormatInt(支持int64和指定进制)
	str2 := strconv.FormatInt(int64(num), 10) // 十进制
	fmt.Println(str2) // "42"
	
	// 方法3:fmt.Sprintf(灵活但性能略低) 不过也是常用的
	str3 := fmt.Sprintf("%d", num)
	fmt.Println(str3) // "42"
}

Itoa 理解成 int to a 字符 这样记

URLparsing URL解析

相关推荐
paopaokaka_luck1 小时前
基于SpringBoot+Vue的电影售票系统(协同过滤算法)
vue.js·spring boot·后端
专注VB编程开发20年1 小时前
javascript的类,ES6模块写法在VSCODE中智能提示
开发语言·javascript·vscode
智者知已应修善业2 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
孞㐑¥5 小时前
Linux之Socket 编程 UDP
linux·服务器·c++·经验分享·笔记·网络协议·udp
IT_10247 小时前
Spring Boot项目开发实战销售管理系统——系统设计!
大数据·spring boot·后端
sealaugh328 小时前
aws(学习笔记第四十八课) appsync-graphql-dynamodb
笔记·学习·aws
ai小鬼头8 小时前
AIStarter最新版怎么卸载AI项目?一键删除操作指南(附路径设置技巧)
前端·后端·github
Touper.8 小时前
SpringBoot -- 自动配置原理
java·spring boot·后端
黄雪超8 小时前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice8 小时前
对象的finalization机制Test
java·开发语言·jvm