学习 go 语言之基本语法
作者:
| 更新日期:最近在从 c++/python 语言转型到 go 语言,第一篇笔记是基本语法。
本文首发于公众号:天空的代码世界,微信号:tiankonguse
一、背景
最近在从 c++/python 语言转型到 go 语言,第一篇笔记是基本语法。
从语言角度看,各家语言在语法上相差都不大。
都有基本类型、变量、结构体、数组、库文件引入、循环、条件判断等。
下面我们就来简单的看看 go 语言里的这些语法吧。
二、基本类型
像其他语言一样,go 有 bool
、int
、byte
(类似于 c 的 char
)、float
、string
等。
int
的内存不确定,所以也有确定内存大小的int8 int16 int32 int64
。
当然,也有对应的无符号类型uint
。
float
有 32 位和 64 位两种。
Unicode
编码使用 新类型 rune
表示。
对于 go 语言的类型,有一个注意事项就是,没有类型隐式转化。
这个可以避免很多潜在的问题。
三、变量
默认变量需要主动声明类型,且所有变量都有默认值,不存在未定义变量。
// var 变量名列表 类型
var first, second int
当然也支持增加初始化的值。
var first, second int = 1, 2
而对于函数内的临时变量,支持类型自动推导。
first, second := 1, 2
四、函数
go 的函数不支持重载,但是可以返回多个返回值。
func next(x ,y int) (int, int){
return y, x+y
}
五、包
库函数以包的形式引入。
//定义包名
package main
//分别一个包
import "fmt"
import "math"
//批量引入包
import (
"fmt"
"math"
)
六、循环
go 语言只有 for
循环。
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
当然,for
的三个表达式可以只保留一个,就相当于while
了。
sum = 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
死循环则可以全部忽略
for {
}
七、条件语句
条件语句和往常的语言差不多。
func max(x ,y int) int {
if x < y {
return y
}else if x == y{
return x;
}else{
return y
}
}
而对于 switch
改动则较大。
比如每个case
不需要break
了,而且case
支持表达式,而不是常量。
switch os := "linux"; os {
case "darwin":
fmt.Println("OS X.")
case "l" + "inux":
fmt.Println("Linux.")
default:
fmt.Printf("%s.\n", "other")
}
你可能注意到了, switch
后面多了一个变量定义。
这个是 go 新增的语法, if
语句也支持, 相当于给条件判断这个作用域声明一个临时变量。
八、指针
go
支持指针,但是不支持对指针的运算。
这样就没有内存越界的问题了。
i, j := 42, 2701
p := &i // point to i
fmt.Println(*p) // read i through the pointer
*p = 21 // set i through the pointer
fmt.Println(i) // see the new value of i
p = &j // point to j
*p = *p / 37 // divide j through the pointer
fmt.Println(j) // see the new value of j
为什么需要指针呢?
因为对于基本类型,函数都是值传递的。
有时候想通过函数的参数返回值怎么办?传指针。
九、结构体
go 的结构体中,成员与方式是分离的。
type Vertex struct {
X, Y float64
}
func (v Vertex) sum() float64 {
return X + Y
}
可以看到,通过 type
定义一个类型,然后再函数前加一个(变量 类型)
为类型增加方法。
go 一个更巧妙的功能是如果定义了一个同名方法的接口,这个类型就能赋值给接口变量了。
这个相当于 c++
语言里的纯虚函数,从而可以实现多态。
十、最后
好了,对于 go 的初级基本知识,就记录到这里了。
记得几年前我就尝试看 go 的书籍了,可是到一个月前还没看完第一章。
而最近我算法比赛的时候,直接使用 go 写代码,当场 google 语法,结果算法题通过时,go 语言的基本语法也学得差不多了。
而且由于是直接上手实践的,各种编译不过,最终对这些语法的印象也特别深刻。
学习一个新东西,最快的入门方法就是尽快动手开始实践,边实践边学习,几个小时就入门了。
-EOF-
本文公众号:天空的代码世界
个人微信号:tiankonguse
公众号ID:tiankonguse-code
本文首发于公众号:天空的代码世界,微信号:tiankonguse
如果你想留言,可以在微信里面关注公众号进行留言。