3、基本数据类型&运算

1、整型

整数类型:
无符号与有符号类型:
有符号类型:int、int8、int16、int32、int64
无符号类型:uint、uint8、uint16、uint32、uint64
基于架构的类型:int、uint、uintptr(视其操作系统而定,比如64位操作系统,int则对应int64;uintptr的长度被设定为足够存放一个指针)
别名:byte等价于uint8,用于强调数值是一个原始数据而不是一个整数;rune等价于int32,用于表示一个Unicode码点。
注意:
即使特定情况下int是32位,与int32也需要显示转换。
有符号整数均采用补码形式表示:最高位作为符号位,值域为-2^(n-1)到2^(n-1)-1;如int8值域为-128到127;而uint8则为0到255。

2、运算符:

算术运算符:+、-、*、/、%、++、- -
%取模,结果符号与被取模数符号一样;自增与自减独占一行,作为语句,不能作为表达式。
关系运算符:==、!=、<、>、<=、>=
逻辑运算符:
&&:逻辑and运算符,true&&true=true;只要一个是false,结果就为false。
||:逻辑or运算符,只要有一个true,结果就为true
!:逻辑not运算符,!true=false
位运算符:&、|、^、<<、>>
设a=1010
b=0110
则a&b表示两者对应位上全为1则结果为1否则为0,即0010
a|b表示两者对应位上有一个1则结果为1否则为0,即1110
a^b表示两者对应位上为不同数字则结果为1否则为0,即1100
a<<2表示左移2位也即乘以2的2次方,二进制结果为101000
a>>2表示右移2位也即除以2的2次方,二进制结果为10
赋值运算符:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
均是先运算再赋值
其他运算符:
&:返回变量储存地址,&x
*:取出指针保存的变量的值*p
运算符优先级:

优先级 运算符
highest ^、!
*、/、%、<<、>>、&、&^
+、-、|、^
==、!=、<、>、<=、>=
<-(channel)
&&
lowest ||

3、浮点型

go提供了两种精度的浮点数:float32与float64
取值范围:
浮点数类型的取值范围可以在math包找到。常量math.MaxFloat32表示float32能表示的最大数值:约为3.4e38;最小值约为1.4e-45。float64的取值范围约为:4.9e-324到1.8e308。
精度:
float32可以提供大约6个精度,float64大约可以提供15个精度。

4、复数

go提供了两种复数类型:complex64和complex128,分别对应float32与float64两种浮点数。
构造:
内置的complex函数用于构建复数:

var x complex128=complex(1,2)//1+2i

5、布尔型

布尔型的值只有两个:true和false。if和for条件部分都是布尔型的值。

6、字符串

字符串本质上就是一个不可改变的定长字节序列数组。go语言中的字符采用UTF-8编码,如果字符为ASCII码则占用一个字节,其他根据需要占用2-4个字节,以最大限度地减少空间的占用。
字符串的截断与连接:
内置的len函数可以返回一个字符串中的字节数目(非字符数目),索引s[i]返回第i个字节的字节值,0 <= i < en(s),第i个字节并不一定是字符串的第i个字符,某些非ACSII字符需要2个及以上的字节。

//字符串的截断会生成一个新的字符串,s[i:j]基于原始的s字符串的第i个字节开始到第j个字节生成一个新字符串,不含j。
//如果i,j被忽略,则用0作为开始位置,len(s)作为结束的位置
s := "hello, world"
fmt.Println(s[0:5])//hello
fmt.Println(s[:5])//hello
fmt.Println(s[7:])//world
fmt.Println(s[:])//hello,world
//字符串的连接会生成一个新的字符串,使用+号连接

解释型字符串面值与原生字符串面值:
解释型字符串面值:将字符序列包含在双引号里即可。
常见转义方式:
\a——响铃
\b——退格
\f——换页
\n——换行
\r——回车
\t——制表符
\v——垂直制表符
\’——单引号
\"——双引号
\\——反斜杠
可以通过十六进制或八进制转义在字符串面值包含任意的字节。十六进制的转义形式:\xhh(hh表示十六进制数字)。八进制转义形式:\ooo,包含三个八进制的数字(0-7),不能超过\377(即十进制的255)
原生字符串面值:
使用反引号代替双引号,在原始字符串中没有转义操作;包含换行等操作全是字面意思。由于正则表达式包含很多反斜杠,此时应用原生字符串会比较方便。
字符串重要方法:
字符串处理的四个重要包:bytes、strings、strconv、unicode。
bytes包提供了很多功能类似的函数,但是针对和字符串有着同样结构的[]bytes类型。字符串时只读的,逐步构建字符串会导致很多分配和复制,在此情况下,使用bytes.Buffer类型就更有效。
strings包提供了诸如字符串的查询、替换、比较、截断、拆分、合并等功能。
strconv包提供了布尔型、整数型、浮点数、对应字符串的相互转化,还提供了双引号转义相关的转换。
unicode包提供了IsDigit、IsLetter、IsUpper和IsLower等类似功能,它们用于给字符分类。

