3、golang入门-基本数据类型
Go 语言按类别有以下几种数据类型:
序号 | 类型和描述 |
---|---|
1 | 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 |
2 | 数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。 |
3 | 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。 |
4 | 派生类型: 包括:
|
数字类型
- 整型
整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64
其中,uint8
就是我们熟知的byte
型,int16
对应C语言中的short
型,int64
对应C语言中的long
型。
package main
import "fmt"
func main() {
// 十进制
var a int = 10
fmt.Printf("%d \n", a) //10 十进制
fmt.Printf("%b \n", a) //1010 占位符 %b:二进制
// 八进制
var b int = 077
fmt.Printf("%o \n", b) // 77 占位符%o
// 八进制
var d int = 0o77
fmt.Printf("%o \n", d) // 77
fmt.Printf("%d \n", d) // 63
// 十六进制
var c int = 0xff
fmt.Printf("%x \n", c) //ff
fmt.Printf("%X \n", c) //FF
// 十进制 有符号 8位整型 (-128 到 127)
var e int8 = 11
fmt.Printf("%o \n", e) // 13
fmt.Printf("%d \n", e) // 11
// 二进制的 101101
v1 := 0b00101101
fmt.Printf("%o \n", v1) // 55
fmt.Printf("%d \n", v1) // 45
// 八进制的 377
v2 := 0o377
fmt.Printf("%o \n", v2) // 377
fmt.Printf("%d \n", v2) // 255
// 十六进制的1 除以 2²
v3 := 0x1p-2
fmt.Printf("%f \n", v3) // 0.250000
fmt.Printf("%.2f \n", v3) // 0.25
// 十六进制的1 乘 2²
v4 := 0x1p2
fmt.Printf("%.f \n", v4) // 4
fmt.Printf("%.2f \n", v4) // 4.00
// 十六进制的8
v5 := 0x8
fmt.Printf("%o \n", v5) // 10
fmt.Printf("%d \n", v5) //8
}
参考链接:
https://www.runoob.com/go/go-data-types.html
https://www.liwenzhou.com/posts/Go/02_datatype/#autoid-1-5-0
字符串类型
字符串的常用操作
方法 | 介绍 |
---|---|
len(str) | 求长度 |
+或fmt.Sprintf | 拼接字符串 |
strings.Split | 分割 |
strings.contains | 判断是否包含 |
strings.HasPrefix,strings.HasSuffix | 前缀/后缀判断 |
strings.Index(),strings.LastIndex() | 子串出现的位置 |
strings.Join(a[]string, sep string) | join操作 |
package main
import "fmt"
var s2 string = `111
222
3333`
var s3 string = "hello world"
func studyStr() {
// str:="/Users/requalsu/Desktop/gostudy/bin/study"
fmt.Println("str:=\"/Users/requalsu/Desktop/gostudy/bin/study\"")
// str:= "c:\Code\lesson1\go.exe"
fmt.Println("str:= \"c:\\Code\\lesson1\\go.exe\"")
//第一行
//第二行
//第三行
s1 := `第一行
第二行
第三行
`
fmt.Println(s1)
fmt.Println(s2)
// s3的长度为: 11
fmt.Println("s3的长度为:", len(s3))
//fmt.Println(s3 + s2)
s4:= fmt.Sprintf("(%d,%d,’%s’,’%s’,%d,%d)", 1, 1, "1", "1", 1, 1)
fmt.Println(s4) // (1,1,’1’,’1’,1,1)
//s5:="hello:world"
//fmt.Println(s5.Split(":"))
}
func main() {
studyStr()
}
byte和rune类型
uint8
类型,或者叫 byte 型,代表了ASCII码
的一个字符。rune
类型,代表一个UTF-8字符
。
1. 遍历字符串
// 遍历字符串
func traversalString() {
s := "hello沙河"
for i := 0; i < len(s); i++ { //byte
fmt.Printf("%v(%c) ", s[i], s[i])
}
fmt.Println()
for _, r := range s { //rune
fmt.Printf("%v(%c) ", r, r)
}
fmt.Println()
/*
104(h) 101(e) 108(l) 108(l) 111(o) 230(æ) 178(²) 153() 230(æ) 178(²) 179(³)
104(h) 101(e) 108(l) 108(l) 111(o) 27801(沙) 27827(河)
*/
}
因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出中第一行的结果。
字符串底层是一个byte数组,所以可以和[]byte
类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。
2. 修改字符串
要修改字符串,需要先将其转换成[]rune
或[]byte
,完成后再转换为string
。无论哪种转换,都会重新分配内存,并复制字节数组。
func changeString() {
s1 := "big"
// 强制类型转换
byteS1 := []byte(s1) // 先将其转换成[]byte
fmt.Println(string(byteS1)) // 完成后再转换为string
byteS1[0] = 'p'
s2 := "白萝卜"
runeS2 := []rune(s2) // 先将其转换成[]rune
runeS2[0] = '红'
fmt.Println(string(runeS2))// 完成后再转换为string
}
类型转换
Go语言中只有强制类型转换,没有隐式类型转换。
func sqrtDemo() {
var a, b = 3, 4
var c int
// math.Sqrt()接收的参数是float64类型,需要强制转换
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c)
}
表:字符串格式化时常用动词及功能
动 词 功 能
%v 按值的本来值输出
%+v 在 %v 基础上,对结构体字段名和值进行展开
%#v 输出 Go 语言语法格式的值
%T 输出 Go 语言语法格式的类型和值
%% 输出 % 本体
%b 整型以二进制方式显示
%o 整型以八进制方式显示
%d 整型以十进制方式显示
%x 整型以十六进制方式显示
%X 整型以十六进制、字母大写方式显示
%U Unicode 字符
%f 浮点数
%p 指针,十六进制方式显示
————————————————
参考链接:
https://blog.csdn.net/taoshihan/article/details/122632589
posted on 2022-04-22 14:09 不出世不入世什么都不是 阅读(67) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!