Golang内部使用UTF-8编码实现,字符串的值使用””括起来,单引号会报错,单引号给字符使用,字符的两种类型byte和rune

  • byte,代表了一个ASCII字符

  • rune,代表了一个UTF-8字符

  • uint8和byte类型是等价的,都表示8位无符号整数;int32和rune类型是等价的,都表示32位有符号整数。所以说uint8就是byte类型,int32就是rune类型

  • 多行字符串使用反引号可以直接引用

1
2
3
4
5
    var s3 = `
    version 1.0
    services test
    image nginx:1.0
    `
  • 字符串的底层是一个byte数组,所以字符串和byte可以互转,字符串的长度也就是byte数组的长度
1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import (
    "fmt"
)

func main() {
    var s1 = "hello 中国"
    var s2 = []byte(s1)
    var s3 = []rune(s1)
    fmt.Printf("%T %v\n", s2, s2)
    fmt.Printf("%T %v\n", s3, s3)
}
  • 字符串无法修改,字符串的长度

byte类型比较重要,在golang中所有的io操作,全都是以byte为单位,比如网络io、文件io

字符串常用操作:

  • len(str):求长度
  • +Sprintf:字符串拼接
  • strings.Split:字符串分割
  • strings.Contains:判断字符串是否包含
  • strings.HasPrefixstrings.HasSuffix:字符串前缀、后缀的判断
  • strings.Index()string.LastIndex():子串出现的位置
  • strings.join(a[]string, sep string):join操作

字符串的类型转换
int转string

1
2
3
    var num1 = 123
    var s9 = strconv.Itoa(num1)
    fmt.Printf("%T %v \n", s9, s9)

string转int

1
2
    var num2, _ = strconv.Atoi(s9)
    fmt.Printf("%T %v \n", num2, num2)

float转string

1
2
3
4
5
6
7
8
9
10
    var num3 float64 = 123.456
    //FormatFloat(float数字,格式化定义,保留小数位数,浮点数位数32/64)
    var s10 = strconv.FormatFloat(num3, 'f', 2, 64)
    fmt.Printf("%T %v \n", s10, s10)
/*这里格式化定义可以是- `'f'`:固定点法,即常规的小数表示法。例如:`123.456`。
- `'e'`:科学计数法,小写字母 `'e'` 表示指数部分。例如:`1.234560e+02`。
- `'E'`:科学计数法,大写字母 `'E'` 表示指数部分。例如:`1.234560E+02`。
- `'g'`:根据数值的大小选择 `'f'` 或 `'e'` 来表示。该选项会根据数值的精度自动选择最佳表示形式。例如:`123.456` 或 `1.234560e+02`。
- `'G'`:根据数值的大小选择 `'f'` 或 `'E'` 来表示。类似于 `'g'`,但是指数部分使用大写字母 `'E'`。例如:`123.456` 或 `1.234560E+02`。
*/

bool转string

1
2
3
    var b1 = true
    var s11 = strconv.FormatBool(b1)
    fmt.Printf("%T %v \n", s10, s11)

int64转string

1
2
3
    var num4 int64 = 123456789
    var s12 = strconv.FormatInt(num4, 10) //10表示10进制
    fmt.Printf("%T %v \n", s12, s12)