最近并行学习计算机语言python和Go,同样写学习笔记来记录一下我的学习历程。还是使用菜鸟(我)教程来引导我进入的入坑之旅。
计算机软件经历了数十年的发展,形成了多种学术流派,有面向过程编程、面向对象编程、函数式编程、面向消息编程等,这些思想究竟孰优孰劣,众说纷纭。
除了OOP外,近年出现了一些小众的编程哲学,Go语言对这些思想亦有所吸收。例如,Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。
Go 语言最主要的特性:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
我选择用GoLand作为编写Go语言的IDE,下载和破解方法,亲测有效。配置完之后用下面这段程序测试一下,正常输出Hello,world即完成了环境的搭建。
package main
import "fmt"
func main() {//注意{ 不能在单独的行上
fmt.Println("Hello,world")
}
函数执行可以在这个IDE或者是CMD。
IDE里面的话我觉得会更好,它的界面如下。
个人觉得Go语言和面向对象语言诸如Java、Python很像呀,是因为它本身就是这类语言吧。
package main定义了包名,它表示一个可独立执行的程序,每个Go应用程序都包含一个名为 main的包。
import “fmt” 引入了包,告诉Go编译器该应用程序使用fmt包(包括函数等),fmt包规定了格式化输入输出的函数 。
它可以同时引入,例如下面的例子。
import (
"fmt"
"math"
"os"
"runtime"
"time"
)
func main() 效果如void main(),它是程序开始的地方(梦开始的地方)。如果有init()函数则先执行它。(就是说它的初始化程序和main是独立的程序啦?)
下面的fmt.Println就是调用包中的格式化输出函数Println()(是不是和arduino很像捏!)
Go中变量声明是先写变量名,再写类型名。详细的变量列表
true/false
e.g. var fate bool = false(记住不需要加分号哦)
整型int、uint8、uint16、int16等,浮点型float32和float64,复数complex64和
complex128,其中位的运算采用补码。
e.g. var num int = 20190705
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
字符串连接:两个字符串直接相加 e.g. “a”+“b”
var [变量名] [变量类型] //变量无初始化自动分配为默认值,
数值类型为0,
布尔类型为false,
字符串类型为空字符串""。
以下类型为nil:
var a *intvar a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
多变量声明:
var [arg1],[arg2],[arg3] [type]
[arg1],[arg2],[arg3] = [value1],[value2],[value3]
var [变量名] = [已经声明了的变量名]
类似于C++的auto(吗)
多变量声明:
var [arg1],[arg2],[arg3] = [value1],[value2],[value3]
var(
[arg1] [type1]
[arg2] [type2]
)
使用 ‘:=’
e.g.
[新变量名] := [value]
[已声明的变量名],[新变量名] := [value1],[value2]
Go程序由多个标记组成,可以是关键字(key word)、标识符(identifier)、常量(constant)、字符串(character string)、符号(symbol)组成。例如上面的程序fmt.Println(“Hello,world”)就是由6个标记组成。
Go程序行与行之间不需要像C语言那样用分号’;'来区别句子的结束,这些工作都有Go编译器完成。
注释方式和C相似,分别有
/* 多行注释 */
//单行注释
Go语言中int、float、bool和string等基本类型属于值类型,它们直接指向存在内存中的值。
所以Go语言的赋值操作,就是在内存中将值进行拷贝。而引用类型存储的是它的值所在的地址,或内存地址中第一个字的位置,该内存地址成为指针。
定义了标识符const的变量不会被改变,类型可以是布尔型、数字型(整数型、浮点型和复数)和字符串型的任一种。
它的使用示例如下。
const arg1,arg2 = value1,value2//多个变量同时声明,类型和valuex一一对应
const(
apple = 1
banana = 2
cheey = 3
)//枚举
另外还有一个特殊的常量,它的标识符为iota,它是可以被编译器修改的常量,它相当于一个const语句块的行索引,它可以用作枚举。
const(
a = iota//a=0
b = iota//b=1
)
const(
c = itoa//c=0
d//d=1
e = itoa//e=2
f = "hello"//f="hello"
g//g="hello",当变量没被赋值就按照上一个变量被赋的值来赋值
)