一小时捋完GO语法
go语言也就是golang,是谷歌发明的一种编程语言,主要特点在于能够快速开发出适应高并发的代码,主要应用在一些云原生环境,比如k8s,gitlab-runner。
本文适用于有点编程语言基础的。可以快速入个门,然后就可以愉快得阅读k8s源代码了。
开发环境
可以参考 centos下VSCode进行GO开发
基础
粗略的扫一遍基本数据结构、运算符、条件、循环、函数、类。有些GO语言特有的先不管,后面慢慢理解。能达到基本的阅读代码水平即可。
- 关键字:
package
、import
、func
、return
、var
、const
- 数据类型:
bool
、int
、string
- 运算符:
+
、-
、*
、/
、%
、++
、--
- 关系运算符:
==
、!=
、>
、<
、>=
、<=
- 逻辑运算符:
&&
、||
、!
- 位运算
a = 0011 1100``````b = 0000 1101
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
异或,相异时为1a << 2 = 1111 0000
左移a >> 2 = 0000 1111
右移
- 赋值运算,后面几个是位运算的赋值
=
、+=
、-=
、*=
、/=
、%=
、&=
、|=
、^=
、<<=
、>>=
- 条件语句:
if else
、switch
、select
- 循环:
for + break + continue + goto
- 函数格式:
func function_name( [parameter_list] ) ( [return_types_list] ) {}
- 注意可以多返回值
- 值传递、引用传递
- 结构体(相当于类)
type struct_name struct {}
- 结构体并不会把函数包含在他的定义中,只需要定义函数时,指定他的结构体就可以。
func (struct_var struct_name) function_name( [parameter_list] ) ( [return_types_list] ) {}
- 接口
type interface_name interface {}
- 如果一个结构体实现了interface中全部的方法,我们认为他实现了这个interface。
interface_name val1 = new(struct_name);val1.method1();
- 变量作用域
- 全局变量局部变量重名时,优先取局部变量
- 数组定义
var array_name = [size] type_name { var1,var2,var3 }
var array_name = [...] type_name { var1,var2,var3 }
自动判断大小
- 切片
- 类似数组,但是长度可以自由变化
slice_name := array_name[x:y]
arr从下标x
到y-1
下的元素创建为一个新的切片make([]T, length, capacity)
创建一个T类型的