type
status
date
slug
summary
tags
category
icon
password

Golang基础

Golang面向对象
  1. Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。
  1. Golangi没有类(class),Go语言的结构休struct)和其它编程语言的类(class)有同等的地位,你可以理解Gelang是基于struct来实现OOP特性的。
  1. Golang面向对象编程非常简洁,去掉了传统OOP语言的方法重载、构造函数和析构函数、隐藏的this指针。
  1. Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现
  1. eg.
  1. 内存
notion image
  1. 相互间的转换
    1. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字、个数和类型)
    2. 结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转
方法的引入
  1. 方法是作用在指定的数据类型上、和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct
  1. 方法的声明和调用格式
  1. 值传递分析
notion image
如程序员希望在方法中,改变结构体变量的值,可以通过结构体指针的方式来处理
Golang中的方法作用在指定的数据类型上的,和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct,比如intfloat32等都锕以有方法

通过OS包获取命令行参数

  • Go中的命令行参数
    • Go中main函数没有形参,所以不能直接通过main函数获取命令行参数
    • 想要获取命令行参数必须导入os包,通过os包的Args获取
    • 注意:拿到的都是字符串类型
notion image

通过flag包获取命令行参数

notion image

os与flag获取命令行参数的区别

  • 通过os包
    • 没有传递参数时报错
    • 需要严格按照代码中的顺序传递参数,否则造成数据混乱
    • 不能指定参数的名称
    • 获取的数据都是字符串类型
  • 通过flag包
    • 没有传递参数时不会报错
    • 不需要严格按照代码中的顺序传递参数,不会造成数据混乱
    • 可以指定参数的名称
    • 获取到的数据可以自己指定类型
    • Map

      概念
      1. 映射(map),Go语言中内置的一种类型,它将键值对相关联,我们可以通过键key来获取对应的值value。类似其它语言的集合
      notion image
      1. 基本语法 var map变量名 map[keytype]valuetype
        1. keyvalue的类型:bool、数字、string、指针、channel、还可以是只包含前面几个类型的接口、结构体、数组
        2. key通常为intstring类型,value通常为数字(整数、浮点数)、stringmap、结构体 PS:slicemapfunction不可以
      1. 代码
      map的各种操作
      更高级

      切片

      概念
      1. 切片(slice)是golang中一种特有的数据类型
      1. 数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在Go语言的代码里并不是特别常见。相对的切片却是随处 可见的,切片是一种建立在数组类型之上的抽象,它构建在数组之上并且提供更强大的能力和便捷
      1. 切片是对数组一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,或者是由起始和终止索引标识 的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。切片提供了一个相关数组的动态窗口。
      1. 三种创建方式
        1. 定义一个切片,然后让切片去引用一个已经创建好的数组
      切片的内存分析:
      notion image
      1. 通过make内置函数来创建切片。基本语法:var切片名[type=make(0,len,[cap])
        1. Ps.make是底层创建一个数组,对外不可见,所以不可直接操作这个数组,要用slice去间接访问每个元素,不可直接对数组进行操作/维护。
      1. 方式3:定一个切片,直接就指定具体数组,使用原理类似make的方式。
        1. 切片的遍历
        注意事项
        1. 切片定义后不可直接使用,需要引用到一个数组,或者make一个空间供切片使用。
          1. notion image
        1. 不可越界。
          1. notion image
        1. 简写方式
        1. 切片可以继续切片
          1. notion image
        1. 切片可以动态增长
        1. 数组的拷贝
         

    Gin框架预加载

    Gin环境搭建热加载配置路由配置

    遇到的问题

    notion image
    解决:

    各种请求

    Gin HTML模板渲染

    gin 模板基本语法

    • {{.}}
    输出数据 模板语法都包含在{{和}}中间,其中{{.}}中的点表示当前对象。 当我们传入一个结构体对象时,我们可以根据.来访问结构体的对应字段。
    • 注释
    • 变量

    main代码

    Gin静态文件服务

    单文件

    表单模板

    Ps.需要在上传文件的 form 表单上面需要加入 enctype="multipart/form-data"

    定义业务逻辑

    多文件

    业务逻辑

    多文件上传

    实现修改文件并上传

    Gin框架中的路由

    当项目比较大时有必要对控制器进行分组

    新建控制器

    配置路由

    控制器的继承

    6️⃣
    Gin请求处理
    7️⃣
    Gin中间件
    8️⃣
    Gin自定义Model
    9️⃣
    Gin的Cookie
    🔟
    Gin使用Sql语句
    1️⃣
    1️⃣Gorm的使用