- 博客(20)
- 收藏
- 关注
原创 go内存逃逸分析
变量声明堆:全局存储空间存储的对象是可以被分享的存储的对象是被 GC 管理的栈数据帧局部存储空间,属于一个函数每个栈帧受限于一个 协程存储的对象是私有的存储的对象是被生命周期管理的栈的调用很快,比堆快40倍大对象,相差 24M倍一个变量存入 heap 最多占有 10MBESC :内存优化的手段,目的是让大的数据最好能存储到 stack,而不要跑到 heap注意,ESC是在编译时工作哪个变量会被内存逃逸?v := 0q = &v1、地址被别的变量引用,&
2022-05-08 18:07:37 395
原创 go实现输出数组里第二小的数
package mainimport ( "fmt")const INT_MAX = int(^uint(0) >> 1)// 0000 0000 => 1111 1111 => (int)0111 1111const INT_MIN = ^INT_MAX // 0111 1111 => 1000 0000func main() { var arr = [5]int{1, 3, 3, 9, 2} var minNum [2]int minNum[0]
2022-05-08 00:29:39 247
原创 GO的接口---interface
接口:统一了规则实现了一个接口,就是说,拥有接口中声明的所有方法特点:(1)高内聚、低耦合(2)不需要显示实现,只要一个 变量 实现了接口中的方法,那么就实现了接口package mainimport ( "fmt")//声明/定义一个接口type Usb interface { //声明了两个没有实现的方法 Start() Stop()}//声明/定义一个接口type Usb2 interface { //声明了两个没有实现的方法 Start() Stop.
2022-04-29 17:17:00 196
原创 Go的对象和方法(struct)
struct 内存布局struct 是值类型,直接指向 struct 的内存空间字段=属性=field没赋值的字段初始化为它们相应的 0 值map、slice赋值前要 makestruct 默认是值拷贝改变一个实例的字段不会影响另一个。monster2 := monster1这句代码内存变化如下:直接拷贝牛魔王,再在上面修改结构体指针 var person *Person = &Person{} //因为person 是一个指针,因此标准的访问字段的方法 // (
2022-04-28 09:17:31 747
原创 Go中的channel
channel(1)channel本身是一个队列,先进先出(2)线程安全,不需要加锁(3)本身是有类型的,string, int 等,如果要存多种类型,则定义成 interface类型(4)channel是引用类型,必须make之后才能使用,一旦 make,它的容量就确定了,不会动态增加!!它和map,slice不一样特点:(1)一旦初始化容量,就不会改变了。(2)当写满时,不可以写,取空时,不可以取。1、关于 channel的声明和使用的代码:package mainimport (
2022-04-25 22:03:03 11756 3
原创 Go协程goroutine和管道channel
1、进程:程序在操作系统的一次执行过程,是系统资源分配和调度的基本单位。2、线程:轻量化进程,是系统调度的基本单位。在同一个进程的线程切换不会导致进程切换,不同进程里的切换会导致进程切换。3、协程goroutine:轻量化线程,一个进程可以轻松开启上万个协程。在用户态,有独立的栈空间共享程序堆空间由用户调度简单易懂的代码1:package mainimport ( "fmt" "strconv" "time")// 在主线程(可以理解成进程)中,开启一个goroutine, 该
2022-04-25 21:30:34 468
原创 Golang的反射
import “reflect”reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,1、通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。2、调用ValueOf函数返回一个Value类型值,该值代表运行时的数据。3、Zero接受一个Type类型参数并返回一个代表该类型零值的Value类型值。接下来通过几个代码来演示package mainimport ( "reflect" "fmt")//专门演示
2022-04-24 09:30:21 791
原创 GO Web编程---网上书店(7) 发货、收货、查看订单
有了前面的基础,写后面这些业务代码特别简单只要更新order里的state变量就可以了,非常简单//UpdateOrderState 更新订单的状态,即发货和收货func UpdateOrderState(orderID string, state int64) error { //写sql语句 sql := "update orders set state = ? where id = ?" //执行 _, err := utils.Db.Exec(sql, state, orderI
2022-04-10 01:59:59 353
原创 GO Web编程---网上书店(6) 结账和生成订单
太致命了,这链接数据库根本不会报错!!!!改了半天,空指针bug,原来是连数据库就出错了,密码和数据库的名称没有改func init() { Db, err = sql.Open("mysql", "root:root1234@tcp(localhost:3306)/library") if err != nil { panic(err) }}订单订单时间,总数量,总金额,发货状态,用户package model//Order 结构type Order struct { .
2022-04-10 01:47:59 325
原创 GO Web编程---网上书店(5) 利用session实现购物车
(1)session的数据结构如下,首先一个ID表明是哪个,将用户名和用户ID,购物车保存上。package model//Session 结构type Session struct { SessionID string UserName string UserID int Cart *Cart}(2)购物车购物车里有购物项(也就是书),保存总数量,总金额,用户。有两个方法,获得总数,获得总金额。package model//Cart 购物车结构体typ
2022-04-10 01:04:09 867
原创 GO Web编程---网上书店(4.1) 添加、删除、更新图书
上一篇讲了查询图书并且分页,那是在图书管理那里,那么我们接着讲图书的管理。完成后项目结构实现的功能如下:1、删除图书在bookhandler.go新加一个函数//DeleteBook 删除图书func DeleteBook(w http.ResponseWriter, r *http.Request) { //获取要删除的图书的id bookID := r.FormValue("bookId") //调用bookdao中删除图书的函数 dao.DeleteBook(bookID)
2022-04-08 01:46:31 1459
原创 GO Web编程---网上书店(4)实现购物车,利用session
实现效果1、将图书加入购物车依然引入两个结构体购物车 Cart购物项 Cartitem,图书数量未知,一个购物项对应一种图书package modeltype Cart struct { CartID string CartItems []*CartItem //所有的商品 TotalCount int64 //商品数总和 TotalAmount float64 //金额总和 UserID int //购物车所属的用户}func (cart *Cart) GetTotalCo
2021-08-02 00:50:44 1287
原创 GO Web编程---网上书店(3)查询图书,并且分页
今天来实现获取图书的功能网站点击顺序main->后台管理->图书管理1、首先在model中创建图书的结构体,book.gopackage modeltype Book struct { ID int Title string Author string Price float64 Sales int Stock int ImgPath string}要实现分页,创建分页的结构体package modeltype Page struct { Books [
2021-07-20 00:10:31 984
原创 GO Web编程---网上书店(2)实现登陆/注册
书接上回,上个博客讲解了go语言如何创建服务器,解析模版等,今天,我们将实现登陆注册等功能,同时介绍一些新的函数1、在主目录下新建文件夹utils(工具),新建db.go文件`package utilsimport ( "database/sql" _ "github.com/go-sql-driver/mysql")var ( Db *sql.DB err error)func init() { Db, err = sql.Open("mysql", "root:root12
2021-07-19 22:31:26 1756
原创 GO Web编程---网上书店(1)
1、安装go环境 我是Mac环境具体步骤略 [复杂一点的这里是go mod相关配置](https://blog.csdn.net/weixin_44883180/article/details/118738140)2、IDE:Goland选择go models,因为它会自动创建go mod,之后的项目里用的包都放在这里,很方便,比gopath要好用下载html模版,之后的几天里都会用到,我是结合视频做的b站链接如果看我写的贴子运行对不上的话,去看视频,虽然很慢链接: https://p
2021-07-15 23:19:18 809 1
转载 go mod使用解决package not found
原文:https://www.jianshu.com/p/760c97ff644c我个人觉得,一个包管理工具应该有以下功能:基本功能依赖管理依赖管理依赖包版本控制对应的包管理平台可以私有化部署加分:代码包是否可以复用构建,测试,打包发布上线对比上面几点:目前做的最好的也就 maven了,gradle没有使用过,不知道。今天主角是go mod,先来谈谈没有使用go mod之前的问题。使用go path问题代码开发必须在go path src目录下,不然,就有问题。依赖手动管理
2021-07-14 21:47:43 5424
原创 用javac编译servlet类出现问题
用javac编译servlet类出现问题 本人写了一个关于servlet的webapp,但是在用javac编译的时候,用命令行 javac XXX.java开始编译,然后出现了一大堆错误,如下:FirstServlet.java:7: 错误: 找不到符号public class FirstServlet extends HttpServlet^符号: 类 HttpServletFirstServlet.java:9: 错误: 找不到符号public void service(HttpServ
2020-12-26 16:22:41 1926 3
原创 几种古典密码学算法的C实现
代码实现#include <stdio.h>#include <iostream>#include <stdlib.h>#include <string>#include <string.h>using namespace std;//凯撒密码char kaisa_e(){ char passwd[100],encrypted[100]; int i,j,k,t,move; printf("输入要
2020-10-11 11:03:49 1926
原创 顺序栈的具体实现
顺序栈#include <stdio.h>#include <iostream>#include <stdlib.h>#include <string>#include <string.h>using namespace std;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{ int * base; int * top;
2020-10-10 22:46:03 166
原创 HDU 1686 Oulipo 求模式串在主串中出现的次数【可重叠】
http://acm.hdu.edu.cn/showproblem.php?pid=1686题意:求模式串在主串中出现的次数【可重叠】Sample Input3BAPCBAPCAZAAZAZAZAVERDIAVERDXIVYERDIANSample Output130对代码中神奇的地方进行解释:那么3的意义可以表示为可见next[len2]的意义:前缀和后缀的最...
2019-08-06 10:00:42 513 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人