当前位置: 首页 > 工具软件 > go_bench > 使用案例 >

Go 笔记

耿学义
2023-12-01

下载go

https://golang.google.cn/dl/

加速go mod

$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct

[Go]解决使用cgo时 exec:“gcc” executable file not found in %PATH%报错问题

中文文档

phper 过度 golang php2go

golang23种设计模式

json转化结构json-to-go/

开始

初始化模块,为 go get 做准备

go mod init

自动加载

Air

linux:

go env -w  GOPROXY=https://goproxy.cn
GO111MODULE=on 

 go get -u github.com/cosmtrek/air

windows

github.com/cosmtrek/air/releases 下载exe 到go 的bin 目录

go install github.com/cosmtrek/air@latest

执行: air

fmt 库

保留两位小数

fmt.Sprintf("%.2f", 180.567)

http 库

重定向

http.Redirect(w,r,"http://baidu.com",http.StatusMovedPermanently)

获取表单值

r.PostFormValue("title")

gorilla/mux 路由库

github.com/gorilla/mux

用法

	//中间件方法
	func forceHTMLMiddleware(next http.Handler) http.Handler {
		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			// 1. 设置标头
			w.Header().Set("Content-Type", "text/html; charset=utf-8")
			// 2. 继续处理请求
			next.ServeHTTP(w, r)
		})
	}

	 //方法包括获取参数
	func articlesShowHandler(w http.ResponseWriter, r *http.Request) {
		vars := mux.Vars(r)
		id := vars["id"]
		fmt.Fprint(w, "文章 ID:"+id)
	}

	//构造对象
	router := mux.NewRouter()

	//匹配路由
	router.HandleFunc("/articles/{id:[0-9]+}", articlesShowHandler).Methods("GET").Name("articles.show")

  //获取并匹配 url  
    articleURL, _ := router.Get("articles.show").URL("id", "23")
	
	//处理中间件
	router.Use(forceHTMLMiddleware)
	// 处理404页面
	router.NotFoundHandler = http.HandlerFunc(notFoundHandler)

   http.ListenAndServe(":3000", router)

strings 字符库

修剪末尾的字符串,比如要删除字符串末尾的逗号

 strings.TrimSuffix("1,1,2,", ",")

判断字符串长度len可以判断,但是发现判断中文会多出来一个中文三个字符串,可以用 utf8.RuneCountInString 判断中文

替换 func Replace(s, old, new string, n int) string
例子: strings.Replace(name, ".", "/", -1) n 是允许替换的次数,设置为 -1 意味着替换所有。

template 库

赋值 view

		tmpl, err := template.ParseFiles("resources/views/articles/create.gohtml")
		if err != nil {
			panic(err)
		}
		data:=ArticlesFormData{
			Title:  "",
			Body:   "",
			URL:    storeURL,
			Errors: nil,
		}
		tmpl.Execute(w, data)

	
	//判断
{{if pipeline}} T1 {{end}}

{{if pipeline}} T1 {{else}} T0 {{end}}

{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}

//循环
<ul>
        {{ range $key, $article := . }}
            <li><a href=""><strong>{{ $article.ID }}</strong>: {{ $article.Title }}</a></li>
        {{ end }}
    </ul>

字符串转化

把int64 转化为字符串

fmt.Fprint(w, "插入成功,ID 为"+strconv.FormatInt(lastInsertID, 10))

数组循环

数组构造与循环

协程

名称说明
Go并发:利用sync.WaitGroup实现协程同步https://blog.csdn.net/u011304970/article/details/72722044
Go sync.WaitGroup的用法https://blog.csdn.net/u013474436/article/details/88749749
Golang 之协程详解https://www.cnblogs.com/liang1101/p/7285955.html
协程并发和锁的关系https://www.jb51.net/article/202281.htm
浅析runtime包中的三个方法Gosched、Goexit、GOMAXPROCShttps://blog.51cto.com/u_12732447/2432726

文件操作

return ioutil.WriteFile(filename, []byte(data), mode)

json

json 转化问题看这

结构体转化为json

jsons, errs := json.Marshal(res)

fmt.Println(string(jsons))

json转化为结构

errs = json.Unmarshal(jsons, &res2)
	if errs != nil {
		fmt.Println("json unmarshal error:", errs)
	}

Go jwt

https://www.jianshu.com/p/39b584b47260

 类似资料: