Go语言的基础语法
一、变量的定义
- var a int 或者 var a = 2 (最普遍的使用,可以自动推断类型)
- a, b, c := 3, 5, true (最简洁的使用,但只能在函数中使用,因为Go语言要求函数外的每一条语句必须以关键字开头,含义是初始化并使用)
- 定义一个变量但是没有使用到它会报错
二、内建变量的类型
- boot, string
- (u)int(与使用的平台有关,在32位系统中是4个字节,在64位系统中是8字节,使用自动推导类型初始化一个整数,默认为int), (u)int8, (u)int16, (u)int32,(u)int64, uintptr(指针)
- byte(8位), rune(字符型,与别的平台的char对应,32位)
- float32, float64, complex64, complex128
三、强制类型转换
go语言的类型转换是强制的,否则编译将不会通过。类型转化的格式是将需要转化的数用括号括起来,前面声明需要最终转换的类型。示例:
c = int(math.Sqrt(float64(a*a + b*b)))
四、常量的定义
- const filename = “abc.txt”
- const的数值在不声明类型时,可作为各种类型使用,进行简单的文本替换功能,可不用做类型转换
- go语言的常量不全部大写,因为go语言的大小写有其特殊的含义,所以常量也以普通的变量形式命名。
4.1特殊的常量:枚举类型
- 普通枚举类型:直接用const加括号即可
- 自增值枚举类型:iota,可以直接参与运算
五、条件分支语句
5.1if语句
-
示例
if v > 10 { pass; } else if v < 10 { pass; } else { pass; }
-
特殊之处:条件语句没有括号
-
可在if的条件里赋值,变量作用域就在这个if语句里
if contents, err := ioutil.ReadFile(filename); err != nil { fmt.Println(err) } else{ fmt.Printf("%s\n", contents) } //contents和err变量只在这个if的block语句中有效
5.2switch语句
-
switch会自动break,不需要每一个case后面跟break
-
switch后面可以不接表达式来使用
示例:
func grade(score int) string { swtich { case score < 60: return "F" case score <80: return "C" case score < 90: return "B" case score <=100: return "A" default: return "invalid parameter." } }
六、循环语句
for
-
for循环可以省略初始条件,省略递增条件
-
for循环后面什么表达式都没有就相当于无限循环,使用方便
示例:
for { fmt.Println("abc") }
-
for循环可以直接当作while循环来用,因此go语言中直接省略了while关键字
七、函数
go语言是函数式的编程语言,因此函数在其中占了很大的比重。
示例:
func div(a, b int) (int, int) { return a/b, a%b }
函数可以返回一个值,也可以返回多个值。当返回多个值时,可以给返回值起名字,但是这种功能仅仅限制于较简单的函数使用,否则非常不便于阅读,否则无法知道返回值是在哪一行赋值。
函数的参数、函数的返回值甚至函数体内也可以是函数。
Go语言没有花哨的λ表达式,只有简简单单的匿名函数。示例:
fmt.Println(apply( func(a int, b int)) int{ return int(math.Pow( float64(a), float64(b))) }, 3, 4)
参数
go语言没有默认参数和函数重载等,仅有可变参数列表,示例:
func sum(numbers ...int) int { //...int就代表有多个numbers s := 0 for i := range number { s += numbers[i] } return s }
八、指针
示例:
var a int = 2 var pa *int = &a *pa = 3 fmt.Println(a)
go语言的指针不能参与运算
参数传递
- Go语言只有值传递一种方式
-