Go语言学习笔记

由于公司业务需要,近期开始学习Go语言。装完环境和Ide后,理所当然的从经典的Hello World开始入手,没有细看文档,然后开局就翻车。本篇笔记不会详细记录Go的方方面面,只是看个大概的Go语言的语法,细节在实际编写中体会。

学习资料使用菜鸟教程的Go语言教程
Go by Example中文版
main.go

1
2
3
4
5
6
7
package main

import "fmt" //引入fmt包实现格式化IO

func main() {
fmt.Println("Hello, World!")
}

使用Ide创建的Go文件,定义的package为文件名,每个Go引用都应该包含一个名为main的包,所以第一个创建的文件如果不是main,记得将package的名字修改为main。和C语言一样,main函数也是必须的,作为程序的入口第一个执行。平常写Javascript和Python写的奔放习惯了,突然学习Go忘记了这两点,理所当然的翻车了。

执行go程序

1
go run main.go

注释

1
2
//当行注释
/*多行注释*/

标识符

只能使用数字字母下划线,开头不可是数字。


变量声明

  • 一般形式
    • var var1 变量类型
  • 省略类型

    • var var1 = ‘’ //根据赋予的值自动判断变量类型
  • 省略var

    • varName := ‘’ //左侧不可是已经声明过的变量, 且该种形式声明只能在函数体中出现,且该值在代码块中必须被使用
  • 多变量声明

    • var var1, var2, var3 type

    • var var1, var2,…… = value1,value2,value3

常量声明

与变量声明类似,但是不可使用 := 形式来声明常量

  • const var type = ‘’ //显式类型
  • const var = ‘’ //隐式类型

IOTA

特殊常量、常量计数器, 在每个const出现的时候被重置为0, 然后在下一个const出现之前, 每出现一次IOTA,它的值会自增1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main

import "fmt"

const (
a = iota
b
c
)

func main() {
msg := "Hello World"
fmt.Println(msg, a, b, c)
}
1
Hello World 0 1 2

算术运算符

运算符 备注
+
-
*
/
% 余数
++ 自增
自减

关系运算符

运算符 备注
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

逻辑运算符

运算符 备注
&&
丨丨
!

条件语句

1
2
3
4
5
6
7
8
9
10
11
if condition {}
else if condition {}
else {}
switch var {
case condition:
……
case condition:
……
default:
……
}

根据数据类型进入对应的语句分支进行处理。

1
2
3
4
5
6
7
8
switch var.(type){
case type:
……;
case type:
……;
default:
……;
}

数组

语法:var arrayName[size]type

1
var a[5]type

语句块中省略var创建数组

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
a := [5]int{1,2,3,4,5}
fmt.Println(a)
}

切片 slice

创建切片

1
sliceName := make([]type,size)

赋值

1
2
3
sliceName[0] = 'a'
sliceName[1] = 'b'
sliceName[2] = 'c'

动态增加数组长度

1
sliceName = sliceName.append(sliceName,'d','e')

拷贝数组

1
copy(sliceName,newSlice)

切片操作

1
2
3
sliceName[2:5]  //[c d e]
sliceName[:5] //[a b c d e]
sliceName[2:] //[c d e]

关联数组(又称字典、哈希)

1
2
3
4
5
6
m = make(map[string]string)
m["key1"] = "value1"
m["key2"] = "value2"
fmt.Println(m)
fmt.Println(m["k1"])
delete(m,"k2")
文章作者: Ryan
文章链接: https://lrybackinblack.github.io/blog/2018/03/23/Go语言学习笔记/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ryan