Gin 快速上手

使用 Go 搭建 Web 后端,最简单的就是使用原生的 net/http 库了,下面是一个简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
"net/http"
)

func greet(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello World!")
}

func main() {
http.HandleFunc("/", greet)
http.ListenAndServe(":8080", nil)
}

运行代码之后,便会在8080端口处监听,接收客户端的请求,然后返回响应,访问 http://localhost:8080 即可以访问到对应的内容。

阅读更多

Golang 选项模式

需求

Golang不支持在函数定义的时候声明默认值,也就是说我们不能够使用类似下面的代码

1
2
3
func New(addr string="localhost",  port string="8080"){
...
}

并且也不支持函数的重载,函数名不能够重复,无法根据需要的参数数量创建不同的函数形式,也就是我们不能使用下面的方式

1
2
3
4
5
6
7
func New(addr string){
...
}
// 再次使用同样的函数名会报错
func New(addr string, port string){
...
}
阅读更多

Docker 基本使用

Docker 是一个现代化的容器技术,使用它我们可以轻松的将应用进行打包,然后移植到其他系统,不必要在不同设备上反复配置对应的环境。

下面介绍一下基本使用:

从一个Hello world开始

Docker 可以允许你在容器中运行应用程序,使用 docker run 可以在容器中运行一个应用程序。

1
docker run ubuntu:18.04 /bin/echo "Hello world"
  • run: 表示运行一个容器
  • ubuntu:18.04: 指定要运行的镜像,Docker 首先在本地主机上查找对应的镜像是否存在,如果不存在的话,那么会从远程镜像仓库 Docker Hub 中下载公共镜像,如果没有指定后面的 TAG,那么默认情况下使用的是 latest
  • /bin/echo "Hello world": 在启动的容器中执行的命令
阅读更多

HTTP 协议简介

什么是HTTP协议

HTTPHypertext Transfer Protocol 的缩写,也就是超文本标记协议,多数的 HTTP 协议运行在 TCP 上,新型的 HTTP3 协议运行在 UDP 上。

简单来说,HTTP 协议就是一个 客户端与服务端 通信的协议,客户端发送数据给服务端,那么服务端要认识这些数据表示什么,服务端返回给客户端的数据,客户端也要认识这些数据

阅读更多

揭露切片的真实面目

本节主要内容位于 runtime/slice.go, 基于 go1.16.4/amd64

创建一个切片十分简单,如下即可创建一个长度为 10 的 int 切片

1
slice := make([]int, 10)

但是具体是如何实现的呢,我们慢慢来看。

slice 结构

slice.go 中首先定义的就是 slice 结构体

1
2
3
4
5
type slice struct {
array unsafe.Pointer
len int
cap int
}

这样一看,其实 slice 也不是那么神奇,结构体中包含了一个指向实际数据的指针array,以及切片的长度 len 和切片的容量 cap

切片作为参数进行传递的时候,传递的不是整个结构体,实际上是传入了 slice 中的 array 数据指针,如果在函数内部修改了切片,那么同样会修改外部的切片。

阅读更多