//字符串一旦创建就不可修改,而一个字节的slice的元素可以自由修改
s :="abc"
a :=[]byte(s)//产生一个新字节数组保存源字符串数据的副本
s2 :=string(a)//引用副本再次构造一个副本,a即使被修改,s字符串也不会改变
//bytes包提供了Buffer类型用于字节slice的缓存。一个Buffer一开始是空的,即使是零值也有效,不需要人工初始化,可以动态增长
func intsToString(values []int) string{
	var buf bytes.Buffer
	buf.WriteByte('[')//writeByte方法对于ACSII码字符更有效,对于中文用WriteRune则更加有效
	for i,v:=range values{
	if i>0{
	buf.WriteString(",")
	}
	fmt.Fprintf(&buf,"%d",v)
	}
	buf.WriteByte(']')
	return buf.String()
}
func main(){
	fmt.Println(intsToString([]int{1,2,3}))
}
//常见函数之strings,bytes中也有类似的包,字符串参数被字节slice类型替代
//字符串替换,Replace用于将字符串str中的前n个字符串old替换为字符串new,并返回一个新的字符串,如果n = -1则替换所有字符串 old 为字符串 new
func Replace(str, old, new, n) string
//重复count次字符串s并返回一个新的字符串
func Repeat(s, count int) string
//修剪字符串可以使用strings.TrimSpace(s)来剔除字符串开头和结尾的空白符号;如果你想要剔除指定字符,则可以使用 strings.Trim(s, "a") 来将开头和结尾的a去除掉。该函数的第二个参数可以包含任何字符,如果你只想剔除开头或者结尾的字符串,则可以使用TrimLeft或者TrimRight来实现
func ToLower(s) string//将字符串中的 Unicode 字符全部转换为相应的小写字符
func ToUpper(s) string//将字符串中的 Unicode 字符全部转换为相应的大写字符
func Contains(s,substr string) bool//判断字符串s是否包含substr
func Count(s,sep string) int//用于计算字符串sep在字符串s中出现的非重叠次数
func Fields(s string) []string//将会利用1个或多个空白符号来作为动态长度的分隔符将字符串分割成若干小块,并返回一个slice,如果字符串只包含空白符号,则返回一个长度为0的slice
func HasPrefix(s,prefix string) bool//判断字符串s是否以prefix开头
func HasSuffix(s, suffix string) bool//判断字符串s是否以suffix结尾
func Index(s,sep string) int//返回字符串str在字符串s中的索引(str的第一个字符的索引),-1 表示字符串s不包含字符串 str
func Join(a []string,sep string) string//用于将元素类型为string的slice使用分割符号来拼接组成一个字符串
//与字符串相关的类型转换都是通过strconv包实现的
//从数字类型转换到字符串
strconv.Itoa(i int) string //返回数字 i 所表示的字符串类型的十进制数
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string //将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 'b'、'e'、'f' 或 'g'),prec 表示精度,bitSize 则使用 32 表示 float32,用 64 表示 float64。
//从字符串类型转换为数字类型
strconv.Atoi(s string) (i int, err error) //将字符串转换为 int 型
strconv.ParseFloat(s string, bitSize int) (f float64, err error) //将字符串转换为 float64 型

7、Printf转换格式

%d %x %o %b %T
int变量 16进制int 8进制int 2进制int 打印变量类型
%f %g &e %t %%
float32类型 float64类型 科学计数法 布尔变量 字符型百分比标志
%c %s %q %v %p
rune,Unicode字符类型 string string或者rune类型 以易读形式打印任意变量 指针

猜你喜欢

转载自blog.csdn.net/ao__ao/article/details/83475921