golang中for循环的遍历特点、数据类型和string转换

简介: golang中for循环的遍历特点、数据类型和string转换

公众号merlinsea


for循环遍历特点

  • for-len()遍历不带中文的字符传是没有问题的【正确】


var str string = "hello,world!"
for i := 0; i < len(str); i++ {
   fmt.Printf("%c \t", str[i]) //使用到下标...
}


  • for-len()遍历带中文的字符串会出现乱码【错误】
  • 因为for-len()遍历在golang语言中是按照一个字节一个字节来取的,而一个汉字在utf8编码中是占3个字节的,所以不能用下面这个方法遍历带中文的字符串。
var str string = "hello,world!北京"
for i := 0; i < len(str); i++ {
    // 会出现乱码
   fmt.Printf("%c \t", str[i]) //使用到下标...
}


  • for-len()遍历带中文的字符串要先进行强转为[]rune切片后再遍历【正确】


var str string = "hello,world!北京"
str2 := []rune(str) // 就是把 str 转成 []rune
for i := 0; i < len(str2); i++ {
   fmt.Printf("%c \t", str2[i]) //使用到下标...
}


  • for-range遍历,既可以遍历带中文的字符串,也可以遍历不带中文的字符串【正确】
  • for-range是按照字符的方式来遍历的
str = "abc~ok上海"
for index, val := range str {
   fmt.Printf("index=%d, val=%c,val type = %T ,str[i] type = %T \n", index, val, val, str[index])
}


string和基本数据类型的相互转换

  • 基本数据类型转string
  • 思路1:fmt.Sprintf()
var num1 int = 99
var num2 float64 = 23.456
var b bool = true
var myChar byte = 'h'
var str string //空的str
//使用第一种方式来转换 fmt.Sprintf方法
str = fmt.Sprintf("%d", num1)
fmt.Printf("str type %T str=%q\n", str, str)
str = fmt.Sprintf("%f", num2)
fmt.Printf("str type %T str=%q\n", str, str)
str = fmt.Sprintf("%t", b)
fmt.Printf("str type %T str=%q\n", str, str)
str = fmt.Sprintf("%c", myChar)
fmt.Printf("str type %T str=%q\n", str, str)


思路2:使用strconv包下的Formatxxx()  

//第二种方式 strconv 函数
var num3 int = 99
var num4 float64 = 23.456
var b2 bool = true
str = strconv.FormatInt(int64(num3), 10)
fmt.Printf("str type %T str=%q\n", str, str)
// strconv.FormatFloat(num4, 'f', 10, 64)
// 说明: 'f' 格式 10:表示小数位保留10位 64 :表示这个小数是float64
str = strconv.FormatFloat(num4, 'f', 10, 64)
fmt.Printf("str type %T str=%q\n", str, str)
str = strconv.FormatBool(b2)
fmt.Printf("str type %T str=%q\n", str, str)
//strconv包中有一个函数Itoa
var num5 int64 = 4567
str = strconv.Itoa(int(num5))
fmt.Printf("str type %T str=%q\n", str, str)


  • string转基本数据类型
  • 思路:使用strconv包下的Parsexxx()
  • 注意,这里ParseInt()的返回结果是int64类型,如果我们需要使用int类型,可以在用int64接受函数返回值以后进行单独类型转换。


//演示golang中string转成基本数据类型
func main() {
   var str string = "true"
   var b bool
   // b, _ = strconv.ParseBool(str)
   // 说明
   // 1. strconv.ParseBool(str) 函数会返回两个值 (value bool, err error)
   // 2. 因为我只想获取到 value bool ,不想获取 err 所以我使用_忽略
   b, _ = strconv.ParseBool(str)
   fmt.Printf("b type %T  b=%v\n", b, b)
   var str2 string = "1234590"
   var n1 int64
   var n2 int
   n1, _ = strconv.ParseInt(str2, 10, 64)
   n2 = int(n1)
   fmt.Printf("n1 type %T  n1=%v\n", n1, n1)
   fmt.Printf("n2 type %T n2=%v\n", n2, n2)
   var str3 string = "123.456"
   var f1 float64
   f1, _ = strconv.ParseFloat(str3, 64)
   fmt.Printf("f1 type %T f1=%v\n", f1, f1)
   //注意:
   var str4 string = "hello"
   var n3 int64 = 11
   n3, err := strconv.ParseInt(str4, 10, 64)
   if err != nil {
      fmt.Printf("转化失败 err = %v\n", err.Error())
   } else {
      fmt.Printf("n3 type %T n3=%v\n", n3, n3)
   }
}


相关文章
|
5月前
|
存储 Java Go
【Golang】(3)条件判断与循环?切片和数组的关系?映射表与Map?三组关系傻傻分不清?本文带你了解基本的复杂类型与执行判断语句
在Go中,条件控制语句总共有三种if、switch、select。循环只有for,不过for可以充当while使用。如果想要了解这些知识点,初学者进入文章中来感受吧!
236 3
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
361 9
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
942 7
|
存储 Java 对象存储
String 属于基础的数据类型吗
String 在多数编程语言中被视为一种基础数据类型,但实际上它是由字符组成的序列。在一些语言中,如 Java 和 Python,String 被设计为不可变的对象,以简化编程和提高安全性。
408 6
|
Go
Golang语言数据类型分类及进制转换案例
这篇文章详细介绍了Go语言中数据类型的分类、进制转换的概念和实例,以及数字字面量语法,还涉及了原码、反码和补码的相关知识。
225 1
Golang语言数据类型分类及进制转换案例
|
存储 Go
Golang语言基础数据类型之浮点型
这篇文章介绍了Go语言中浮点型数据的概念、存储方式、表示方法以及精度问题,并通过示例代码展示了如何声明和使用浮点型变量。
407 7
|
Go
Golang语言基础数据类型之整型
这篇文章详细介绍了Go语言中的整型数据类型,包括各种有符号和无符号整数类型、特殊整型如int、uint、uintptr、rune和byte,以及如何在程序中使用这些类型和它们所占的内存空间大小。
293 7
|
Go
Golang语言基础数据类型之复数complex
这篇文章介绍了Go语言中复数(complex)数据类型的概念、表示方法和使用示例,包括complex64和complex128两种类型的复数及其在不同领域的应用场景。
524 5
|
Go
Golang语言基础数据类型之布尔值
这篇文章介绍了Go语言中布尔值(bool)数据类型的基本概念、特性和使用示例,包括布尔值的声明、逻辑运算和在程序流程控制中的应用。
310 4
|
Go
Golang语言基本数据类型默认值及字符串之间互相转换案例
这篇文章讲解了Golang语言中基本数据类型的默认值、类型转换的概述以及整型、浮点型、字符串之间的相互转换案例,包括如何将基本数据类型转换为字符串类型和字符串类型转换为基本数据类型,以及字符串与字节切片之间的转换。
295 2

推荐镜像

更多