
Go
go语言学习笔记
书香水墨
积跬步,行千里。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
go mod使用
一、简介一个类似于java maven的包管理工具使用时需要设置一下go环境变量go env -w GOBIN=D:\Users\go\bingo env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct // 使用七牛云的go env -w GOSUMDB=offGO111MODULE 有三个值:off, on和auto(默认值)。GO111MODULE=off,go命令行将不会支持module功能,寻找依赖原创 2021-07-13 15:10:15 · 255 阅读 · 0 评论 -
Go语言ajax请求返回json数据
一.JSON简介轻量级数据传输格式总体上分为两种:一种是JSONObject(json对象){"key":value,"key":value}一种是JSONArrayP(json数组),包含多个JSONObject[{"key":"value"},{"key":"value"}]key是string类型,value可以是string类型(值被双引号包含),也可以是数值或布尔类型等,也可以是JSONObject类型或JSONArray类型可以使用Go语言标准库中 e原创 2021-07-12 08:35:24 · 1359 阅读 · 0 评论 -
Go语言文件下载
一.文件下载简介文件下载总体步骤客户端向服务端发起请求,请求参数包含要下载文件的名称服务器接收到客户端请求后把文件设置到响应对象中,响应给客户端浏览器载时需要设置的响应头信息Content-Type: 内容MIME类型application/octet-stream 任意类型Content-Disposition:客户端对内容的操作方式inline 默认值,表示浏览器能解析就解析,不能解析下载attachment;filename=下载时显示的文件名 ,客户端浏览器恒下载原创 2021-07-12 08:35:06 · 2464 阅读 · 0 评论 -
Go语言文件上传
一.文件上传文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进制流进行解析HTML表单(form)enctype(Encode Type)属性控制表单在提交数据到服务器时数据的编码类型.enctype=”application/x-www-form-urlencoded” 默认值,表单数据会被编码为名称/值形式enctype=”multipart/form-data” 编码成消息,每个控件对应消息的一部分.请求方式必须是postenctype=”text/plain” 纯文本原创 2021-07-12 08:34:49 · 2700 阅读 · 0 评论 -
Go语言服务器端正则验证
一. 正则表达式正则表达式:(Regular Expression)正则表达式就正则字符和普通字符组成字符串的规则正则内容如下单字符: . 任意字符(标志s==true时还包括换行符) [xyz] 字符族 [^xyz] 反向字符族 \d Perl预定义字符族 \D 反向Perl预定义字符族 [:原创 2021-07-12 08:34:28 · 556 阅读 · 0 评论 -
Go语言模版嵌套
一.模版嵌套在实际项目中经常出现页面复用的情况,例如:整个网站的头部信息和底部信息复用可以使用动作{{template “模版名称”}}引用模版引用的模版必须在HTML中定义这个模版{{define "名称"}}html{{end}}执行主模版时也要给主模版一个名称,执行时调用的是ExecuteTemplate()方法{{define "layout"}}<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E原创 2021-07-12 08:33:45 · 406 阅读 · 0 评论 -
Go语言创建和获取Cookie
一.Cookie 简介Cookie就是客户端存储技术.以键值对的形式存在在B/S架构中,服务器端产生Cookie响应给客户端,浏览器接收后把Cookie存在在特定的文件夹中,以后每次请求浏览器会把Cookie内容放入到请求中二.Go语言对Cookie的支持在net/http包下提供了Cookie结构体Name设置Cookie的名称Value 表示Cookie的值Path 有效范围Domain 可访问Cookie 的域Expires 过期时间MaxAge 最大存活时间,单位秒H原创 2021-07-12 08:33:58 · 2486 阅读 · 1 评论 -
Go语言Cookie常用设置
一.HttpOnlyHttpOnly:控制Cookie的内容是否可以被JavaScript访问到。通过设置HttpOnly为true时防止XSS攻击防御手段之一默认HttpOnly为false,表示客户端可以通过js获取在项目中导入jquery.cookie.js库,使用jquery获取客户端Cookie内容HTML代码如下<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"原创 2021-07-12 08:34:09 · 788 阅读 · 0 评论 -
Go语言restful
一.Restful风格请求在目前所学内容中每个请求都需要绑定一个HandlerFunc,而在实际项目中会有很多URL,且可能出现满足特定规律的URL,例如: /sxt/it和/sxt/baizhan都是以/sxt/开头.且如果这两个URL里面代码也差不多时,写两个Func就属于代码冗余了.可以使用restful风格把满足特定格式url和功能类似的代码提入到一个func中实现代码复用.二.Go语言的多路复用器在http包中提供了ServeMux实现多路复用器,它会对URL进行解析,然后重定向到正原创 2021-07-12 08:35:38 · 458 阅读 · 2 评论 -
Go语言Docker简介_安装
一. Docker简介Docker是开源的应用容器引擎.托管在Github上Docker使用Go语言进行开发,采用Apach2.0协议Docker最开始基于Linux的LXC(Linux Container)技术,在此基础上进一步封装.所以Docker只能运行在Linux.后来推出了Mac版和Window版本在搜索Docker时,Docker官网显示了Docker - Build, Ship, and Run Any App, Anywhere说明Docker致力于让开发者在任何位置构建、运输、运原创 2021-07-12 08:33:07 · 579 阅读 · 0 评论 -
Go语言部署goweb到docker
一. 编写Go web项目使用之前的模版显示index.html即可package mainimport ( "net/http" "html/template")func welcome(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("view/index.html") t.Execute(w, nil)}func main() { s := http.Server{Addr: "原创 2021-07-12 08:33:32 · 177 阅读 · 0 评论 -
Go语言action
一. ActionGo语言官方文档给出action(动作)的列表。"Arguments"和"pipelines"代表数据的执行结果{{/* a comment */}} 注释,执行时会忽略。可以多行。注释不能嵌套,并且必须紧贴分界符始止,就像这里表示的一样。{{pipeline}} pipeline的值的默认文本表示会被拷贝到输出里。{{if pipeline}} T1 {{end}} 如果pipeline的值为empty,不产生输出,否则输出T1执行结果。不改变dot的原创 2021-07-11 18:12:12 · 461 阅读 · 0 评论 -
Go语言在模版中调用函数
一.调用方法在模版中调用函数时,如果是无参函数直接调用函数名即可,没有函数的括号例如在go源码中时间变量.Year()在模版中{{时间.Year}}在模版中调用有参函数时参数和函数名称之间有空格,参数和参数之间也是空格给定go文件代码package mainimport ( "net/http" "html/template" "time")func welcome(w http.ResponseWriter, r *http.Request) { t, _ := temp原创 2021-07-11 18:11:16 · 847 阅读 · 0 评论 -
Go语言向模版传递数据
一. 向模版传递数据可以在HTML中使用{{}}获取template.Execute()第二个参数传递的值最常用的{{.}}中的".“是指针,指向当前变量,称为"dot”在{{}}可以有的Argument,官方给定如下- go语法的布尔值、字符串、字符、整数、浮点数、虚数、复数,视为无类型字面常数,字符串不能跨行- 关键字nil,代表一个go的无类型的nil值- 字符'.'(句点,用时不加单引号),代表dot的值- 变量名,以美元符号起始加上(可为空的)字母和数字构成的字符串,如:$piO原创 2021-07-11 18:10:41 · 1147 阅读 · 0 评论 -
Go语言HTML模版和静态资源
一. 项目结构在Go语言中web项目标准结构如下--项目名 --src --static --css --images --js --view --index.html --main.goGo语言标准库中html/template包提供了html模版支持,把HTML当作模版可以在访问控制器时显示HTML模版信息这也符合标准的MVC思想二.HTML模版显示使用template.ParseFiles()可以解析多个模版文件// ParseFiles c原创 2021-07-11 18:09:58 · 931 阅读 · 0 评论 -
Go语言获取请求头和请求参数
一.获取请求头在浏览器地址栏中输入下面信息,这属于http请求的get方式,请求携带两个参数http://localhost:8090/param?name=zhang&age=18下面是谷歌浏览器开发者工具(F12)观察到的信息[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kMeI9jns-1625476091964)(images/3_3_3_google.png)]可以使用http.Request.Header获取请求(Request Head原创 2021-07-11 18:09:11 · 3299 阅读 · 0 评论 -
Go语言单控制器和多控制器
一. 单控制器在Golang的net/http包下有ServeMux实现了Front设计模式的Front窗口,ServeMux负责接收请求并把请求分发给处理器(Handler)http.ServeMux实现了Handler接口type Handler interface { ServeHTTP(ResponseWriter, *Request)}type ServeMux struct { mu sync.RWMutex m map[string]muxEntry hos原创 2021-07-11 18:07:08 · 269 阅读 · 0 评论 -
Go语言web开发
一. HTTPHttp:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据Http报文(message)组成部分请求行(request-line)请求头(head)请求体(body)响应头响应体HTTP 1.1 实现了多种请求方式GET : 向服务器请求资源地址HEAD : 只要求响应头POST : 直接返回请求内容PUT : 创建资源DELETE : 删除原创 2021-07-11 18:06:25 · 1559 阅读 · 0 评论 -
Go语言点对点通信
一.概述点对点通信就是客户端A发送消息给服务端,再由服务端把消息传递给客户端B.相同道理客户端B想给客户端A发送消息也需要把消息传递给服务端,再由服务端把消息传递给A正常情况下客户端A和客户端B可以通过用户名、IP等唯一身份标识区分每个用户.在本功能练习中要求客户端先注册用户名,然后告诉服务端给谁发消息.如果用户名存在不允许注册在本功能练习中用户信息存储到临时容器map中,没有进行持久化操作.二.代码实现项目结构如下--项目名 --src --client client.go原创 2021-07-11 18:05:07 · 668 阅读 · 0 评论 -
Go语言服务端消息接收和发送
一. 服务端接收数据并返回数据服务端代码package mainimport ( "net" "fmt")func main() { //创建TCPAddress变量,指定协议tcp4,监听本机8899端口 addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899") //监听TCPAddress设定的地址 lis, _ := net.ListenTCP("tcp4", addr) fmt.Pr原创 2021-07-11 18:04:30 · 1600 阅读 · 0 评论 -
Go语言Socket
一.Socket简介在标准库的net包中可供了可移植的网络I/O接口,其中就包含了SocketSocket在TCP/IP网络分层中并不存在,是对TCP或UDP封装如果非要给Socket一个解释实现网络上双向通讯连接的一套API常称Socket为"套接字"Socket分类:按照连接时间短连接长连接(HTTP 1.1开始也支持长连接,Socket替换方案)按照客户端和服务器端数量点对点点对多多对多网络通信内容都是包含客户端和服务端,服务端运行在服务器中,而客原创 2021-07-11 18:03:50 · 1868 阅读 · 0 评论 -
Go语言网络编程
一. 网络通信互联网中主机和主机连接必须遵守特定的要求,这个要求称为协议OSI(Open System Interconnection)开放式系统互联.定义了计算机互联时网络通信的7层(图片来源互联网)目前大规模使用的是TCP/IP协议(图片来源互联网)应用层合并OSI中5,6,7层(会话层,表示层,应用层)常用协议:HTTP,FTP,SMTP,POP3,SSL,RPC传输层OSI中第4层常用协议TCP,UDP网络层OSI中第3层常用协议:IP,IPV4,原创 2021-07-10 18:03:15 · 192 阅读 · 1 评论 -
Go语言GC
一、GCGC英文全称 garbage collectorGo语言GC是相对C/C++语言非常重要的改进一些常用GC算法引用计算法.当对象被引用时计算器加一.不被引用计数器减一PHP和Object-C使用相互引用无法回收计数增加消耗Mark And Sweep 标记和清除算法.停止程序运行,递归遍历对象,进行标记.标记完成后将所有没有引用的对象进行清除由于标记需要停止程序(Stop the world),当对象特别多时,标记和清除过程比较耗时(可能几百毫秒),很难接受原创 2021-07-10 18:01:47 · 560 阅读 · 0 评论 -
Go语言select
一、select简介Golang中select和switch结构特别像,但是select中case的条件只能是I/Oselect 的语法(condition是条件)select{ case condition: case condition: default:}select执行过程:每个case必须是一个IO操作哪个case可以执行就执行哪个多个case都可以执行,随机执行一个所有case都不能执行时,执行default所有case都不能执行,且没有defaul原创 2021-07-10 18:01:17 · 218 阅读 · 0 评论 -
Go语言deadlock(死锁)和buff channel
一、deadlock(死锁)在主goroutine中向无缓存channel添加内容或在主goroutine中向channel添加内容且添加内容的个数已经大于channel缓存个数就会产生死锁fatal error : all goroutines are asleep -deadlock!死锁:在程序中多个进程(Golang中goroutine)由于相互竞争资源而产生的阻塞(等待)状态,而这种状态一直保持下去,此时称这个线程是死锁状态在Golang中使用无缓存channel时一定要注意.以原创 2021-07-10 18:00:49 · 836 阅读 · 0 评论 -
Go语言channel
一、channel线程通信在每个编程语言中都是重难点,在Golang中提供了语言级别的goroutine之间通信:channelchannel不同的翻译资料叫法不一样.常见的几种叫法管道信道通道channel是进程内通信方式,每个channel只能传递一个类型的值.这个类型需要在声明channel时指定channel在Golang中主要的两个作用同步通信Go语言中channel的关键字是chan声明channel的语法var 名称 chan 类型var 名称 c原创 2021-07-10 18:00:24 · 255 阅读 · 1 评论 -
Go语言互斥锁和读写锁
一、互斥锁Go语言中多个协程操作一个变量时会出现冲突的问题go run -race 可以查看竞争可以使用sync.Mutex对内容加锁互斥锁的使用场景多个goroutine访问同一个函数(代码段)这个函数操作一个全局变量为了保证共享变量安全性,值合法性使用互斥锁模拟售票窗口package mainimport ( "fmt" "sync" "time" "math/rand")var ( //票数 num = 100 wg原创 2021-07-10 17:59:48 · 385 阅读 · 0 评论 -
Go语言WaitGroup
一、WaitGroup简介Golang中sync包提供了基本同步基元,如互斥锁等.除了Once和WaitGroup类型, 大部分都只适用于低水平程序线程,高水平同步线程使用channel通信更好一些WaitGroup直译为等待组,其实就是计数器,只要计数器中有内容将一直阻塞在Golang中WaitGroup存在于sync包中,在sync包中类型都是不应该被拷贝的.源码定义如下// A WaitGroup waits for a collection of goroutines to fini原创 2021-07-10 17:58:38 · 690 阅读 · 0 评论 -
Go语言goroutine(线程)
一、goroutine简介Golang中最迷人的一个优点就是从语言层面就支持并发在Golang中的goroutine(协程)类似于其他语言的线程并发和并行并行(parallelism)指不同的代码片段同时在不同的物理处理器上支持并发(concurrency)指同时管理多个事情,物理处理器上可能运行某个内容一半后就处理其他事情在一般看来并发的性能要好于并行.因为计算机的物理资源是固定的,较少的,而程序需要执行的内容是很多的.所以并发是”以较少的资源去去做更多事情”几种主流并发模型多原创 2021-07-10 17:58:08 · 395 阅读 · 0 评论 -
Go语言线程休眠和计时器
一、线程休眠Go语言中main()函数为主线程(协程),程序是从上向下执行的可以通过time包下的Sleep(n)让程序阻塞多少纳秒 fmt.Println("1") //单位是纳秒,表示阻塞多长时间 //e9表示10的9次方 time.Sleep(1e9) fmt.Println("2")二、延迟执行延迟指定时间后执行一次,但是需要注意在触发时程序没有结束fmt.Println("开始") //2秒后执行匿名函数 time.A...原创 2021-07-10 17:52:42 · 2478 阅读 · 0 评论 -
Go语言日志
一、日志简介使用开发工具时,控制台打印的信息就是日志信息项目最终发布后是没有开发工具的,而需要记录日志应该把信息输出到文件中,这个功能也是日志的功能在Go语言标准的log包提供了对日志的支持有三种级别日志输出Print() 输出日志信息Panic() 打印日志信息,并触发panic,日志信息为Panic信息Fatal() 打印日志信息后调用os.Exit(1)所有日志信息打印时都带有时间,且颜色为红色每种级别日志打印都提供了三个函数Println()Print()Pr原创 2021-07-10 17:46:21 · 600 阅读 · 0 评论 -
Go语言操作XML
一、XML文件简介英文全称:Extensible Markup Language中文全称:可扩展标记语言用途:数据存储数据交互配置文件优点:跨平台性数据工整,易读二、XML文档结构XML文档结构第一行:XML头,版本和编码第二行:DTD可选,能够检查XML内容是否满足要求最外层标签<peoples> 称为元素节点,根节点<people>...<people> 整个标签称为元素节点id=”1” 属性节点e标签中文字:原创 2021-07-09 09:27:43 · 2021 阅读 · 3 评论 -
Go语言反射
一、反射介绍在Go语言标准库中reflect包提供了运行时反射,程序运行过程中动态操作结构体当变量存储结构体属性名称,想要对结构体这个属性赋值或查看时,就可以使用反射.反射还可以用作判断变量类型整个reflect包中最重要的两个类型reflect.Type 类型reflect.Value 值获取到Type和Value的函数reflect.TypeOf(interface{}) 返回Typereflect.ValueOf(interface{}) 返回值Value二、代原创 2021-07-09 09:21:52 · 167 阅读 · 0 评论 -
Go语言ioutil包
一、ioutil包ioutil包下提供了对文件读写的工具函数,通过这些函数快速实现文件的读写操作ioutil包下提供的函数比较少,但是都是很方便使用的函数func NopCloser(r io.Reader) io.ReadCloserfunc ReadAll(r io.Reader) ([]byte, error)func ReadFile(filename string) ([]byte, error)func WriteFile(filename string, data []by原创 2021-07-09 09:21:08 · 404 阅读 · 0 评论 -
Go语言Writer(输出流)
一、输入流输入流就是把程序中数据写出到外部资源Go语言标准库中输出流是Writer接口// Writer is the interface that wraps the basic Write method.//// Write writes len(p) bytes from p to the underlying data stream.// It returns the number of bytes written from p (0 <= n <= len(p))原创 2021-07-09 09:18:37 · 1694 阅读 · 0 评论 -
Go语言Reader
一、输入流流(stream)是应用程序和外部资源进行数据交互的纽带流分为输入流和输出流,输入和输出都是相对于程序,把外部数据传入到程序中叫做输入,反之叫做输出流输入流(Input Stream),输入流(Output Stream) 平时所说的I/O流在Go语言标准库中io包下是Reader接口表示输入流,只要实现这个接口就属于输入流// Reader is the interface that wraps the basic Read method.//// Read reads u原创 2021-07-09 09:17:57 · 1136 阅读 · 0 评论 -
Go语言系统文件和目录
一、使用os包中内容进行操作系统文件或目录File结构体表示操作系统文件(夹)// File represents an open file descriptor.type File struct { *file // os specific}// file is the real representation of *File.// The extra level of indirection ensures that no clients of os// can overwr原创 2021-07-09 09:17:13 · 525 阅读 · 0 评论 -
Go语言获取操作系统用户信息
一、os包结构介绍Go语言标准库中os包提供了不依赖平台的操作系统接口设计为Unix风格的,而错误处理是go风格的,失败的调用会返回错误值而非错误码。通常错误值里包含更多信息os包及子包功能-- os 包 --os/exec 包,负责执行外部命令. --os/signal对输入信息的访问 --os/user 通过名称或ID 查询用户账户在os/user中提供了User结构体,表示操作系统用户Uid 用户idGid 所属组idUsername 用户名Name 所属组原创 2021-07-09 09:16:06 · 2493 阅读 · 0 评论 -
Go语言defer、panic、recover
一、deferGo语言中defer可以完成延迟功能,当前函数执行完成后执行defer功能defer最常用的就是关闭连接(数据库连接,文件等)可以打开连接后代码紧跟defer进行关闭,后面在执行其他功能在很多语言中要求必须按照顺序执行,也就是必须把关闭代码写在最后,但是经常会忘记关闭导致内存溢出,而Golang中defer很好的解决了这个问题.无论defer写到哪里都是最后执行func main() { fmt.Println("打开连接") defer func(){原创 2021-07-09 09:15:09 · 419 阅读 · 3 评论 -
Go语言中的错误处理
一、错误在程序执行过程中出现的不正常情况称为错误Go语言中使用builtin包下error接口作为错误类型,官方源码定义如下只包含了一个方法,方法返回值是string,表示错误信息// The error built-in interface type is the conventional interface for// representing an error condition, with the nil value representing no error.type e原创 2021-07-09 09:14:11 · 386 阅读 · 0 评论