3、golang入门-基本数据类型

Go 语言按类别有以下几种数据类型:

序号 类型和描述
1 布尔型
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2 数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
3 字符串类型:
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4 派生类型:
包括:
  • (a) 指针类型(Pointer)
  • (b) 数组类型
  • (c) 结构化类型(struct)
  • (d) Channel 类型
  • (e) 函数类型
  • (f) 切片类型
  • (g) 接口类型(interface)
  • (h) Map 类型

数字类型

  1. 整型

整型分为以下两个大类: 按长度分为: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类型

  1. uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
  2. 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   不出世不入世什么都不是  阅读(67)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示