二、go语言数据类型(go语言圣经笔记)

基础类型

整型

int、int8、int16、int32、int64
uint、uint8、uint16、uint32、uint64
uintptr:容纳指针

浮点数

float32:6个十进制的精度
float64:15个十进制数的精度

复数

complex64、complex128对应float32和float64两种浮点数精度

布尔型

true和false

字符串

不可改变的字节序列
s[i]返回第i字节的字节值,越界会出现异常
s[i:j]:以s中[i:j)生成的新字符串,i不写就为0,j不写就为len(s)
+可以连接两个字符串构造一个新字符串

字符串编码见书
字符串、字符、字节,字符串和数值转换见书

常量

使用const声明

const pi = 3.13159

iota常量生成器

type Weekday int

// 周日为0,周一为1...,为每一天定义一个常量
// iota换成1 << iota,就是1bit指定一个名字
const(
	Sunday Weekday = iota
	Monday
	Tuesday
	Wednesday
	Thursday
	Friday
	Saturday
)

复合数据类型

数组和结构体是固定内存大小的数据结构,slice和map是动态增长的数据结构

数组

声明

var a [3]int	//3个整数的数组
var q [3]int = [3]int{1, 2, 3}	//数组初始化为123
q := [...]int{1, 2, 3}	// 省略号表示根据初始值的个数计算数组长度
r := [...]int{99: -1}	// 100个元素的数组,最后一个元素为-1,其他元素为0

dp := make([]int, n + 1)

遍历

for i, j := range arr{

}

slice

slice代表变长的序列,语法和数组很像,只是没有固定长度
声明

months := [...]string{1: "January", /*...*/, 12: "December"}	// 跳过索引0
Q2 := months[4:7]
summer := months[6:9]

使用

// 反转slice函数
func reverse(s []int) {
	for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
		s[i], s[j] = s[j], s[i]
	}
}

append
向slice追加元素

内存技巧
见书

Map

初始化

ages := make(map[string]int)	//使用make函数创建map,map写为map[K]V形式
// 指定初值
ages := map[string]int{
	"alice": 31,
	"charlie": 34,
}

访问
通过map[key]访问,查找失败返回value类型零值
不能对map的元素进行取址操作

ages["alice"] = 32

删除

// 使用内置的delete函数
delete(ages, "alice")

遍历
map中的迭代顺序不确定,不同的哈希函数实现可能导致不同的遍历顺序。实践中,遍历的顺序是随机的

for name, age := range ages{
	
}

set
go中没有提供set,可以将map的value忽略作为set使用

结构体

声明

type Employee struct{
	ID       int
	Name 	 string
	Address  string
}

var dilbert Employee

访问
通过.操作符访问,比如dilbert.Name,可以直接对每个成员赋值或者取地址。(结构体指针访问成员也是.操作符)

JSON

文本和HTML模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值