
GoWeb
文章平均质量分 87
GoWeb编程基础
吴声子夜歌
个人学习记录
展开
-
GoWeb——Beego框架的使用
Beego是用Go语言开发的高效的HTTP框架,可以用来快速开发APl、Web应用及后端服务等各种应用。Beego是一个RESTful的框架,主要设计灵感来源于Tornado、Sinatra和Flask这3个框架。它还结合了Go语言自身的一些特性(接口、结构体嵌入等)。Beego是基于多个独立模块构建的,是一个高度解耦的框架。原创 2023-06-09 17:18:30 · 5637 阅读 · 0 评论 -
GoWeb——Gin框架的使用
Gin是一个用Go语言编写的Web框架。Gin框架拥有很好的性能,其借助高性能的HttpRouter包,运行速度得到了极大提升。目前的Gin框架是1.x版本。} {raw.tmplr := gin . Default() //注册中间件 r . Use(Logger()) r . GET("/hi" , func(c * gin . Context) {原创 2023-06-08 16:55:31 · 2008 阅读 · 0 评论 -
GoWeb——Socket编程
其中,net参数是网络协议的名字,addr参数是IP地址或域名,而端口号以“:”的形式跟随在P地址或域名的后面,端口号可选。如果连接成功,则返回连接对象,否则返回error。除Dial()函数外,还有一个名为DialTCP()的函数用来建立TCP连接。其中,network参数可以是tcp、tcp4或tcp6;laddr为本地地址,通常为nil;raddr为目的地址,为TCPAddr类型的指针。该函数返回一个*TCPConn对象,可通过Read()和Write()方法传递数据。原创 2023-06-07 21:13:28 · 1206 阅读 · 0 评论 -
GoWeb——并发实例
用筛法求素数的基本思想是:把从1开始的、某个范围内的正整数从小到大顺序排列;1不是素数,首先把它筛掉;在剩下的数中最小的数是素数,去掉它的倍数;依次类推,直到筛子为空时结束。通道的一个很常用的应用,它使用无缓冲通道来阻塞主线,等待goroutine结束。用无缓冲通道来阻塞主线的示例如下。有了select,把在多路复合代码Recombination()函数再优化一下,这样就不用开多个goroutine来接收数据了。在剩下的数中2最小,是素数,需要去掉2的倍数。在使用select时,有时需要做超时处理。原创 2023-06-07 17:18:20 · 141 阅读 · 0 评论 -
GoWeb——用sync包实现并发
在Go语言中,Sync.Mutex是一个结构体对象,用于实现互斥锁,适用于读写不确定的场景(即读写次数没有明显的区别,并且只允许有一个读或者写的场景)。所以该锁也称为“全局锁”。sync.Mutex结构体由两个字段state和sema组成。其中,state表示当前互斥锁的状态,而sema用于控制锁状态的信号量。在Go语言中,读写互斥锁(sync.RWMutex)是一个控制goroutine访问的读写锁。该锁可以加多个读锁或者一个写锁,其经常用于读次数远远多于写次数的场景。原创 2023-06-06 17:17:15 · 133 阅读 · 0 评论 -
GoWeb——用goroutine和通道实现并发
Go语言的并发机制运用起来非常简便:只需要通过go关键字来开启goroutine,和其他编程语言相比这种方式更加轻量。在函数foo(a,b,c)之前加上go关键字,就开启了一个新的goroutine。//创建一个匿名函数并开启goroutine go func(paraml , param2) {开启goroutine的示例如下。for i := 0;i < 3;i ++ {执行以上代码后会看到,输出的“go”和“web program”是没有固定先后顺序。原创 2023-06-06 15:30:30 · 305 阅读 · 1 评论 -
GoWeb——goconfig使用
如果未指定任何节,则会默认放入名为 DEFAULT 的节当中;下面我们就来读取配置 加载、获取section、获取单个值、获取注释、获取数组、重新设置值、删除值,重新加载文件(会写一个for循环10次去重新加载配置,这期间修改配置,观察值是否改变)goconfig 是一个易于使用,支持注释的 Go 语言配置文件解析器,该文件的书写格式和 Windows 下的 INI 文件一样。配置文件由一个个的 section 组成,section 下就是key = value或者key : value 这样的格式配置。原创 2023-06-05 13:26:26 · 274 阅读 · 0 评论 -
GoWeb——Go Mod使用
可以使用命令 go list -m -u all 来检查可以升级的package,使用go get -u need-upgrade-package 升级后会将新的依赖版本更新到go.mod * 也可以使用 go get -u 升级所有依赖。在非$GOPATH目录的任意地方创建一个文件夹,然后再终端执行 go mod init project_name进行初始化操作,成功之后会发现目录下会生产一个go.mod文件。在demo01目录下创建 main.go文件,并引入gin库,启动一个web服务,代码如下。原创 2023-06-05 12:52:58 · 907 阅读 · 0 评论 -
GoWeb——处理XML文件
以上代码是一个xml配置文件,该配置以config为root标签,包含xml属性文本(比如smtpServer标签)、嵌套xml(receivers标签)、xml attribute属性文本(receivers标签的flag),以及类似数组的多行配置(user标签)。Go在解析XML中的数据时,最主要的是处理XML到结构体的转换问题,结构体和XML都有类似树结构的特征。xml.Marshallndent()函数和xml.Marshal()函数输出的信息都是不带XML头的。生成XML文件的示例如下。原创 2023-06-04 22:44:21 · 1134 阅读 · 0 评论 -
GoWeb——使用正则表达式
MustCompile()函数与Compile()函数类似,它们的差异是:失败时MustCompile()函数会宕机,而Compile()函数则不会。regexp包提供了FindStringlndex()、FindIndex()、FindAllStringlndex()方法来获取匹配正则子字符串的位置。strings包提供了Split()、SplitN()、SplitAfter()、SplitAfterN()这4个函数来处理正则分割字符串。其中,s为被正则分割的字符串,sep为分隔符。原创 2023-06-04 22:11:37 · 344 阅读 · 0 评论 -
GoWeb——处理JSON
尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文本描述形式(类似一些编程语言中的字典结构),这使它成为较为理想的、跨平台、跨语言的数据交换语言。当我们调用json.Marshal(gobook)语句时,会递归遍历gobook对象,如果发现gobook这个数据结构实现了json.Marshaler接口且包含有效的值,Marshal()就会调用其MarshalJSON() 方法将该数据结构生成 JSON 格式的文本。原创 2023-06-03 15:05:05 · 211 阅读 · 0 评论 -
GoWeb——操作目录与文件
除此之外,我们还可以自己封装一个函数:先通过使用os包中的os.Open()和os.Create()函数获取文件句柄(文件指针),然后通过文件句柄(文件指针)的Read()和Write()方法,按照字的节读取和写入来实现复制文件的功能。如果成功,则返回的文件描述符对象可用于文件的读写。OpenFile()函数比Open()函数更加强大,可以定义文件的名字、文件打开方式,以及文件权限设置。WriteString()方法和Write()方法的区别是参数的形式:WriteString()方法的参数是字符串,原创 2023-06-03 00:15:58 · 660 阅读 · 0 评论 -
GoWeb——Beego ORM1.X详解
orm原创 2023-06-01 22:32:29 · 581 阅读 · 0 评论 -
GoWeb——Beego ORM简单使用
Beego ORM是一个强大的Go语言ORM框架。它的灵感主要来自Diango ORM和SQLAlchemy。它支持Go语言中所有的类型存储,允许直接使用原生的SQL语句,采用CRUD风格能够轻松上手,能进行关联表查询,并允许跨数据库兼容查询。数据库的表(table)→结构体(struct);记录(record,行数据)→结构体实例对象(object);字段(field)→对象的属性(attribute)。原创 2023-05-31 17:18:58 · 859 阅读 · 0 评论 -
GoWeb——Gorm详解
1.2、导入数据库驱动1.3、连接数据库2、查询操作2.1、模型表名默认是模型的复数形式,列名默认是字段名的驼峰形式:基本模型定义如下,表中需要这些字段的,可以直接引入模型即可:2.2、简单查询2.3、Select查询指定要从数据库检索的字段,默认情况下,将选择所有字段。2.4、Where查询(简单sql)2.5、Where查询(struct&map)注意:当使用struct查询时,GORM将只查询那些具有值的字段2.6、not条件查询2.7、带内联条件的查询注意:使用原创 2023-05-28 15:35:11 · 618 阅读 · 0 评论 -
GoWeb——Gorm简单使用
Gorm是Go语言中一款性能极好的ORM库,对开发人员相对比较友好,能够显著提升开发效率。是一个全功能ORM(无限接近);支持关联(Has One、Has Many、Belongs To、Many To Many、多态);支持钩子函数Hook(在创建/保存/更新/删除/查找之前或之后);支持预加载:支持事务;支持复合主键;支持SQL生成器;支持数据库自动迁移;支持自定义日志;可扩展性,可基于Gorm回调编写插件;所有功能都被测试覆盖。原创 2023-05-28 13:21:00 · 261 阅读 · 0 评论 -
GoWeb——访问MongoDB
MongoDB中的JSON文档存储在名为BSON(二进制编码的JSON)的二进制表示中。与其他编码将JSON数据存储为简单字符串和数字的数据库不同,BSON编码扩展了JSON表示,使其包含额外的类型,如int、long、date、decimal128等。更新时需要同时对这两个字段进行赋值,否则未被赋值的字段会被更新为G0的数据类型初始值。同样的,更新数据也需要建立专门用于更新的结构体。在连接MongoDB的Go驱动程序中,有两大类型表示BSON数据:D类型和Raw类型。对于复合查询来说,D类型更加强大。原创 2023-05-27 16:31:49 · 466 阅读 · 0 评论 -
GoWeb——访问Redis(Redigo)
Redis管道(Pipelining)的操作可以理解为并发操作,并通过Send()、Flush()、Receive()这3个方法实现。假设Redis服务器与客户端分处异地,虽然基于内存的Redis数据库有着超高的性能,但是底层的网络通信却占用了一次数据请求的大量时间。Send()、Flush()、Receive()方法支持管道化操作。Redigo客户端包中最常用的是Do()方法,它可以直接支持Redis的Set、Get、MSet、MGet、HSet、HGet等常用命令。出的顺序读取所有命令的结果。原创 2023-05-26 15:40:44 · 490 阅读 · 0 评论 -
GoWeb——访问MySQL
客户端对SQL语句进行占位符替换,得到完整的SQL语句;客户端发送完整的SQL语句到MySQL服务器端;MySQL服务器端执行完整的SQL语句,并将结果返给客户端。原创 2023-05-25 14:22:21 · 283 阅读 · 0 评论 -
GoWeb——Session和Cookie
HTTP协议是一种无状态协议,即服务器端每次接收到客户端的请求都是一个全新的请求,服务器端并不知道客户端的历史请求记录。session和cookie的主要目的就是为了弥补HTTP的无状态特性。session是什么客户端请求服务器端,服务器端会为这次请求开辟一块内存空间,这个对象便是session对象,存储结构为ConcurrentHashMap。session弥补了HTTP的无状态特性,服务器端可以利用session存储客户端在同一个会话期间的一些操作记录。session如何判断是否为同一个会话。原创 2023-05-24 14:21:08 · 517 阅读 · 0 评论 -
GoWeb——处理请求(Request)
例如,可以自定义一个处理器方法noAuth(),并通过w.WriteHeader()方法返回一个401未认证状态码(注意,在运行时,w代表的是对应的response对象实例,而不是接口)。因此在请求头中支持的方法这里都支持,比如可以通过w.Header().Add()方法新增响应头。例如,如果要设置一个301重定向响应,则只需要通过w.WriteHeader()方法将响应状态码设置为301,再通过w.Header().Set()方法将“Location”设置为一个可访问域名即可。原创 2023-05-23 16:48:39 · 643 阅读 · 0 评论 -
GoWeb——接收请求(ServeMux)
为了方便使用,net/http包提供了以函数的方式注册处理器,即用HandleFunc()函数来注册处理器。一个完整的Wb项目包含“处理器处理请求”“用模型操作数据库”“通过模板引擎(或处理器)将模型从数据库中返回的数据和模板拼合在一起,并生成HTML或者其他格式的文档”,以及“通过HTTP报文传输给客户端”这4步。简而言之,HandlerFunc()是一个处理器函数其内部通过对ServeMux中一系列方法的调用,最终在底层实现了Handler处理器接口的ServeHTTP()方法,从而实现处理器的功能。原创 2023-05-23 12:53:00 · 378 阅读 · 0 评论 -
GoWeb——HttpRouter简介
HttpRouter包的Router结构体还有其他配置,比如是否通过重定向、是否监测当前请求的方法被允许等配置。HttpRouter是一个高性能、可扩展的第三方HTTP路由包。HttpRouter包弥补了net/http包中默认路由不足的问题。在使用ServeFiles()方法时需要注意:第1个参数路径必须是*/filepath形式,第2个参数为文件目录。对象,然后使用GET()方法注册一个适配/路径的Index函数,最后将。下面用一个例子认识一下HttpRouter这个强大的HTTP路由包。原创 2023-05-22 15:15:45 · 743 阅读 · 0 评论 -
GoWeb——使用模板html/template包
定义模板文件是指,按照相应的语法规则去定义模板文件。原创 2023-05-20 17:40:16 · 1794 阅读 · 2 评论 -
GoWeb——创建简单的服务端和客户端
GetO、Post()函数的本质是,Go程序在底层传递相应的参数去调用NewRequest()函数。所以,在Go语言中创建客户端,最核心的HTTP请求方法就是NewRequest()函数。要创建一个Go语言的HTTP服务器端,需先使用HandleFunc()函数注册路由,然后通过ListenAndServe()函数开启对客户端的监听。在1.6以上的版本中,如果使用HTTPS模式启动服务器,则服务器默认使用HTTP2。在上面的Get()函数中,使用了DefaultClient对象的Get()方法。原创 2023-05-20 15:46:52 · 523 阅读 · 0 评论