go基本结构和基本数据类型
注释
go的注释规则和c++中一样。单行注释为//
,多行注释为/* */
。
//单行注释
/*
多行注释
多行注释
*/
常量
和c++语言一样,go中的常量定义也是使用const关键字。但是go语言和c++不同之处在于,go的类型声明在变量名之后,且可以省略类型。如:
const a int=1
const b=2
const c="3"
变量
go语言中,变量的声明方式主要有以下几种。下面创建a,b,c,d四个int类型的变量。对于每个变量名,只可使用一次。
var a=1//自动推断类型
var b int=2//声明时直接赋值
var c,d int//同时声明多个相同类型的变量
var e int//声明后再赋值
c,d,e=3,4,5
f:=6//这种方法为自动推断类型。只能用于函数中,不可用于全局变量中。
g,h:=7,8//自动推断生成多个类型
基本类型
go语言中主要有以下基本类型:
int,int32,int64,float32,float64,bool,string
和c++很大的一个区别在于,每种类型只能和本类型进行运算,即使int和int64相加也不行。想要进行加减乘除运算,必须进行类型转换。其中bool类型不可以进行加减操作。string类型只可以进行+操作,意味字符串拼接。
var a int32=1
var b int64=64
a=a+b//编译错误。invalid operation: a + b (mismatched types int32 and int64)
a=a+int32(b)//编译正确
运算符
go的运算符和其他语言基本一致。包括
+ - * / %
+= -= *= /= %=
|| && !
++ --
^ | & >> <<
* &
注意go中**没有取反运算符~。**最后一行的*代表指针取值,&代表取地址。倒数第二行的&代表二进制与操作。
类型别名
type
关键字类似于c++中的typedef,用于给类型取别名,如下面代码声明了一个int类型,名为temp,值为1的变量。
type a int
var temp a=1
strings包和strconv包
stings包中提供了很多关于操作字符串的函数,最常用的为strings.Replace(s, old, new string, n int) string
函数。该函数前三个参数都为string类型,分别为在那个字符串上进行替换,替换哪个字符串,替换为哪个字符串。最后一个参数为替换几次,当值为-1时,代表全部替换。该函数返回替换完成后的字符串。使用例子:
str:="123321123321123321123321"
str=strings.Replace(str,"1", "+", -1)
fmt.Println(str)
//最终输出为:
//+2332++2332++2332++2332+
strconv包中提供了字符串和其他类型之间转换的函数。如:strconv.Atoi()为string转int,strconv.Itoa()为int转string,以及strconv.ParseBool()等一系列Parse函数。例子:
str1:="123"
str2:="true"
int1:=1234
res1,err1:=strconv.Atoi(str1)//返回两个参数,第二个参数为nil时代表无错误
res2,err2:=strconv.ParseBool(str2)//返回两个参数,第二个参数为nil时代表无错误
res3:=strconv.Itoa(int1)//只返回一个string类型的数据,不返回错误
fmt.Println(res1,err1,reflect.TypeOf(str1))//reflect.TypeOf()函数可以查看变量的类型
fmt.Println(res2,err2,reflect.TypeOf(res2))
fmt.Println(res3,reflect.TypeOf(res3))
/*输出:
123 <nil> string
true <nil> bool
1234 string
*/
nil相当于c++中的None或NULL,表示空。对于基本数据类型,不赋值时的初始化值分别为:int,float一系列为0。bool为false。string为""
指针
go中的指针和c++中指针大致一样。例子:
a:=123
b:=&a
*b=456
fmt.Println(a)
//输出:
//456
t一系列为0。bool为false。string为""