go语言string遍历细节

本文通过一个Go语言程序示例介绍了如何遍历含有中文字符的字符串,并展示了使用不同方法进行遍历的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * Created by Administrator on 13-12-18.
 */
package main

import (
	"fmt"
	"os"
)

func main() {

	str := "hello, 世界"
	n := len(str)

	for i := 0; i < n; i++ {
		fmt.Fprintf(os.Stdout, "%d  %v  %c\n", i, str[i], str[i])
	}

	fmt.Fprintf(os.Stdout, "---------------\n")

	for i , v := range str {
		fmt.Fprintf(os.Stdout, "%d  %v  %c\n", i, v, v)
	}

	fmt.Fprintf(os.Stdout, "---------------\n")

	rs := []rune(str)
	n = len(rs)
	for i := 0; i < n; i++ {
		fmt.Fprintf(os.Stdout, "%d  %v  %c\n", i, rs[i], rs[i])
	}

}




0  104  h
1  101  e
2  108  l
3  108  l
4  111  o
5  44  ,
6  32   
7  228  ä
8  184  ¸
9  150  –
10  231  ç
11  149  •
12  140  Œ
---------------
0  104  h
1  101  e
2  108  l
3  108  l
4  111  o
5  44  ,
6  32   
7  19990  世
10  30028  界
---------------
0  104  h
1  101  e
2  108  l
3  108  l
4  111  o
5  44  ,
6  32   
7  19990  世
8  30028  界



<think>好的,我需要回答用户关于在Go语言中如何遍历数组的问题。首先,我得回忆一下Go语言中数组的基本知识。根据提供的引用资料,特别是引用[2]和引用[3],遍历数组主要有两种方法:使用传统的for循环和使用range关键字。 用户需要具体的示例和语法,所以我应该分别介绍这两种方法,并给出相应的代码示例。记得检查引用的内容是否符合最新的Go语法,比如数组的声明和遍历方式是否有变化。根据引用[4],数组的声明是类似var arrayName [N]type,而遍历可以使用for循环或range。 另外,引用[5]提到切片遍历的两种方式,但用户问的是数组,不过方法应该是类似的。需要确保示例代码正确,比如数组的初始化方式是否正确,循环变量的使用是否恰当。 然后,我需要组织回答结构,先简单说明数组遍历的两种方法,再分别用示例代码展示。同时,引用相关的引用来源,比如引用[2]和引用[3]中的内容,说明两种方法的区别和适用场景。 可能还需要注意语法细节,比如for循环的初始化语句,使用len(arr)获取数组长度,range返回的索引和值如何处理。特别是range遍历时,如果不需要索引或值,可以用下划线忽略。 最后,确认是否要生成相关问题,根据用户的问题,可能需要补充一些常见的问题,比如性能比较、多维数组遍历等,但用户可能只需要示例,所以相关问题需要围绕遍历数组的方法展开,比如优化或应用场景。 总结步骤: 1. 介绍两种遍历方法:for循环和range。 2. 分别给出代码示例,并解释语法。 3. 引用相关资料,说明两者的区别和选择建议。 4. 确保代码格式正确,使用正确的Go语法,比如数组声明和循环结构。 5. 生成相关问题,如性能差异、多维数组遍历等。</think>在Go语言中,遍历数组主要有两种常用方法:**传统`for`循环**和**`range`关键字遍历**。以下是具体示例和语法说明: --- ### 方法1:传统`for`循环遍历 通过索引依次访问数组元素,语法如下: ```go arr := [3]int{10, 20, 30} // 定义长度为3的整型数组[^4] for i := 0; i < len(arr); i++ { fmt.Printf("索引:%d, 值:%d\n", i, arr[i]) } ``` - **`len(arr)`**:获取数组长度[^2] - **适用场景**:需要精确控制索引或对元素进行复杂操作时[^3] --- ### 方法2:`range`关键字遍历 通过`range`返回索引和值,语法更简洁: ```go arr := [...]string{"Go", "Java", "Python"} // 自动推断数组长度 for index, value := range arr { fmt.Printf("索引:%d, 值:%s\n", index, value) } ``` - 若不需要索引,可用`_`忽略:`for _, value := range arr` - **优势**:语法简洁,适用于快速遍历[^3] --- ### 两种方法对比 | 方法 | 语法复杂度 | 索引控制 | 性能 | |--------------|------------|----------|---------| | `for`循环 | 较高 | 完全控制 | 相同 | | `range`遍历 | 低 | 自动处理 | 相同 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值