go语言
go语言
李峻枫
这个作者很懒,什么都没留下…
展开
-
Gorm的简单运用
Go 与数据库后端简单一点就是增删改查,而大量的数据存在那儿呢?记事本?Excel表格?如果有成千上万的数据,存储和查询,还有并发问题就成了要考虑的了,因此数据库是一个很好的选择。搭建一个mysql数据库,学习数据库的三范式,然后设计一个电子商务的数据库吧要求:用户表,包含用户id,用户名,用户密码的hash商品表,包含商品id,商品名,价格店铺表,包含店铺id,店铺名,地址一个店铺有多种商品,一种商品可以放在不同店铺,商品和店铺之间是库存的关系一个用户可以对多个店铺的不同商品加入购物车原创 2021-02-09 09:55:20 · 292 阅读 · 0 评论 -
gorm框架
引入在处理MySQL库的时候,使用了"database/sql",这是一个比较原生的方式,有没有更加方便的方式使用MySQL数据库了,目前开源界也有很多封装好的orm操作框架,帮我们简省一些重复的操作,提高代码可读性。gorm安装在cmd中输入go get -u github.com/jinzhu/gorm定义表相比用SQL定义表,使用gorm就简单很多,它通过结构体来定义。不过需要注意的是:表名为结构体名的复数形式,例如结构体为user,那么该表名就是users。结构体标记标记原创 2021-02-09 09:47:49 · 737 阅读 · 1 评论 -
Go语言中MySQL数据库的应用
连接数据库db, err := sql.Open("mysql", username:password@protocol(address)/dbname?param=value)第一个参数是驱动器,第二个参数就是数据库信息。defer db.Close()断开数据库连接函数。原创 2021-02-07 13:26:53 · 245 阅读 · 0 评论 -
Go与数据库的简单运用
Go与数据库的简单运用后端简单一点就是增删改查,而大量的数据存在那儿呢?记事本?Excel表格?如果有成千上万的数据,存储和查询,还有并发问题就成了要考虑的了,因此数据库是一个很好的选择。搭建一个mysql数据库,学习数据库的三范式,然后设计一个电子商务的数据库吧要求:用户表,包含用户id,用户名,用户密码的hash商品表,包含商品id,商品名,价格店铺表,包含店铺id,店铺名,地址一个店铺有多种商品,一种商品可以放在不同店铺,商品和店铺之间是库存的关系一个用户可以对多个店铺的不同商品加入原创 2021-02-07 15:03:13 · 369 阅读 · 0 评论 -
golang的http包
http.HandleFunc与http.Handle这两个函数都是包含在http包里面的,都带有两个参数,第一个参数为路径,第二个参数为处理器。http.Handle的第二个参数是Handler类型,而http.HandleFunc第二个参数是自己写的函数,里面可以实现自己想要做的事。一般来说,http.HandleFunc用的更多。...原创 2021-02-04 15:22:52 · 348 阅读 · 0 评论 -
Golang JSON用法
先简单了解一下JSON结构体序列化通过json.Marshal()函数,可将一个结构体转化为JSON。该函数的返回值为两个参量,第一个为转化后的JSON(如果转化成功),第二个参量就是是否成功将结构体转化成为JSON(如果失败,这个值为nil)。package mainimport ( "encoding/json" "fmt")type User struct { Username string Password string Token string}fun原创 2021-02-03 12:30:37 · 413 阅读 · 0 评论 -
Golang后端基础——用户名和密码验证界面
用户名和密码验证界面Go语言作为后端语言常用的应用,最简单的就是做一个后端的用户名和密码验证了,这相当于后端的hello world,所以做一个简单的json验证的后端界面吧要求这是路径↓,post是用post方法来发送数据[POST]/login用户发送{ "username": "admin", "password": "123456", "token": "TOKEN"}如果TOKEN不对,返回json{ "code": 404}如果TOKEN对原创 2021-02-03 10:07:23 · 1536 阅读 · 0 评论 -
Token
引入现在多少网页都需要账号登录,但是并不需要我们多次登录,一般情况下,我们都是只需要输入一次账号密码,之后它就会帮我们自动登录了。而且我们在通过这个网站,打开一些子窗口,也都会帮我们自动登录上。这一过程的实现就是靠的TokenToken首先,我们先来了解一下Session与Cookie。想一想,为什么Cookie和Session不能做到这一点呢?Cookie的安全性太低了,而且数据储存在客户端本地,容易被修改。而Session呢,它记录的信息相对来说比较多,不便于操作。Token的本质就是原创 2021-02-02 13:14:58 · 120 阅读 · 0 评论 -
Session与Cookie
Session在服务器存储特定用户会话所需的属性及配置信息。可以理解为用于在客户端与服务器之间,保持状态的解决方案。对于客户端的请求,服务器先会检测有无Session信息,如果有,就检索出对应ID的内存块,如果没有,或者检索不出来(对应Session因超出时效等原因被删除了),服务器就会创建出新的一块内存块,并回传给客户端一个SessionID,以便客户端在下一次访问。Session不会因为浏览器关闭而被删除,因为客户端并不会主动发出浏览器关闭的信息,服务器就压根不知道浏览器语句被关闭了。为了原创 2021-02-02 11:40:50 · 120 阅读 · 0 评论 -
Golang命令行输入
引入对于一些只需要输入几个简单参数的程序来说,直接输入参数并非是一个最好的选择。事实上,我们可以在用命令行调用这个程序的时候就附带这些参数。flag包这个包为我们提供了相关函数,使得我们非常方便地获取命令行参数。flag.类型keystr := flag.String("key", "-", "密钥")通过这个函数,我们可以定义string类型和int类型,其中key是命令行中的输入参数;-为默认值,即没有输入的时候该函数的返回值就是-;密钥是提示,当使用-help的时候会出现。在命令行中,原创 2021-01-29 16:24:15 · 859 阅读 · 0 评论 -
多线程经典模型——生产者消费者模型
生产者消费者模型 电脑能够一边放音乐一边看网页,靠的就是多线程和多进程,在现代软件中,多线程和多进程操作显得不可缺少,尤其是现在处理器几乎全是多核,如果单线程就太可惜了。任务:生产者消费者模型是广为使用的多线程模型,常用的消息队列也是基于这个模型展开的,因此你可以在网上找到很多相关的代码和解释,图文并茂的那种生产者Producer 3个p1, p2, p3, 消费者Consumer3个c1, c2, c3, 传送带最多同时容纳5个数据生产者和消费者一次都只能生产/消耗 1个面包生产者在ran原创 2021-01-29 15:49:30 · 619 阅读 · 1 评论 -
高并行中的限制——互斥锁
引入试想这一个情况,两个同时运行的线程,它们都需要改写共享内存中的某一个数据,那会发生什么情况呢?我们当然希望它们来安装顺序来,一个线程先读取,然后改写,再到另一个线程读取改写。但很多情况下,并不是这样了,因为这两个线程它们之间是并不知道对方也同时在访问这个共享内存。于是,可能出现下面这种我们并不想让它发生的情况:两个线程(不妨记作A,B)同时读取了共享内存,获得了相同的数据。其中A线程运算完后,改写了共享内存,然而此时B线程并不知道共享内存已经被改写,仍然用着改写之前的数据进行运算。B线程得原创 2021-01-29 10:42:01 · 294 阅读 · 0 评论 -
goroutine之间的通信——channel
引入在多线程的那篇博客中,我们可以注意点,每一段代码的最后都会有这样一段代码: var s string fmt.Scan(&s)这段代码的含义就是等待输入,那究竟是为什么需要这一段代码呢?如果去掉了这一段代码,在屏幕上并不会输出任何东西。因为,这个进程(主线程)创建完两个线程之后就关闭了,同时两个刚刚创建的线程,还得队列里没有运行的线程只能和主线程一起被关闭。那有没有什么办法使得线程在运行完之后,告诉进程(主线程)它已经运行完了,然后进程(主线程)再关闭呢?这里就引出了Golang原创 2021-01-28 17:36:15 · 612 阅读 · 0 评论 -
Golang协程goroutine
协程首先要把协程与线程、进程区别开。线程也成为内核级线程,而协程被称为用户级线程。其最大的特点就是并不用像线程、进程那样进行抢占式调度,它进行的是协作式调度。协程它并不能做到强制把CPU控制权切换至别的线程,但是它可以主动将CPU控制权转让出去。goroutine其本质是协程,但是与协程有有一点不同。Golang在runtime,系统调度等方面做了相应的处理,避免了某一个goroutine占用CPU太长时间。goroutine作为协程有着不少优势:内存消耗少,以KB为单位,而线程呢,是要原创 2021-01-28 16:26:28 · 493 阅读 · 0 评论 -
golang中的多线程
首先先了解一下什么是线程,什么是进程goroutine在runtime包里面,提供了相关的函数。go函数名()直接创建一个新的线程runtime.Gosched()用于让出CPU的时间片。正常情况下,CPU的一个内核只能在同一时间运行一个线程,但是现在部分电脑通过超线程技术将一个物理内核虚拟成两个逻辑内核。用一个生动的比喻,这个函数就是将CPU运行的接力棒交出来,至于交给谁呢,就是要看调度了。通过一个例子来更好地理解这个函数对于下面这个代码package mainimport原创 2021-01-28 11:49:39 · 6066 阅读 · 0 评论 -
GO语言基本语句
条件语句if语句在go中,if语句与c++也非常类似,只不过是条件没有括号。其实加了括号好像也问题不大。基本写法如下:if 条件 {条件为真} else {条件为假}switch语句大致与c++一样,这里还有一个fallthrough语句,可以强制执行下面的所有语句。举个例子:func main() { var a int32 a = 1 switch a { case 1: fmt.Println("1") fallthrough case 2: fmt.Print原创 2021-01-25 16:47:17 · 352 阅读 · 0 评论 -
GO语言基本知识
基本结构包声明:package main引用包:import “fmt”代码部分变量go语言中,变量的声明与Pascal类似:var name int;先用var表示这是一个变量,然后紧跟变量名,最后是变量类型。与c++一样,存在指针类型,用&来取地址。变量类型数字类型,包括整数与浮点数。常用的用int32,int64,float32,float64。此外还有复数类型:complex64(注意64=32实部+32虚部)布尔类型:bool。字符串类似:string。派生原创 2021-01-25 15:41:43 · 514 阅读 · 0 评论 -
JZO5951. 【NOIP2018模拟11.04】锋芒毕露
题解可以发现求相交的圆的对数并不好求,于是就应该考虑求不相交圆的个数。首先先算出所有圆的个数,那么也就可以知道圆的对数。先减去相同颜色相交的圆,这个非常简单。考虑AABB这种不包含的情况,从前往后扫一遍,记录每个点前面有多少个圆,也就每个点前面与它相同颜色的点的个数。再考虑被包含的情况ABBA先设一个阈值K,然后按照K对颜色进行分类,第一类颜色L,出现次数大于K,颜色数量较多...原创 2018-11-08 15:16:33 · 221 阅读 · 0 评论