【GO学习笔记】4、数据类型之基本数据类型

整型

  • 有符号类型:int8int16int32int64
  • 无符号类型:uint8uint16uint32uint64
  • intuint取决于操作系统,在32位系统上int=int32,而在64位系统上int=int64。因此,在实际使用中,推荐使用指定长度的变量类型。

字符类型:byte和rune类型

Go语言的字符有以下两种类型:

  1. byte类型:是uint8的别名,代表一个ASCII码。
  2. rune类型:是int32的别名,代表一个UTF-8字符,由一个或多个byte组成。例如:一个中文字符或者日文字符。

遍历字符串

字符串底层是一个byte数组,所以可以和[]byte类型相互转换,字符串的长度是byte字节的长度。

	s := "Hello 你好"
	for i := 0; i < len(s); i++ {
		fmt.Printf("%v(%c) %d ", s[i], s[i], i)
	}
	fmt.Println()
	for i, v := range s {
		fmt.Printf("%v(%c) %d ", v, v, i)
	}
	// output:
	// 72(H) 0 101(e) 1 108(l) 2 108(l) 3 111(o) 4 32( ) 5 228(ä) 6 189(½) 7 160( ) 8 229(å) 9 165(¥) 10 189(½) 11
	// 72(H) 0 101(e) 1 108(l) 2 108(l) 3 111(o) 4 32( ) 5 20320(你) 6 22909(好) 9

UTF8编码中,一个中文汉字由3~4个byte组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。

浮点型

Go语言支持的两种浮点型数据:float32float64

复数

有两种复数类型:complex64complex128
复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。

布尔型

类型关键字:bool。取值只有true和false,不允许将整型强制转换为bool型。
默认初始值为false。

字符串

类型关键字:string。Go 语言里的字符串的内部实现使用UTF-8编码。 多行字符串定义,使用反引号。如下:

	s1 := `第一行
第二行
第三行
`

常用操作

  • 求长度 :len(str) 返回字符串所占字节数
  • 字符串拼接:+,fmt.Sprintf
	// 求长度
   s1 := "hello"
   s2 := "你好" //一个中文字符占3个字节
   s3 := "おはよう"

   fmt.Printf("s1 = %s, length = %d \n", s1, len(s1)) // len = 5
   fmt.Printf("s2 = %s, length = %d \n", s2, len(s2)) // len = 6
   fmt.Printf("s3 = %s, length = %d \n", s3, len(s3)) // len = 12

   // 字符串拼接
   fmt.Printf("%s \n", s1+" = "+s2)
   s := fmt.Sprintf("%s = %s", s1, s3)
   fmt.Printf("%s \n", s)
  • 字符串分割:strings.Split
  // 字符串分割
  s := "This is a book"
  words := strings.Split(s, " ")
  fmt.Printf("%#v", words) 
  //output: []string{"This", "is", "a", "book"}
  • 判断是否包含某子字符串:strings.contains
	// 判断是否包含某特定子字符串
	s := "This is a book"
   b := strings.Contains(s, "is")
   println(b)
   // output: true
  • 判断是否包含某前缀\后缀:strings.HasPrefix,strings.HasSuffix
	// 判断是否包含某前缀/后缀
   s := "This is a book"
   bPre := strings.HasPrefix(s, "This")
   bSuf := strings.HasSuffix(s, "TEST")

   fmt.Printf("Prefix is existing:%t \n", bPre)
   fmt.Printf("Suffix is existing:%t \n", bSuf)
   // output: Prefix is existing:true
   //         Suffix is existing:false
  • 子字符串出现的位置:strings.Index(),strings.LastIndex()
	// 子字符串出现的index,index从0开始计数
  s := "This is a book"
  i := strings.Index(s, "i")
  l := strings.LastIndex(s, "i")

  fmt.Printf(" 第一个i得位置是:%d \n", i)
  fmt.Printf(" 最后一个i得位置是:%d \n", l)
  // output: 
  // 第一个i得位置是:2
  // 最后一个i得位置是:5
  • 以指定字符串连接字符串数组:strings.Join
  s := " and "
  arr := []string{"aa", "bb", "cc"}
  x := strings.Join(arr, s)
  fmt.Println(x)
  // output: aa and bb and cc

修改字符串

string存储的字符串是不可变的,要修改字符串,需要先将其转换成[]rune[]byte,修改后再转换为string。修改后的string内容保存在重新分配的内存。

	s1 := "big"
	// 强制类型转换 string -> []byte
	byteS1 := []byte(s1)
	byteS1[0] = 'P'
	fmt.Println(string(byteS1))

	s2 := "hello你好"
	// 强制类型转换 string -> []rune
	runeS2 := []rune(s2)
	runeS2[5] = '您'
	fmt.Println(string(runeS2))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值