Golang的一些基础知识和语法
Golang语言原始编译运行
- 编译 :go build 文件名.go;
- 运行 :.\文件名.exe;
- 快捷运行 :go run 文件名.go;
变量
变量:在程序运行过程中其值能够改变的量 成为变量 变量存在内存中
func main(){
//变量定义格式
var 变量名 数据类型//声明
var 变量名 数据类型 = 值//定义
变量名 := 值//自动推导类型
}
***自动推导类型 :=之间没有空格
注意:变量的类型不同不能进行计算 需要使用类型转换
格式化输入输出
func main(){
//输出
fmt.Println()//输出数据 自动换行
fmt.Print()//输出数据 不带换行
fmt.Printf()//类似C语言中输出,格式化输出数据
//%d整形 %f浮点型 %t布尔类型 %s字符串类型 %c字符类型 %p内存地址
//输入
fmt.Scan(&变量)//输入数据 &取地址符号
fmt.Scanf()//格式化输入数据
}
标识符命名规则
1、只能以字母或下划线开头
2、只能使用字母 数字 下划线
3、区分大小写
4、不能使用系统关键字
5、见名知义
格式化类型
%c 打印字符类型数据
%d 打印整型类型数据
%f 打印浮点型数据 fmt.printf("%f") 默认保留六位小数%.2f 保留两位小数 对第三位四舍五入
%s 打印字符串类型
%p 打印变量地址(指针类型)
%t 打印布尔类型数据
%T 打印数据类型 a:=3.14 float64 a:=10 int a:='a’int32
%o 打印八进制整型数据
%x %X 打印十六进制整型数据 a-f A-F
%% 打印一个%
转义字符
‘\n’ 表示换行
‘\’ 表示\
‘\0’ 表示字符串结束标志 ASCII值为0
常量
格式 const 常量名 数据类型=值 一般常量大写字母
常量的值在程序运行过程中其值不能发生改变
常在在内存中的数据区进行存储 变量是在内存中的栈区存储
系统为每一个应用程序分配了1M的内存空间存储变量和函数的信息
iota 枚举
枚举一般用作于程序的流程控制
func main(){
const(
a=iota //0
b,c=iota,iota//1
d=20//2
)
}
运算符
1、算数运算符
加【+】 减【-】乘【*】 除【/】 两个相同类型的数据相除是得到的结果类型也相同 除数不能为0
取余【%】 取余只能对整型操作 除数不能为0
自增【++】自减【–】 go语言中只有后自增后自减 不能参与表达式计算(二义性??)
2、类型转换
不同类型转换 如果讲浮点型转成整型 会丢失精度 只会保留整数部分 不会四舍五入
同一类型转换 建议将低类型转成高类型 防止数据丢失 【高位溢出】
格式: 数据类型(变量) 数据类型(表达式)
3、赋值运算符:
加等于【+=】 减等于【-=】乘等于【*=】除等于【/=】取余等于【%=】
4、比较运算符:
【>】【<】【>=】【<=】【==】【!=】
比较运算符返回值为bool类型 true false
5、逻辑运算符:
非【!】非真为假 非假为真
或【||】同假为假 其余为真
与【&&】同真为真 其余为假
6、其他运算符:
取地址【&】 对变量去地址是指针类型
取值运【*】 对指针变量取值
运算符优先级
//括号 () 结构体成员. 数组下标[]
//单目运算符
//逻辑非! 取地址& 取值* 自增++ 自减–
//双目运算符
//乘除 * / %
//加减 + -
//关系 == != > >= < <=
//逻辑 || && 注意 逻辑与高于逻辑或
//赋值 = += -= *= /= %=
分支结构
//if语法结构
func main(){
if 条件判断 {
代码语句
}else if 条件判断{
代码语句
}else if 条件判断{
代码语句
}else if 条件判断{
代码语句
}....else{
代码语句
}
}
//switch语法结构
func main(){
switch 变量或表达式{
case 值1 : 要执行的代码
case 值2 : 要执行的代码
case 值3 : 要执行的代码
...
default : 要执行的代码
}
}
循环结构
func main(){
//语法结构
for 初始变量;判断条件;修正变量{
要执行的代码(循环体)
}
//死循环
for{
要执行的代码(循环体)
}
}
break语句:结束当前循环
continue语句:结束本轮循环,然后进行循环条件判断,如果成立进行然后进入下一轮循环,否则退出循环
函数
//基本语法
func 函数名(参数){
函数体
}
//调用
函数名()
//函数不定参数列表
func 函数名(num int,arge...int) (int,int){//有返回值
//arge...int为函数不定参数列表
//其实是一个集合
//arge[0]可以打印出
return
}
for _,v := range arge{//返回编号和值
//rang可以遍历集合
//_下划线为匿名变量
}
//函数返回值
func 函数名(num int,arge...int) (int,int){}
func 函数名(num int,arge...int) int{}
//关键字defer用于延迟函数执行
//如果一个函数中有多个defer语句,他们会以LIFO(后进先出的顺序执行)
defer fmt.Println("aaa")
defer fmt.Println("bbb")
defer fmt.Println("ccc")//执行结果:ccc bbb aaa