![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
文章平均质量分 52
crayon-shin-chan
这个作者很懒,什么都没留下…
展开
-
Go语言入门之使用panic和recover处理错误
1.简介Go语言中,panic用来主动抛出错误,recover用来捕获panic抛出的错误func panic(v interface{})func recover() interface{}2.使用引发panic有两种情况程序主动调用panic函数 产生运行时错误2.1 panic与defer发生panic后,程序会从调用panic的位置或发生panic的位置立即返回,逐层向上执行函数的defer语句,然后逐层打印调用堆栈,直到被recover捕获..原创 2021-08-22 23:40:41 · 295 阅读 · 0 评论 -
Go语言入门之闭包
1.简介闭包是函数以及引用环境组合的结果,一般由匿名函数引用外部函数的局部变量或全局变量构成闭包对闭包外环境的引入是直接引用,编译器检测到闭包,会将引用的外部变量分配到堆上2.规则当外部函数返回的闭包引用了外部函数的局部变量时多次调用外部函数,返回的多个闭包引用的外部变量是不同的副本,因为每次调用都会为局部变量分配内存多次调用一个闭包函数,如果它修改了引用的外部变量,则每次调用都会对外部变量有影响,因为一个闭包函数对应一组外部变量package mainfu..原创 2021-08-22 22:58:26 · 115 阅读 · 0 评论 -
Go语言入门之函数类型
1.简介函数类型又叫函数签名,一个函数的类型就是函数定义首行去掉函数名、参数名和{2. 函数类型可以使用%T打印函数类型import "fmt"func add(a int, b int) int { return a + b}func main() { fmt.Printf("%T", add)}func(int, int) int函数类型定义了参数类型和返回值类型 两个函数类型相同的条件是:拥有相同的形参列表和返回值列表(参数列表的次序、个..原创 2021-08-22 18:26:43 · 601 阅读 · 0 评论 -
Go语言入门之复合数据类型
1.简介复合数据类型就是由其他类型组合而成的类型Go语言基本的复合数据类型有指针、数组、切片、字典、通道、结构、接口2.指针Go语言支持指针,指针声明为*T,即在普通类型前加上*代表一个指向指定类型的指针Go同样支持多级指针**T想要获取一个对象的指针,可以使用&想要获取一个指针的值,可以使用&对指针解引用package mainfunc main() { var a string = "Hello world" var b *st..原创 2021-08-22 13:55:11 · 268 阅读 · 0 评论 -
go语言入门之基本数据类型
1.简介Go是强类型的静态编译语言Go语言内置了七种基本类型布尔类型:bool 整型:byte int int8 int16 int32 int64 uint int8 uint16 uint32 uint64 uintptr 浮点型:float32 float64 复数:complex64 complex128 字符:rune 字符串:string 错误类型:error2.布尔类型布尔类型使用bool表示,只有两个值true和falsevar ok bo..原创 2021-08-21 12:56:15 · 104 阅读 · 0 评论 -
go语言入门之常量与变量
1.简介语言通常通过标识符绑定一块内存,一般可以分为两类,常量和变量。变量表示指向的内存可以被修改,常量表示指向的内存不能被修改。2.变量使用一个名称绑定一块内存地址,该内存中存放的数据类型由定义变量时指定的类型决定,存放的内容可以改变。go语言的变量声明分为两种完整声明和短类型声明2.1 显式的完整声明var varName dataType [ = value]var:关键字用于变量声明 varName:合法的变量名称标识符 dataType..原创 2021-08-19 22:52:01 · 125 阅读 · 0 评论 -
go语言web开发入门之请求与响应
1.简介net/http库中提供了代表HTTP请求报文的Request结构当net/http库被用作HTTP客户端的时候,Request结构既可以用于表示客户端发送的请求,也可以用于表示服务器接收到的请求2.请求请求包含以下字段type Request struct { Method string URL *url.URL Proto string // "HTTP/1.0" ProtoMajor int // 1 ProtoMinor int..原创 2021-08-14 23:42:44 · 158 阅读 · 0 评论 -
go语言web开发入门之使用http2
1.简介在1.6或以上版本的Go语言中,如果使用HTTPS模式启动服务器,那么将默认使用HTTP2。在默认情况下,版本低于1.6的Go语言将不会安装http2包,则需要安装:go get golang.org/x/net/http22.实现package mainimport ( "fmt" "net/http" "golang.org/x/net/http2")func hello(w http.ResponseWriter, r *http.Re..原创 2021-08-09 22:30:24 · 1399 阅读 · 0 评论 -
go语言web开发实战之使用httprouter
仓库:https://github.com/julienschmidt/httprouter1.简介HttpRouter是一种轻量高性能的HTTP请求路由器(也称为多路复用器)。与Go中net/http包的默认mux相比,此路由器支持路由模式中的变量并匹配请求方法。该路由器针对高性能和小内存占用进行了优化。即使有很长的路径和大量的路由,它也能很好地扩展。2.特性2.1 仅显式匹配对于其他路由器,如http.ServeMux,请求的 URL 路径可以匹配多个原创 2021-08-08 16:18:20 · 409 阅读 · 0 评论 -
go语言web开发入门之处理器与处理器函数
1.简介在Go语言中,一个处理器就是一个拥有ServeHTTP方法的接口,这个ServeHTTP方法需要接收两个参数:第一个参数是一个ResponseWriter接口 第二个参数是一个指向Request的指针任何接口只要拥有一个ServeHTTP方法,并且带有以下签名,那它就是一个处理器:ServeHTTP(http.ResponseWriter , *http.Request)2.多路复用器ListenAndServe接收的第二个参数就是一个处理器:type..原创 2021-08-08 11:18:36 · 222 阅读 · 0 评论 -
go语言web开发入门之使用https
1.生成证书见前文2.启动服务package mainimport ( "fmt" "net/http")func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") }) server := http.Server{ Addr: ..原创 2021-08-08 00:02:42 · 263 阅读 · 0 评论 -
go语言生成ssl证书
1.简介使用https协议时一般需要两个文件,cert.pem和key.pemcert.pem文件是SSL证书,而key.pem是私钥可以使用Go标准库中的crypto包群来生成证书与私钥2.实现package mainimport ( "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" "encoding/pem" "math/big" "net" "os" "time")..原创 2021-08-07 23:50:46 · 1312 阅读 · 0 评论 -
go语言入门之使用模块
文档:https://golang.org/doc/tutorial/create-module1.简介首先创建一个 Go 模块。在一个模块中,可以包含多个包,其中可能有main包。Go 代码被分组到包中,包被分组到模块中。您的模块指定运行代码所需的依赖项,包括 Go 版本及其所需的其他模块集。2.使用2.1 初始化greeting模块在项目greeting目录下运行go mod init example.com/greetingsgo: creating原创 2021-07-28 00:07:03 · 278 阅读 · 0 评论 -
go语言入门之模块感知模式Module-aware mode
文档:https://golang.org/ref/mod#mod-commands1.简介大多数go命令可以在Module-aware mode或GOPATHmode 下运行。在模块感知模式下,该go命令使用go.mod文件来查找版本化依赖项,它通常从模块缓存中加载包,如果模块丢失,则下载模块。在GOPATH 模式下,该go命令忽略模块;它在GOPATH目录中查找依赖项。从 Go 1.16 开始,默认情况下启用模块感知模式,无论 go.mod文件是否存在。在较低版本中,原创 2021-07-27 23:45:14 · 651 阅读 · 0 评论 -
go语言命令入门之env(操作环境信息)
文档:https://pkg.go.dev/cmd/go#hdr-Print_Go_environment_information1.简介Env 打印并且操作Go 环境信息。go语言的env存储于以GOENV命名的文件里,可以被系统环境变量覆盖2.用法go env [-json] [-u] [-w] [var ...]2.1 默认情况默认情况下 env 将信息打印为 shell 脚本(在 Windows 上,批处理文件)。go envset G原创 2021-07-27 23:25:25 · 3123 阅读 · 0 评论 -
go语言命令入门之build(编译包和依赖)
文档:https://pkg.go.dev/cmd/go#hdr-Compile_packages_and_dependencies1.简介build 编译由导入路径命名的包及其依赖项,但不会安装结果。2.用法go build [-o output] [build flags] [packages]-o:代表编译结果 build flags:编译命令标志 packages:需要编译的包、文件列表2.1 文件列表如果 build 的参数是单个目录的 .原创 2021-07-27 22:14:46 · 2063 阅读 · 0 评论 -
go语言web开发入门之使用database/sql包操作数据库
1.简介sql包提供了操作数据库的通用接口使用sql包时必须注册需要的驱动2.使用2.1 安装驱动首先需要下载mysql驱动go get -u github.com/go-sql-driver/mysql然后需要导入驱动_ "github.com/go-sql-driver/mysql"这是驱动目录下driver.go的内容type MySQLDriver struct{}func (d MySQLDriver) Open(dsn..原创 2021-07-25 20:41:55 · 417 阅读 · 1 评论 -
记一个go语言数据库查询错误unsupported Scan, storing driver.Value type []uint8 into type *time.Time
1.简介顾名思义,虽然数据库类型是datetime,但是查询出来是uint8类型,无法转换为time.Time类型2.解决db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/test?charset=utf8&parseTime=True")查询DSN加上&parseTime=True即可...原创 2021-07-25 20:32:32 · 1158 阅读 · 0 评论 -
记一个go运行时错误runtime error: invalid memory address or nil pointer dereference
1.简介使用go语言时,经常会碰到这种错误runtime error: invalid memory address or nil pointer dereference其实看名字就能看出来,是使用了nil的对象,在使用对象之前可以判断一下对象是否是nil原创 2021-07-25 20:25:53 · 4473 阅读 · 0 评论 -
go语言web开发入门之使用html/template操作模板
1.简介模板包(html/template)实现了数据驱动的模板,以便在代码注入过程中安全地生成HTML输出。它提供了与包文本/模板相同的接口,只要输出是HTML,就应该使用它来代替文本/模板。2.使用package mainimport ( "html/template" "net/http")type Thread struct { name string desc string}func main() { mux := http.NewSer..原创 2021-07-25 13:02:44 · 255 阅读 · 0 评论 -
go语言web开发入门之操作Cookie
1.简介一般当一个用户登录成功之后,服务器都会将一个cookie写入响应,而客户端会存储这个cookie之后每次访问服务器,会带着这个cookie一起访问,用于认证2.实现package mainimport ( "log" "net/http" "strconv")func main() { mux := http.NewServeMux() mux.HandleFunc("/", func(res http.ResponseWriter, req *..原创 2021-07-25 11:21:15 · 274 阅读 · 0 评论 -
go语言web开发入门之静态文件服务器
1.简介处理将请求重定向到相应的处理器之外,多路复用器还可以为静态文件提供服务。2.实现package mainimport ( "net/http")func main() { mux := http.NewServeMux() files := http.FileServer(http.Dir("./")) mux.Handle("/static/", http.StripPrefix("/static/", files)) server := &am..原创 2021-07-24 23:24:15 · 285 阅读 · 0 评论 -
go语言web开发入门之多路复用器(multiplexer)
1.简介在go语言web开发中,请求到达服务器时,多路复用器(multiplexer)会对请求进行检查,并将请求重定向到正确的处理器进行处理。处理器在接收到多路复用器转发的请求之后,会从请求中取出相应的信息,并对请求进行处理。在请求处理完成之后,处理器会将得到的数据传递给模板引擎,而模板引擎则会根据这些数据生成要返回给客户端的HTML2.使用package mainimport ( "fmt" "net/http")func handler(writer ..原创 2021-07-24 23:14:32 · 801 阅读 · 0 评论 -
go语言web开发入门之Hello World
1.简介在开始之前请先安装go,并且设置环境变量如GOPATH、GOROOT2.实现在当前目录下创建./src/hello_world/main.gopackage mainimport ( "fmt" "net/http")func handler(writer http.ResponseWriter, request *http.Request) { fmt.Fprintf(writer, "Hello World, %s!", request.URL...原创 2021-07-24 19:45:36 · 287 阅读 · 0 评论 -
nats入门之使用go订阅发布消息
1.简介NATS旨在满足当今和未来的分布式计算需求。NATS是为希望花费更多时间开发现代应用程序和服务而不必担心分布式通信系统的开发人员和运营商创建的简单安全的消息传递。易于开发人员和操作员使用 高效能 始终可用 极轻巧 最多一次,最少一次交货 支持可观察和可扩展的服务以及事件/数据流 客户支持30多种不同的编程语言 Cloud Native,一个具有Kubernetes和Prometheus集成的CNCF项目2.命令行安装使用nats可以直接使用go命令...原创 2021-02-18 22:30:52 · 999 阅读 · 0 评论 -
go语言实战之并发
1.简介Go语言的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为goroutine时,Go会将其视为一个独立的工作单元。这个单元会被调度到可用的逻辑处理器上执行。操作系统会在物理处理器上调度线程来运行,而Go语言的运行时会在逻辑处理器上调度goroutine来运行。每个逻辑处理器都分别绑定到单个操作系统线程。在1.5版本上,Go语言的运行时默认会为每个可用的物理处理器分配一个逻辑处理器。在1.5之前的版本中,默认给整个应用程序只分配一个逻辑处理器。1.1 ...原创 2021-02-16 21:26:15 · 316 阅读 · 2 评论 -
golang入门之并发
1.通过通信共享并发编程是一个很大的话题,这里仅留有一些特定于Go的亮点。实现对共享变量的正确访问所需的微妙之处使得在许多环境中进行并行编程变得很困难。Go鼓励采用一种不同的方法,在这种方法中,共享值在通道之间传递,并且实际上,决不由单独的执行线程主动共享。在任何给定时间,只有一个goroutine可以访问该值。根据设计,不会发生数据争用。为了鼓励这种思维方式,我们将其简化为一个口号:不要通过共享内存进行通信;而是通过通信共享内存。这种方法可能太过分了。例如,最好通过将互斥锁...翻译 2021-02-16 14:06:28 · 205 阅读 · 0 评论 -
Go环境变量
go命令及其调用的工具会查询环境变量以进行配置。如果未设置环境变量,则go命令使用明智的默认设置。要查看变量<NAME>的有效设置,请运行'go env <NAME>'。要更改默认设置,请运行'go env -w <NAME> = <VALUE>'。根据os.UserConfigDir的报告,使用'go env -w'更改的默认值记录在存储在按用户配置目录中的Go环境配置文件中。可以通过设置环境变量GOENV来更改配置文件的位置,并且'go env GO...翻译 2021-02-01 21:32:31 · 353 阅读 · 0 评论 -
GOPATH环境变量
Go path用于解析导入语句。它由go/build包实现并记录在文件中。GOPATH环境变量列出了查找Go代码的位置。在Unix上,该值是用冒号分隔的字符串。在Windows上,该值是用分号分隔的字符串。在计划9中,该值是一个列表。如果未设置环境变量,则GOPATH默认为用户主目录(Unix上的$HOME/go,Windows上的%USERPROFILE%\go)中名为“go”的子目录,除非该目录包含Go发行版。运行“go env GOPATH”以查看当前的GOPATH。请参阅https...翻译 2021-02-01 20:59:57 · 1094 阅读 · 0 评论 -
go命令文档
有一套用于构建和处理Go源代码的程序。套件中的程序通常直接由go程序调用,而不是直接运行。运行这些程序的最常见方式是作为go程序的子命令,例如go fmt。像这样运行,该命令将在完整的Go源代码包上运行,而go程序将使用适合于包级处理的参数来调用基础二进制文件。程序还可以使用gotool子命令(如)作为带有未修改参数的独立二进制文件运行go tool cgo。对于大多数命令,这主要用于调试。某些命令(例如)pprof只能通过gotool子命令访问。最终,fmt和godoc命令以称为的常规二...翻译 2021-02-01 20:50:41 · 163 阅读 · 0 评论