【go】总结笔记01

前言:有PHP基础,扩展第二语言,对go的高性能很感兴趣
达成目标:

  • 语法糖
  • go linux 安装
  • go run 运行程序
  • git 项目版本控制,实现服务端跑起代码
  • fmt 包的基本使用
  • http 包的基本使用
  • air 自动重载代码
  • godoc 安装使用

go 安装

官网:golang.org (需要翻墙)
谷歌:https://golang.google.cn/dl/ (需要翻墙)
国内下载:https://studygolang.com/dl

$ wget https://studygolang.com/dl/golang/go1.19.3.linux-amd64.tar.gz
$ tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz
$ vim /etc/profile      # 添加到环境变量
# 添加并保存
export GOROOT=/usr/local/go
export GOPATH=/www/wwwroot/gopath
export PATH=${GOROOT}/bin:$PATH
export PATH=${GOPATH}/bin:$PATH

# 使环境变量生效
# 此处报错,原因:fish命令行内source异常,退出fish运行正常
$ source /etc/profile 

#  验证是否安装成功
$ go version
go version go1.19.3 linux/amd64

go环境配置

# 开启go modules
$ go env -w GO111MODULE=on
# 配置国内镜像
$ go env -w GOPROXY=https://goproxy.cn,direct

hello world

package main

import "fmt"

func main() {
	fmt.Println("hello world")
}
# 运行go
$ go run main.go

基于go mod的依赖管理

* go.mod 类似于 PHP 中的 composer.json ,而 go.sum 则是 composer.lock
* go.mod文件中的indirect 字样,标明这个依赖包还未被使用
* 默认源码包存放于 $GOPATH/pkg/mod


# 安装依赖
go get package-name

# 更新依赖版本
go get -u package-name@v1.11

# 升级最新版本
go get -u package-name

# 整理依赖,执行时会把未使用的 module 移除掉
go mod tidy

# 初始化
go mod init model-name

# 查看现有的依赖结构
go mod graph

# 下载gomod文件中指明的所有依赖
go mod download

# 编辑go.mod文件 
go mod edit

# 导出项目所有的依赖到verdor
go mod verdor

# 校验一个模块是否被篡改过
go mod verify

# 查看为什么需要依赖某模块
go mod why

# 拉取所有的依赖,如果之前用gopath 或者go vendor,只需要执行初始化
go build ./...

# 清空 Go Modules 缓存
go clean -modcache

air 自动加载

  • 解决每次修改都要重新编译的问题
  • air 需要项目是 Go Modules 才能工作
  • tmp加入.gitignore
# 安装
$ env GO111MODULE=on  go install github.com/cosmtrek/air@latest // go version 1.19
$ air -v
Unknown command 'air' # gopath 没有添加入环境变量

# 使用
$ air 
  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ , built with Go 

mkdir /www/wwwroot/gopath/src/go-blog/tmp
watching .
!exclude tmp
building...
running...

godoc 安装与使用

$ env GO111MODULE=on  go install golang.org/x/tools/cmd/godoc@latest
$  ./godoc -http=:6060 # 服务器需要开放端口

在浏览器打开 http://localhost:6060

http 基本用法

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", handlerFunc)
	// 用以监听本地 3000 端口以提供服务
	http.ListenAndServe(":3000", nil)
}

func handlerFunc(w http.ResponseWriter, r *http.Request) {
	// 设置header头
	w.Header().Set("Content-Type ", "text/html;charset=utf8")
	// 获取path
	path := r.URL.Path

	if path == "/" {
		fmt.Fprint(w, "<h1>this is go blog2</h1>")
	} else if path == "/about" {
		fmt.Fprint(w, "<h1>this is go about</h1>")
	} else {
		w.WriteHeader(http.StatusNotFound)
		fmt.Fprint(w, "<h1>404</h1>")
	}

	fmt.Fprint(w, "请求路径为:"+path)
}

两个http type:

ResponseWriter

http.ResponseWriter 是返回用户的响应,一般用 w 作为简写

* w.WriteHeader(http.StatusNotFound) 返回状态码 
* w.Header().Set("name", "my name is smallsoup") 设置返回标头

Request

http.Request 是用户的请求信息,一般用 r 作为简写

* r.URL.Query() 获取用户参数
* r.Header.Get("User-Agent") 获取客户端信息 
* r.ParseForm() 由 http 包提供,从请求中解析请求参数,必须是执行完这段代码,后面 r.PostForm 和 r.Form 才能读取到数据,否则为空数组
* r.Form:存储了 post、put 和 get 参数,在使用之前需要调用 ParseForm 方法,输出map
* r.PostForm:存储了 post、put 参数,在使用之前需要调用 ParseForm 方法,输出map,r.PostForm.Get("title")获取字段
* r.FormValue("title"), r.PostFormValue("content") 如不想获取所有的请求内容,而是逐个获取的话,这也是比较常见的操作,无需使用 r.ParseForm() 可直接使用

题外话:新手入门,多有不解,理解有偏差请不吝指教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值