当前位置: 首页 > article >正文

【go语言圣经1.2】

目标

理解利用 os.Args 获取命令行参数的跨平台机制。掌握 Go 程序与操作系统之间的交互方式。

概念

  1. 输入来源:输入可能来自文件、网络、用户交互以及命令行参数等。命令行参数是程序启动时由外部传入的数据,常用于配置或传递待处理的信息。
  2. slice
    • 切片类似于动态数组,用于保存一系列元素。
    • 通过索引 s[i] 访问单个元素
    • 通过 s[m:n] 取子序列(注意:采用左闭右开区间,包含第 m 个元素,不包含第 n 个元素)
  3. os 包:提供了一系列与操作系统交互的函数和变量。
    • 可以跨平台地处理文件、环境变量、命令行参数等
  4. os.Args 就是一个字符串类型的切片,用于保存程序启动时传入的命令行参数。
    • 命令行参数的组织
      • os.Args[0]:保存了程序本身的名字。
      • os.Args[1:]:保存了传递给程序的各个参数。

语言特性

  1. 变量与赋值
    • 隐式初始化与零值
      • 在 Go 中,如果变量未显式赋值,则根据类型自动获得零值(如字符串默认为 "",数值默认为 0)。
    • 赋值运算符
      • += 是常见的赋值运算符,用于将左边变量与右边表达式的结果相加后再赋值给左边变量。
  2. 唯一循环控制语句:for
    • Go 语言只有 for 这一种循环形式。
    • 它可以模拟 C 语言中的传统 for 循环、while 循环(例如 for condition { ... }),甚至可以写成无限循环 for { ... }
    • for 循环的三个部分(初始化;条件;后置语句)均可省略,这使得语法灵活但同时要求代码书写时遵守特定规则(如大括号位置必须正确)。

案例

// ECho1 prints its command-line arguments
package main

import (
	"fmt"
	"os"
)

func main() {
	var s, sep string
	for i :=1; i < len(os.Args); i++ {
		s += sep + os.Args[i]
		sep = " " // 分隔符
	}
	
	fmt.Println(s)
}
  • var s, sep string 声明两个字符串变量,并隐式初始化为 ""(空字符串)
  • 注意:这种字符串逐步拼接的方式在参数数量很大时效率较低(称为二次加工问题),但对于 echo 程序通常问题不大
s, sep := "", ""
for _, arg := range os,Args[1:]{
}
  • 可以用使用 range 简化传统 for 循环遍历os.Args

  • range 同时返回索引和元素。

    • 如果索引不需要,就用空标识符 _ 来丢弃,从而避免编译器因未使用变量而报错。
  • 短变量声明:

    s, sep := "", "" 是一种更简洁的变量声明方式,仅在函数内部可用

func main(){
	fmt.Println(string.Join(os.Args[1:], " "))
}
  • 使用标准库函数strings.Join 提升效率
    • strings.Join 函数接受一个字符串切片和一个分隔符,将所有元素高效连接成一个完整字符串。
    • 这种方式避免了多次字符串拼接带来的性能开销,适合处理大量数据

总结

  1. 字符串拼接的低效问题
    • 逐步拼接字符串(使用 +=)在大规模数据拼接时会产生大量中间值,性能较低。
    • 使用 strings.Join 是一种高效的解决方案,因为它在内部预先分配足够的空间,减少了不必要的内存分配和复制操作。

http://www.kler.cn/a/580773.html

相关文章:

  • HTML+JavaScript实现随机点名2.0|随机抽奖效果-demo
  • 数据库系统概论(一)详细介绍数据库与基本概念
  • Web网页制作(静态网页):千年之恋
  • Android TCP封装工具类
  • Spring Boot3.3.X整合Mybatis-Plus
  • linux centos 安装源码nginx,开放端口
  • 《DeepSeek MoE架构下,动态专家路由优化全解析》
  • [pytest] 配置
  • 游戏元宇宙崛起:AI代理IP驱动虚拟世界“无限可能”​
  • 数据清洗级可视化中,Pandasnumyp的主要作用
  • MyBatis Plus 在 Java 项目中的高效使用
  • Pygame实现射击鸭子游戏3-2
  • Leetcode 22: 括号生成
  • 【Git】撤销修改
  • Qt 初识
  • Rat工具:XiebroC2 一款国产C2工具简单使用介绍
  • 02C#基本结构篇(D1_基本语法)
  • 自然语言处理:Transformer、BERT
  • 大白话react第十六章React 与 WebGL 结合的实战项目
  • 天津大学:《深度解读DeepSeek:部署、使用、安全》