基本数据类型
go的数据类型:
整型、浮点型、字符串、数组、结构体、切片、切片、函数、map、通道(channel)
01 整型
可以分为两种:有符号和无符号
- 有符号整型:
int:32位系统,是int32,64位系统是int64,是计算最快的类型
int8:-128——127
int16:-32768——32767
int32:-2147483648——2147483647
int64:-9223372036854775808 -> 9223372036854775807
- 无符号整型
uint: 32位系统,是uint32,64位系统是uint64
uint8:0——255
uint16:0——65535
uint32:0——4294967295
uint64:0——18446744073709551615
uintptr:无符号整型,用于存放一个指针
02 浮点型
只有folat32和folat64,一般尽可能用float64,math中的函数都要求接收这个类型。
float32最大的范围:math.MaxFloat32
float64最大的范围:math.MaxFloat64
- 复数
z = a + bi
complex64:虚部和实部为32位
complex128:虚部和实部为64
03 布尔值
bool,只有true和false
注意:
其他类型不能转化为布尔值
不能用于运算
04 字符串
string 以双引号括起来的字符,如果是多行时,用反引号``括起来
转意符:/,一般用在:回车键\r、换行符\n、 制表符\t、 双引号"、 反斜杠/
- 常用方法
len 字符串的字节长度,中文占三个字节、数字和字母占一个字节
package main
import "fmt"
func main() {
name := "lynn"
message := "中国人"
fmt.Println(len(name)) // 结果是4
fmt.Println(len(message)) // 结果是9
}
字符串拼接
// 01 直接加
package main
import "fmt"
func main() {
name := "lynn"
message := " is 18"
fmt.Println(name + message) // 结果lynn is 18
}
// 02 fmt.Sprintf()
func mian() {
name := "lynn"
message := " %s is 18"
fmt.Println(fmt.Sprintf(message, name))
}
包含****strings.Contains()
结果是布尔值
package main
import fmt
func main() {
message := "lynn is 18"
fmt.Println(strings.Contains("lynn", message))
}
判断前缀,后缀
strings.HasPrefix()、strings.HasSuffix()
结果是布尔值
package main
import fmt
func main() {
message := "lynn is 18"
fmt.Println(strings.HasPrefix(message, "lynn"))
fmt.Println(strings.HasSuffix(message, "18"))
}
查看子字符串位置(索引)
strings.Index() 从左到右第一次出现的位置
strings.LastIndex() 从右向左第一次出现的索引
package main
import fmt
func main() [
message := "lynn is 18"
fmt.Println(strings.Index(message, "n"))
fmt.Println(strings.LastIndex(message, "n"))
]
查看子字符有几个
strings.Count()
package main
import "fmt"
func main() {
message := "lynn is 18"
fmt.Println(strings.Count(message, "n")) // 结果是2
}
切分
strings.Split()
package main
import "fmt"
func mian() {
message := "lynn is 18"
fmt.Println(strings.Split(message, " ")) // [lynn is 18]
}
替换
strings.Replace()
strings.ReplaceAll()
package mian
import "fmt"
func mian() {
message := "lynn 是 18"
fmt.Println(strings.Replace(message, "是", "is", 1)) // 结果是lynn is 18,注意所有参数必填
fmt.Println(strings.ReplaceAll(message, "是", "is"))
}
变大写、变小写
strings.ToLower()
strings.ToUpper()
package main
import "fmt"
func main() {
message := "lYnn 是 18"
fmt.Println(strings.ToLower(message))
fmt.Println(strings.ToUpper(message))
}
字符串重复多次
package main
import "fmt"
func main() {
message := "lynn is 18; "
fmt.Println(strings.Repeat(message, 2)) // 结果:lynn is 18; lynn is 18;
}
去除字符串的指定字符
strings.Trim()去除两头所有指定的字符
package main
import "fmt"
func main() {
message := "lynn is 18 yyy"
fmt.Println(strings.Trim(message, "ly")) // 结果是:nn is 18
}
strings.TrimSpace()去除字符串两头的空格
package main
import "fmt"
func main() {
message := " lynn is 18 "
fmt.Println(strings.TrimSpace(message, "ly"))
}
strings.TrimLeft()去除左边的指定字符
strings.TrimRight()去除右边的指定字符
package main
import "fmt"
func main() {
message := "lynn is 18"
fmt.Println(strings.TrimLeft(message, "ly"))
fmt.Println(strings.TrimRight(message, "ly"))
}
- 字符
组成字符串的元素,我们称之为字符,用单引号包裹起来。也就是单字符能用单引号
- 修改字符串中的字符
byte类型和rune类型:
byte也就是unit8,代表ASCII码的一个字符
rune代表一个UTF-8的一个字符
字符串是不可修改的,要想修改字符串,必须先把字符串转化为[]byte
类型或者[]rune
类型,改完之后再改为string类型
字符串只有数字字母时
package main
import "fmt"
func main() {
message := `lynk is 18` // 字符串只有字母和数字
a := []byte(message) // 只有字母和数字时转化为[]byte类型
a[3] = 'n' // 单引号,是一个字符
message = string(a)
fmt.Println(fmt.Sprintf( message))
}
字符串包好中文等字符时
package main
import "fmt"
func main() {
message := `lyn胖 is 18` // 字符串包含中文
a := []rune(message) // 不能用[]byte,只能用[]rune
a[3] = 'n'
message = string(a)
fmt.Println(fmt.Sprintf( message))
}