Go语言基础知识1——基础语法
点击阅读更多查看文章内容
一、变量
变量定义
1.使用var关键字定义
变量名在前,变量类型在后
1 | var a,b,c bool |
可以放在函数内,也可放在包内,Go语言没有全局变量
2.使用:=定义变量
1 | a, b, c, s := 3, 4, true, "def" |
只能在函数内使用,在包内(函数外)不能使用
变量类型
bool,string
(u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr
Go语言中没有long long类型,用int64可以代替;u代表无符号数byte,rune
byte占8位;rune是字符型相当于char类型,占32位float32,float64,complex64,complex128
complex表示复数,complex64,实部虚部都是float32;complex128,实部虚部都是float64
强制类型转换
类型转换是强制的,不存在隐式转换
1 | var a,b int=3,4 |
二、常量
常量定义
使用const关键字
用法与var类似,也可使用const()集中定义常量,也可定义在包内
const不定义类型时,可作为各种类型使用,如下:
这里a,b不用强制转float
1 | const a, b = 3, 4 |
枚举类型
Go语言没有枚举关键字,通常通过const块来定义
1 | const ( |
可以通过iota实现自增值
1 | const ( |
三、条件语句
if
if的条件不需要括号
if的条件里可以赋值;赋值的变量作用域就在这个if语句里(赋值语句后加分号,再加判断语句)
1 | if contents, err := ioutil.ReadFile(filename); err != nil { |
switch
switch后可以没有表达式
case会自动break,除非使用fallthrough
case可以加多个条件
1 | func grade(score int) string { |
四、循环语句
for
for的条件里不需要括号
for的条件里可以省略初始条件,结束条件,递增表达式
整数转二进制,省略初始条件
1 | func convertToBin(n int) string { |
省略初始条件和递增条件,相当于while
1 | func main() { |
什么都不写,相当于死循环
1 | func main() { |
五、函数
与变量定义类似,函数名在前,返回值类型在后
函数可以返回多个值
函数返回多个值时可以起名字,比较适用于非常简单的函数,复杂函数体分不清楚返回值何时赋值。
多个返回值通常用在返回Error,即一个正确的返回值和一个错误
1 | func div(a, b int) (q, r int) { |
有多个返回值的函数,只取其中一个返回值时,可以把不需要的返回值使用下划线填充
1 | q, _ := div(a, b) |
函数可以作为参数
1 | func apply(op func(int, int) int, a, b int) int { |
匿名函数
1 | func main() { |
Go语言没有默认参数、可选参数、函数重载、操作符重载等
可变参数列表
传多少个参数都可以
1 | func sum(numbers ...int) int { |
六、指针
*int代表指针,与C++中的int *相反
1 | func main() { |
Go语言中指针不能运算
参数传递
Go语言只有值传递一种方式
值传递
拷贝一份变量传入到函数中指针传递
Object传递,具体传递方式根据封装类型选择
cache中不包含data,而是有一个指向data的指针,将cache拷贝一份传递到函数中,cache中包含有指向data的指针
swap函数的两种实现
1 | func swap(a, b *int) { |
Go语言基础知识1——基础语法