Golang基础
type
Post
status
Published
date
Mar 13, 2023
slug
golang
summary
tags
category
Golang
icon
password
Golang基础
Golang面向对象
- Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。
- Golangi没有类(class),Go语言的结构休struct)和其它编程语言的类(class)有同等的地位,你可以理解Gelang是基于struct来实现OOP特性的。
- Golang面向对象编程非常简洁,去掉了传统OOP语言的方法重载、构造函数和析构函数、隐藏的this指针。
- Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现
- eg.
- 内存
- 相互间的转换
- 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字、个数和类型)
- 结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转
方法的引入
- 方法是作用在指定的数据类型上、和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct
- 方法的声明和调用格式
- 值传递分析
如程序员希望在方法中,改变结构体变量的值,可以通过结构体指针的方式来处理
Golang中的方法作用在指定的数据类型上的,和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct,比如intfloat32等都锕以有方法
通过OS包获取命令行参数
- Go中的命令行参数
- Go中main函数没有形参,所以不能直接通过main函数获取命令行参数
- 想要获取命令行参数必须导入os包,通过os包的Args获取
- 注意:拿到的都是
字符串类型
通过flag包获取命令行参数
os与flag获取命令行参数的区别
- 通过os包
- 没有传递参数时
会
报错 需要
严格按照代码中的顺序传递参数,否则会
造成数据混乱不能
指定参数的名称- 获取的数据都是
字符串
类型
- 通过flag包
- 没有传递参数时
不会
报错 不需要
严格按照代码中的顺序传递参数,不会
造成数据混乱可以
指定参数的名称- 获取到的数据可以自己指定类型
- 映射(map),Go语言中内置的一种类型,它将键值对相关联,我们可以通过键key来获取对应的值value。类似其它语言的集合
- 基本语法 var map变量名 map[keytype]valuetype
key
、value
的类型:bool
、数字、string
、指针、channel
、还可以是只包含前面几个类型的接口、结构体、数组- key通常为
int
、string
类型,value
通常为数字(整数、浮点数)、string
、map
、结构体 PS:slice
、map
、function
不可以 - 代码
- 切片(slice)是
golang
中一种特有的数据类型 - 数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在Go语言的代码里并不是特别常见。相对的切片却是随处 可见的,切片是一种建立在数组类型之上的抽象,它构建在数组之上并且提供更强大的能力和便捷
- 切片是对数组一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,或者是由起始和终止索引标识 的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。
- 三种创建方式
- 定义一个切片,然后让切片去引用一个已经创建好的数组
- 通过make内置函数来创建切片。基本语法:var切片名[type=make(0,len,[cap])
- 方式3:定一个切片,直接就指定具体数组,使用原理类似make的方式。
- 切片的遍历
- 切片定义后不可直接使用,需要引用到一个数组,或者make一个空间供切片使用。
- 不可越界。
- 简写方式
- 切片可以继续切片
- 切片可以动态增长
- 数组的拷贝
Map
概念
map的各种操作
更高级
切片
概念
切片的内存分析:
Ps.make是底层创建一个数组,对外不可见,所以不可直接操作这个数组,要用slice去间接访问每个元素,不可直接对数组进行操作/维护。
注意事项
Gin框架预加载
Gin环境搭建热加载配置路由配置
参考快速入门
遇到的问题
解决:
各种请求
Gin HTML模板渲染
gin 模板基本语法
- {{.}}
输出数据 模板语法都包含在{{和}}中间,其中{{.}}中的点表示当前对象。 当我们传入一个结构体对象时,我们可以根据.来访问结构体的对应字段。
- 注释
- 变量
main代码
Gin静态文件服务
单文件
表单模板
Ps.需要在上传文件的 form 表单上面需要加入 enctype="multipart/form-data"
定义业务逻辑
多文件
业务逻辑
多文件上传
实现修改文件并上传
Gin框架中的路由
当项目比较大时有必要对控制器进行分组
新建控制器
配置路由
控制器的继承
Gin请求处理Gin中间件Gin自定义ModelGin的CookieGin使用Sql语句1️⃣Gorm的使用Loading...