跳到主要内容

1.2-语言包管理

Go

安装

下载

文件结构

目录结构

- go.mod
- go.sum
- main.go
- database
- database
// main.go
package main
// package main 作为入口文件的标识
database

语法

  • 实现 get、post 请求
    • 简单的数据请求,能走通
    • 获取不同的字段,param、body、form
  • 实现对数据库的 CRUD
    • 简单数据模型
    • 批量添加数据
    • 复杂数据,比如嵌套以及引用
  • 实现文件上传
    • 读取文件内容进行数据的批量上传

如何 log,输出 object

如何获取数组中的某一个属性

// 定义变量
func foo(){
// 有初始值
a := 54
var b = 211
// 无初始值
var c int
c = 10
}
// 顶级作用域,必须要使用 var 进行定义
var mvp = 2323

类型

// 整数类型
int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr
byte // uint 8 别名
rune // int32 别名

// 浮点数类型
float32 、float64
// 复数类型
complex64
complex128
// bool
bool
// 字符串类型
string

输出 Printf

// fmt.Printf()
// %T 可以输出对应类型,比如
func main(){
c := false
fmt.Printf("c 的类型为 %T",c)
}

运算符

和其他语言基本保持一致

// + - * /
// % < > <= >= ==
// && ||
// += -= i++ i--

逻辑语句

判断

func main(){
a :=10
if a> 10{

}else if m:=55; a >2{ // 可以初始变量,只在括号内可用

}else {

}
}

循环

func main (){
for i :=1 ;i<5;i++ {
fmt.Println("dididi, %d", i)
}
var j = 1
for j<5 {
fmt.Println("dsa")
j++
}
}

函数声明

func sum(a int,b int)int{
return a + b
}
//
func swap(a,b int)(int,int){
return b,a
}
func sum(a int,b int, transform func(init) int){
return transform(a),transform(b)
}

数组

func main(){
// 固定长度数组
a := [5]int{1,2,3,4,5}
// 可变长度数组
a := make([]int,0) // 等价于 a := []int{1,2,3,4,5}
a = append(a,1,1,2,3)
}

Map

func main(){
// 定义一个 Map
m := map[string]int{
"a":1,
"b":3,
}
fmt.Println(m)
}

结构

type Point struct{
X int
Y int
}
// & 表示对应数据的指针地址,* 表示地址中的数据
func (p *Point) SetPoint(x , y int){
p.X = x
p.Y = y
}
func main (){
p := Point{1,2}
fmt.Println(p)
p.SetPoint(2,3)
p.X = 5
}

指针

type Point struct{
X int
Y int
}
func main (){
p := Point{1,2}
fmt.Println(p)
q := p
q.X = 5
// 此时赋值,两者不会干扰(默认按值赋值)
fmt.Println(q) // 5,2
fmt.Println(p) // 1,2

w := &p
w.X = 10
fmt.Println(*w) // 10,2
fmt.Println(p) // 10,2
}

接口

type Shape interface {
Print()
}
type Rectangle struct {}
type Triangle struct {}
func (r Rectangle) Print(){
fmt.Println("矩形")
}
func (t Triangle) Print(){
fmt.Println('三角形')
}

func main(){
var s Shape
s = Rectangle{}
s.Print() // 矩形
s = Triangle{}
s.Print() // 三角形
}

错误处理

func main(){
n, err := fmt.Println("ddd")
if err != nil {
//
}else {
// code
}
}

并发

func func1(){
time.Sleep(500* time.Milliscond)
fmt.Println("func1")
}
func func2(){
fmt.Println("func2")
}

func main(){
// go 关键字用来创建一个新的线程来执行内容
go func2()
func1()
}

Channels

func func1(ch chan string){
ch <- "函数1"
}
func func2(ch chan string){
ch <- "函数1"
}
func main(){
ch := make(chan string)
go func2(ch)
res1 := <-ch
go func1(ch)
res2 := <-ch
fmt.Println(res1,res2 )
}

参考文章

作者文章名称
软件工艺师https://www.bilibili.com/video/BV1hp4y1k7SV