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 |