如何在自制类neofetch/fastfetch程序的系统信息左侧添加指定ASCII艺术图
如何在自制类neofetch/fastfetch程序的系统信息左侧添加指定ASCII艺术图
嘿,我完全懂你手动把ASCII硬塞到每一行print里的痛苦——不仅繁琐还容易把格式搞乱!其实我们可以用将ASCII艺术图和系统信息分别拆成单行字符串切片,逐行配对拼接的方法,轻松实现左右并排的效果,而且后续修改也方便很多。
具体实现步骤
核心思路就是把ASCII的每一行和系统信息的每一行一一对应,用格式化打印把它们放在同一行,再用边框统一包裹,这样整体布局就规整了。
修改后的完整代码
package main import ( "fmt" "strings" "github.com/jaypipes/ghw" "github.com/shirou/gopsutil/v4/cpu" "github.com/shirou/gopsutil/v4/mem" ) func main() { v, _ := mem.VirtualMemory() c, _ := cpu.Info() gpu, _ := ghw.GPU() // 1. 把ASCII艺术图拆成每行的字符串切片,保留原始格式 asciiLines := []string{ " /\\", "/ \\", "/ \\", "/ \\", "/ __ \\", "/ | | \\", "/_-'' ''-_\\", } // 计算内存(注意:GiB是1024^3,所以用1024而非1000换算更准确) totalMemGiB := float32(v.Total) / 1024 / 1024 / 1024 availMem := float32(v.Available) / 1024 / 1024 / 1024 usedMem := totalMemGiB - availMem // 处理CPU型号 cpuModel := c[0].ModelName if strings.Contains(cpuModel, "AMD Ryzen 5 5600H with Radeon Graphics") { cpuModel = "AMD Ryzen 5 5600H" } // 处理GPU型号 gpu0 := gpu.GraphicsCards[0].DeviceInfo.Product.Name gpu1 := gpu.GraphicsCards[1].DeviceInfo.Product.Name if strings.Contains(gpu0, "Radeon Vega") { gpu0 = "Radeon Vega Series" } if strings.Contains(gpu1, "GeForce GTX 1650") { gpu1 = "GeForce GTX 1650 Series" } // 2. 把系统信息整理成对应的字符串切片 infoLines := []string{ " : Arch Linux", fmt.Sprintf(" ͛ : %s", cpuModel), fmt.Sprintf(" ߖ : %.2fGiB / %.2fGiB", usedMem, totalMemGiB), fmt.Sprintf(" : %s", gpu0), fmt.Sprintf(" : %s", gpu1), } // 3. 补全信息行的长度,和ASCII行数一致(如果信息行少就补空行) for len(infoLines) < len(asciiLines) { infoLines = append(infoLines, "") } // 4. 统一打印边框和内容 fmt.Println("┌────────────────────────────────────────────────┐") for i := 0; i < len(asciiLines); i++ { // 格式化每行:左对齐打印ASCII行,然后是信息行,最后用边框包裹 fmt.Printf("│ %-15s %-30s │\n", asciiLines[i], infoLines[i]) } fmt.Println("└────────────────────────────────────────────────┘") }
关键细节说明
- 拆分ASCII为行切片:把一整段ASCII拆成单个字符串元素,这样就能和系统信息逐行对应,避免手动拼接的麻烦。
- 规整系统信息切片:把所有要显示的系统信息提前整理成字符串切片,方便后续和ASCII行配对。
- 格式化对齐打印:用
%-15s和%-30s实现左对齐排版,确保ASCII和信息部分不会错位,整体视觉更统一。 - 内存换算修正:原代码里用
/1000计算GiB是不准确的,GiB的标准换算是1024^3,改成/1024/1024/1024后数值会更精准。
这样修改后,你不仅能轻松实现ASCII在左、信息在右的效果,以后要更换ASCII艺术图或者调整系统信息,只需要修改对应的切片内容就行,再也不用逐行改print语句啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

