Go语言笔记
目录
计算机软件经历了数十年的发展,形成了多种学术流派,有面向过程编程、面向对象编程、函数式编程、面向消息编程等,这些思想究竟孰优孰劣,众说纷纭。
除了OOP外,近年出现了一些小众的编程哲学,Go语言对这些思想亦有所吸收。
例如,Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。
再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。
Go 语言最主要的特性:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
特色:
- 简洁、快速、安全
- 并行、有趣、开源
- 内存管理、数组安全、编译迅速
不多bb,开始教程。
环境搭建
1.Go环境配置:
下载:https://golang.google.cn/dl/
无脑下一步,环境变量直接自动怼好。
2.测试Go环境:
创建文件 test.go 编写测试代码:
package main import "fmt" func main(){ fmt.Println("hello,World!") }
在命令行运行:run test.go 直接就成功了!
3.IDEA配置Go开发环境:
1.环境:下载Go插件,安装并重启;
2.创建项目:创建项目>go,然后选择项目目录,直到创建完成;
3.运行项目:创建如上图的go文件,启动类的package、启动方法必须为main,不然不会识别,因此无法启动;
注意:项目创建完成后需要在IDEA中配置GOPATH,在设置中搜索即可,将配置改为你的项目目录。
至此IDEA的入门项目就可以运行了。
Go的一些语法
这部分的内容主要在有java语法基础之上而写,因此部分和java类似的部分就不赘述了。
行分隔符:默认不用写分隔符,如果将多行代码写在一行时,可以用 ; 来分隔(不推荐)。
关键字: 自定义标识符不能和下面关键字、预定义标识符冲突。
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 预定义标识符:36 个
append bool byte cap close complex complex64 complex128 uint16 copy false float32 float64 imag int int8 int16 uint32 int32 int64 iota len make new nil panic uint64 println real recover string true uint uint8 uintptr
变量
变量定义:var 变量 类型
//声明单个变量 var a int //声明多个变量 var a,b int //变量定义并赋值 var a int = 20 //当然在定义时不指定类型,直做赋值,它将会自动提供类型,如: var a=1 //将默认为int //使用:=快速定义变量而不用使用var,(只允许在函数体内这样写) a:=1 //声明了一个int变量a,值=1 a,b,c,d:=1,2,3,"hhh" //合法的,类型自动推断 //注意,函数内部的变量必须被使用,否则将报错 //交换变量值 a, b = b, a
_ 表示一个只写变量,即可以被赋值,但无法读值,应用场景如下:
//某函数 func test(){ a,b,c:=1,2,3 return a,b,c } //正常的调用 a1,a2,a3 = test() //如果想忽略第一个值,只取b,c的返回值 _,a2,a3 =test()
变量指针:基本类型的变量都指向一个数据,内存中变量的存储如下图:
![]()
引用类型的则是这样:这里的aa、bb、cc其实就是指针
&变量名:返回变量在内存的地址,如&a;
常量
https://www.runoob.com/go/go-constants.html
go web 入门
package main
import (
"net/http"
)
//主程序
func main() {
Server()
}
//请求监听
func Server(){
http.HandleFunc("/",serverHandle)
_ = http.ListenAndServe(":8088", nil)
}
//请求处理函数
func serverHandle(writer http.ResponseWriter, request *http.Request) {
_, _ = writer.Write([]byte("hello"))
}
请求:localhost:8088/ 就能响应hello 了。