Go语言中文网 为您找到相关结果 348

Go语言学习笔记1/2

书籍:《Go语言编程》 Chap 1 初识Go语言 1.Go语言主要特性:自动垃圾回收,更丰富内置类型,函数多返回值,错误处理,匿名函数和闭包,类型和接口(不支持继承和重载,仅支持组合),并发贬称,反射,语言交互性。 2.Go语言的main函数不能带有参数也不能有返回值。Go语言函数定义: func 函数名(参数列表) (返回值列表){//函数体} 3.编译:go build hello.go;编译运行,不产生中间编译文件和执行文件:go run hello.go Chap 2 顺序编程 1.Go语言不需要使用分号。 2.变量声明使用关键字var,格式为:var 变量名 变量类型 3.变量初始化的三种方式: var v1 int = 10 var v2 = 20//自动推导 v3 := 30...阅读全文

博文 2016-08-18 13:00:03 conanswp

golang 不定参数列表

package main import "fmt" func func1(a, b int) (result int) { /* 输入两个参数,返回两个参数相加的结果 */ result = a + b return } // 不定参数列表 func func2(args ...int){ //js 解构 for _, data := range args{ fmt.Println(data) } } func main() { //result := func1(333, 333) //fmt.Printf("result = %d\n", result) //func2(1,2,3,4,5,6,) func2() ...阅读全文

博文 2020-04-05 02:32:43 小麦客

gorose orm新版本(0.8.0)发布,新增连接池等特色功能

gorose orm新版本(0.8.0)发布,新增连接池等特色功能 经过几个日夜, gorose群众多个成员的共同艰苦奋战, 全新版本 0.8.0 发布, 在遵循简单易用的基础之上, 做出了许多改进. gorose orm既然号称 gol orm中最风骚的orm, 这次的改进, 也是风骚范儿十足, 下面我们一起来看看改进后的特色吧: 一. 按照开源项目标准重构目录,让更多的人可以自由协作共同开发 /docs/ ---- 文档目录, 这里包含多个语言的不同使用文档 /drivers/ ---- 不同数据库的驱动目录, 可以自由增加任何其他数据库的目录 /examples/ ---- 使用示例目录, 可以在这里找到大部分的用例 /test/ ---- go testing 自动测试, 包括简单的...阅读全文

小白想求问一下这个函数定义的时候只有一个参数,为什么使用的时候传了两个

代码如下: t := func(obj meta.Object) reflect.Type { return reflect.TypeOf(obj).Elem() } TypeMap["first"] = t((*first.ReplicaSet)(nil)) 我能理解这个函数t是用反射求指针所指向的类型,但引用的时候为什么要加个(nil)呢,为什么不是t(*first.ReplicaSet...阅读全文

Go语言_array,slice,map

首先庆祝下golang终于通过了gfw的审核,可以不用翻墙访问了。goer就可以光明正大地访问http://golang.org/ 这次还是要说说array,slice,map。虽然前面已经说过了,但是实际使用中发现对这几个的使用和理解还是不够详细 现在再重新看看这几个类型 array类型 array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。但是和C中的数组相比,又是有一些不同的: http://www.cnblogs.com/yjf512/archive/2012/06/14/2549929.html 1 Go中的数组是值类型,换句话说,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份 2 如果Go中的数组作为函数的参数,那么实际传递的参...阅读全文

博文 2015-06-17 20:15:59 ywh147

golang 接口赋值

12345678910111213141516171819202122232425262728293031package main import ( "fmt" ) type LesssAdder interface { Less(b Integer) bool Add(b Integer) } type Integer int func (a Integer) Less(b Integer) bool { return a < b } func (a *Integer) Add(b Integer) { *a += b } func main() { var a Integer = 1 var b LesssAdder = &a fmt.Println(b) //var c LesssAd...阅读全文

博文 2018-07-11 19:35:53 hgqxjj

了解Flannel

概述 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。 简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。在Kubernetes的网络模型中,假设了每个物理节点应该具备一段“属于同一个内网IP段内”的“专用的子网IP”。例如: 节点A:10.0.1.0/24 节点B:10.0.2.0/24 节点C:10.0.3...阅读全文

博文 2017-04-21 10:52:32 面码酱

Go中数组的使用

// code_012_array_element project main.go package main import ( "fmt" ) func modify(array [5]int) { array[0] = 10 fmt.Println("In modify(), array values:", array) } func modify01(array01 *[5]int) { (*array01)[0] = 10 fmt.Println("In modify(), array01 values:", *array01) } func main() { // var n int = 10 // var a[n]int //数组长度不能为变量 var a [10]int //ok...阅读全文

博文 2018-10-04 17:35:14 ck_god

user.go

package models type User struct { UserId string `json:"username" db:"id"` Username string `json:"username"` Password string `form:"password" json:"password"` Account string `form:"account" json:"account" db:"account"` Addr string `form:"addr" json:"addr"` Createuser string `form:"createuser" json:"createuser"` Area string `form:"area" json:"area"` ...阅读全文

博文 2016-11-11 07:00:05 u012576527

go语言学习笔记之slice用法

一、slice的概念: Slices(切片)slice是概念上一个结构包含三个域:一个数组的指针、长度和容量。切片支持[]操作符来访问底层数组的元素。内置的len函数返回的切片长度。内置的的cap函数返回切片的容量。 切片是引用类型,这意味着如果你将一个切片赋值给另外一个切片,这两个切片将引用同一个底层数组。 二、如何创建slice 创建切片可用以下两种方法: (1)直接创建: s := make([]int, 10) 创建了名为s 的,有10个元素(长度等于10)的整数类型切片 如果创建后没有给slice赋值,那么slice的值为创建类型的默认值,如: packagemain import"fmt" funcmain(){ s:=make([]int,10) fmt.Println(s) ...阅读全文

博文 2015-06-17 23:07:39 wuwenxiang91322

go语言学习---数组和slice

数组array array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。但是和C中的数组相比,又是有一些不同的: 1. Go中的数组是值类型,换句话说,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份 2. 如果Go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。这个和C要区分开。因此,在Go中如果将数组作为函数的参数传递的话,那效率就肯定没有传递指针高了。这个是不是有点陷阱的感觉? 3. array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。 自己理解: 1. 数组有点像是个固定长度,内部数据都是同样类型的结构体。 2. 数组名不能当做指针来用!! slice 1 slice是...阅读全文

博文 2015-06-17 23:01:42 jwkfreedom

Go 基础篇教程-变量

**一、Go内建变量类型** ``` bool string (u)int、(u)int8、(u)int16、(u)int32、(u)int64 uintptr 指针 byte rune 字符型,32 位,类比 char float32、float64 complex32、complex64 复数 ``` `类型转换 type(varName)` ``` func typeConversion () { var int a = 5 var b = "str" c := 3 var int d d = int(a / c) fmt.Println(d, b) } ``` **二、变量定义** 四种变量定义类型: ``` 第一种完全体:var name type = value 第二种简单体:v...阅读全文

请问go进行事务管理,必须要手动开头启动session,结束关闭吗,有没有类似java的注解机制

```go session := engine.NewSession() defer session.Close() // add Begin() before any action err := session.Begin() user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} _, err = session.Insert(&user1) if err != nil { session.Rollback() return } user2 := Userinfo{Username: "yyy"} _, err =...阅读全文

golang什么时候应该把方法绑定在struct的值上而不是指针上?

golang 支持 struct 也支持 struct 的指针。一个常见的困惑是既然struct 指针存在了,为什么不干脆只有struct的指针呢?两个原因: struct不可空,而struct指针可以为nil []my_struct的内存是连续的,而[]*my_struct只有指针是连续存放的,而实际的内容则需要跟随指针去读取 同时struct应该也有助于escape analysis,使得对象可以分配在栈上,而不用去进行多线程争抢的分配堆上的内存。但是这只是一个猜想。 一个更有趣的问题是,什么时候方法应该绑定在struct上,而不是struct指针上?考虑以下测试程序 type MyStruct struct { field int } local_variable := MyStruc...阅读全文

博文 2017-02-09 08:33:47 taowen

goLang slice 和 array区别

array 类型 array是固定长度的数组,使用前必须确定数组长度 golang array 特点: golang中的数组是值类型,也就是说,如果你将一个数组赋值给另外一个数组,那么,实际上就是整个数组拷贝了一份 如果golang中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针 array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。 slice类型 slice是一个引用类型,是一个动态的指向数组切片的指针。 slice是一个不定长的,总是指向底层的数组array的数据结构。 1.创建slice 动态数组创建,类似创建数组,但是没有指定固定长度 var al []int //创建slice sl := make([]int,10...阅读全文

博文 2018-02-05 17:34:37 soledad

如何通过reflect 将一个interface 转换成一个具体的struct类型

type foo struct{ name } var test1 interface{} test1 = make([]foo,3) func ts(param interface{}) ts(test1) 这个时候reflect.TypeOf(test1) //[]foo 这个test1 是一个参数也有可能是任意struct,形参的类型是interface 我怎么通过 reflect 把这个test1转换成具体的[]foo类型呢 或者是任意的什么[]type ...阅读全文

GO语言学习-函数探究

GO语言支持多值返回。 GO函数在在开始时,会对已命名的返回值或者结果参数,根据其类型进行零初始化。 延迟代码defer语句 :在defer后指定的函数会在函数退出前调用, 延迟的函数是按照LIFO(后进先出)的顺序执行。 GO语言中函数可以作为值来调用。 例 a := gogogo(){ fmt.Println("GO") } //定义一个匿名函数gogogo a() //这里运行a时,就是运行gogogo 利用这一点,可以使用函数名作为一个参数值来使用,这样这个函数就可以用作回调函数来使用...阅读全文

博文 2015-06-17 23:00:25 phlong999

golang实现路由中间件middleware

registerHandlers.go package router import ( "../ctrl" "../funcs" "github.com/julienschmidt/httprouter" "net/http" ) type middleWareHandler struct { r *httprouter.Router } func NewMiddleWareHandler(r *httprouter.Router) http.Handler { m := middleWareHandler{} m.r = r return m } func (m middleWareHandler) ServeHTTP(w http.ResponseWriter, r *http.Requ...阅读全文

博文 2019-07-07 17:33:42 梁十八

云解析DNS使用教程

课程介绍 云解析(Domain Name System,简称DNS)是一种高可用性、高可扩展的权威DNS服务和DNS管理服务。它的目的是为企业和开发者提供稳定、安全、智能的把网站域名或应用资源转换为计算机用于互连的数字 IP地址,从而将最终用户的访问路由到相应的网站或应用资源上同时提供DNS的管理服务。 产品详情:https://wanwang.aliyun.com/domain/dns/ 课时列表 • 课时1:购买与绑定 • 课时2:解析设置 • 课时3:智能解析 • 课时4:网站监控 • 课时5:全球负载均衡 开始学习:http://click.aliyun.com/m/27873/ ...阅读全文

go web编程——自定义路由设计

本文主要讲解go语言web编程中自定义路由器的设计。在此之前需要先了解一下go语言web编程中路由与http服务的基本原理,可以参考笔者另一篇博文:go web编程——路由与http服务。我们已经知道,go的默认路由器只支持路由绝对匹配,无法支持正则匹配,这样就没办法设计一些简洁、优雅的路由。那怎么让路由支持正则匹配呢?通过阅读源码,可以发现http服务器和路由器之间是解耦的,调用 http.ListenAndServe(addr string, handler Handler) 方法启动http服务的时候,若第二个参数指定为 nil ,则会使用go的默认路由器,否则使用这个参数指定的路由器。所以,我们可以设计一个支持正则匹配的路由器,然后在第二个参数指定为我们自定义的路由器。首先,我们要知...阅读全文

博文 2019-12-19 16:12:45 JetWu

golang不定参数

1、固定类型的不定参数 语法格式:argumentName ...Typeackage mainimport "fmt"func f1(args ...int) { for _, v := range args { fmt.Println(v) }}func main() { f1() f1(1) f1(3, 5)}2、任意类型的不定参数interface{} : 空接口类型,因为任意类型都实现了空接口,因此可以将任意类型对象赋值给空接口。package mainimport "fmt"func f1(args ...interface{}) { for _, v := range args { fmt.Println(v.(int))//这里使用了接口类型断言 }}func main() ...阅读全文

博文 2018-03-29 16:23:45 FabioPLA

《The.Go.Programming.Language.2015.11.pdf》之数组和切片

1数组 数组的声明和初始化 数组成员的访问 数组的比较 数组作为函数参数 2切片 append函数 利用append实现特殊函数 4.1数组 数组在go中很少使用,经常用到的是slice,这个后面再讲 数组的声明和初始化 var a [3]int //包含3个整数的数组 var q [3]int = [3]int{1, 2, 3} var r [3]int = [3]int{1, 2} //[...]这样的情况,数组长度由初始化的数据个数决定。 q := [...]int{1, 2, 3} //数组长度为3 数组成员的访问 for i, v := range a { fmt.Printf("%d %d\n", i, v) } 对于数组来说,数组长度也是数组类型的一部分,所以[3]int和[4...阅读全文

博文 2016-11-26 05:00:01 KingEasternSun

Golang编译器自动检测类型是否实现接口

package main import "io" type myWriter struct { } func main() { // 检查 *myWriter 类型是否实现了 io.Writer 接口 var _ io.Writer = (*myWriter)(nil) // 检查 myWriter 类型是否实现了 io.Writer 接口 var _ io.Writer = myWriter{} } 注释掉为 myWriter 定义的 Write 函数后,运行程序,报错信息:*myWriter/myWriter 未实现 io.Writer 接口,也就是未实现 Write 方法 解除注释后,运行程序不报错。 实际上,上述赋值语句会发生隐式地类型转换,在转换的过程中,编译器会检测等号右边的类型...阅读全文

博文 2019-05-05 21:34:57 一只努力的微服务

go语言学习得很迷惑啊

method这里我觉得很迷惑,为毛在实现接口的时候,如果是指针形式receiver的method就不是实现这个接口了,如果是参数形式的receiver就是实现了这个接口呢!? 例如: type i interface { Name() string } type s struct { name string } //实现了这个i接口了 func (a i) Name() string{ return a.name } //没实现这个i接口 func (a *i) Name() string{ return a.name ...阅读全文

博文 2016-10-04 17:00:01 asdw2016

go 中的路由

方法 1 http.HandleFunc("/", indexHandler) err := http.ListenAndServe(":8880", nil) 方法 2 //httprouter router := httprouter.New() router.GET("/", Index) router.POST("/adduser/:uid", adduser) log.Fatal(http.ListenAndServe(":8080", router)) 方法 3 //gin router := gin.Default() router.GET("/",getting) router.POST("/",posting) router.Run(...阅读全文

博文 2017-05-31 07:03:27 中柠檬

为什么 Go 有些时候指针参数在函数内不需要 `*ptr` ?

初学者对这个比较困惑 下面这个例子修改一个全局变量这里必须使用 `*ptr` ```go var name = "name" func changeName(name *string) { *name = "change" } ``` 第二个例子是面向对象的定义对象方法 reciver 是指针对象,函数体内不需要 `*reciver` 就可以使用。 golang 会自动判断,这个我理解。 ```go type person struct { id int name string } func (p *person) setName(name string) { // 会自动识别为 `*p` p.name = nam...阅读全文

容器云架构中使用gorouter+haproxy作为流量入口

​ 小贴士 Gorouter 项目地址:https://github.com/cloudfoundry/gorouter/Gorouter来源于CloudFoundry。是一个高性能、轻量级的路由器及负载,它是整个平台的流量入口,负责分发所有的http请求到对应的instance。它在内存中维护了一张路由表,记录了域名与实例的对应关系,所谓的实例自动迁移,靠得就是这张路由表,某实例宕掉了,就从路由表中剔除,新实例创建了,就加入路由表。 Gnatsd Gnatsd来源cloudfoundry,是一个开源轻量高性能的消息系统,gorouter依赖它来作为消息系统,进行PUB/SUB操作。 官方地址:http://nats.io/ 项目地址:https://github.com/apcera/gn...阅读全文

博文 2019-04-18 09:34:41 程序员同行者

DockOne微信分享(六十六): Docker网络方案初探

【编者的话】这次主要跟大家聊聊Docker的网络方案,首先是现有容器网络方案介绍, 接下来重点讲解Calico的特性及技术点,作为引申和对比再介绍下Contiv的特性,最后给出对比测试结果。 随着容器的火热发展,数人云越来越多的客户对容器网络特性要求也开始越来越高,比如: 一容器一IP;多主机容器互联;网络隔离;ACL;对接SDN等等。 这次主要跟大家聊聊Docker的网络方案,首先是现有容器网络方案介绍, 接下来重点讲解Calico的特性及技术点,作为引申和对比再介绍下Contiv的特性, 最后给出对比测试结果。 现有的主要Docker网络方案首先简单介绍下现有的容器网络方案,网上也看了好多对比,大家之前都是基于实现方式来分,以下两个方案引自作者彭哲夫在DockOne的分享: 隧道方案通过...阅读全文

博文 2017-06-25 16:25:07 Dataman数人科技

【go】插入排序

在学习go的过程中,正好在看《算法导论》,于是实现了一下插入排序:package mainimport ( "fmt" "rand" "time")func main() { arr := Random(10) array := Copy(arr) result := Sort(array) fmt.Println("arr:\t", arr) fmt.Println("result:\t", result)}func Sort(arr []int32) []int32 { length := len(arr) for i := 1; i < length; i++ { key := arr[i] var j int for j = i - 1; j >=0 && arr[j] > key;...阅读全文

云解析DNS使用教程

课程介绍 云解析(Domain Name System,简称DNS)是一种高可用性、高可扩展的权威DNS服务和DNS管理服务。它的目的是为企业和开发者提供稳定、安全、智能的把网站域名或应用资源转换为计算机用于互连的数字 IP地址,从而将最终用户的访问路由到相应的网站或应用资源上同时提供DNS的管理服务。 产品详情:https://wanwang.aliyun.com/domain/dns/ 课时列表 • 课时1:购买与绑定 • 课时2:解析设置 • 课时3:智能解析 • 课时4:网站监控 • 课时5:全球负载均衡 开始学习http://click.aliyun.com/m/27873...阅读全文

​PDX TeX—遵循ERC20规范的安全虚拟资产交换平台

PDX TeX (Token Exchange) 是构建于 PDX Utopia 区块链协议栈基础之上的遵循ERC20规范的安全虚拟资产交换平台,以智能合约的形式对外提供服务接口,以完全去中化方式运行,安全稳定,可完全防止传统中心化交易所的各种数据作弊手段。PDX TeX 被设计为可插拔模块并兼容 Ethereum 协议,兼容 Solidity ABI 协议,符合 Web3.js 接口规范,提供友好的 Dapp 开发者接口;软件主要开发语言基于 golang 和 solidity ,对于终端接入方还会用到 java、nodejs 等完成对接。目标1、提供 ERC20 合约注册表,在合约部署时系统自动拦截 ERC20 合约并将地址信息填入注册表,并对外提供获取注册表信息功能;2、提供挂单功能,...阅读全文

博文 2019-12-10 01:32:43 PDXbaap

关于路由

**自学习golang以来,无论是beego还是web.go亦或是站长大人的dreamgo的路由,感觉都不明白是怎么写的,下面我把自己的一种实现方式给写出来,希望大家指点一二。** `目录结构` ``` web controller index.go xxx router route.go util util.go view index.html main.go #入口 ``` `web入口路由handler处理` ``` func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) } ...阅读全文

关于:http包疑问

```go func main() { http.HandleFunc("/hello", hello) http.ListenAndServe("", nil) } ``` ``` 这两条语句是怎么产生联系的.mux路由表通过什么方法访问?是在main()主线程空间生成了什么对象吗? 执行完http.HandleFunc("/hello", hello)函数没人返回任何对象. 是不是通过hello(handlerfunc)传进去的 *http.request产生联系的?如果是.在main空间怎么访问到*http.request. ``...阅读全文

gf框架之gvalid – 强大灵活的数据校验/表单校验模块

文章目录 校验规则校验方法使用示例单数据校验多数据校验 gf提供了非常强大易用的数据校验功能,通过gvalid包提供,封装了40种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验等特性。由于gf是模块化、低耦合设计,gvalid包也可以在项目中单独引入使用。 使用方式: import "gitee.com/johng/gf/g/util/gvalid" 1 import "gitee.com/johng/gf/g/util/gvalid" 校验规则 40种常用的校验规则: required 格式:required 说明:必需参数 required-if 格式:required-if:field,value,... 说明:必需参数(当任意所给定字段值与...阅读全文

heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)

heartbleeder 可以探测你的服务器是否存在 OpenSSL CVE-2014-0160 漏洞 (心脏出血漏洞)。 什么是心脏出血漏洞? CVE-2014-0160,心脏出血漏洞,是一个非常严重的 OpenSSL 漏洞。这个漏洞使得攻击者可以从存在漏洞的服务器上读取64KB大小的内存信息。这些信息中可能包含非常敏感的信息,包括用户请求、密码甚至证书的私钥。 据称,已经有攻击者在某宝上尝试使用漏洞读取数据,在读取200次后,获取了40多个用户名和7个密码。 如何使用 heartbleeder 检测心脏出血漏洞? 安装 可以在gobuild.io下载编译好的二进制文件的压缩包。包括Windows、Linux、MacOSX。 由于服务器操作系统最常用的是Linux,因此这里提供一下下载Li...阅读全文

博文 2017-02-09 13:31:56 weakish

gf框架之模板引擎 - 基本用法

文章来源:http://gf.johng.cn/591642 控制器视图 gf为控制器提供了良好的模板引擎支持,由gmvc.View视图对象进行管理,提供了良好的数据隔离性。控制器视图是并发安全设计的,允许在多线程中异步操作。 func (view *View) Assign(key string, value interface{}) func (view *View) Assigns(data map[string]interface{}) func (view *View) Parse(file string) ([]byte, error) func (view *View) ParseContent(content string) ([]byte, error) func (vie...阅读全文

golang-101-hacks(12)——切片作为函数参数传递

注:本文是对golang-101-hacks中文翻译。 在Go语言中,函数参数是值传递。使用slice作为函数参数时,函数获取到的是slice的副本:一个指针,指向底层数组的起始地址,同时带有slice的长度和容量。既然各位熟知数据存储的内存的地址,现在可以对切片数据进行修改。让我们看看下面的例子: In Go, the function parameters are passed by value. With respect to use slice as a function argument, that means the function will get the copies of the slice: a pointer which points to the starting ...阅读全文

博文 2019-06-04 01:32:39 羊羽share

Go 实现 自动检索 API 错误码代码行 并 打印成文档,例 markDown 形式等

#### 源码--GitHub:< ahref="https://github.com/af913337456/ErrorDocAutoPrinter">https://github.com/af913337456/ErrorDocAutoPrinter 如果你是一个`后端Server程序`开发人员。你应该知道,在你写完`API`之后,是需要给`客户端`的同学提供`调用`文档的。 例如下面一个`api handler`,`创建一个用户`。 ```golang func HandleCreateUser(w http.ResponseWriter,r *http.Request) map[string]interface{} { if r.Body ==...阅读全文

验证码绕过漏洞

验证码绕过漏洞 什么是验证码绕过漏洞?比如说,开发人员在考虑用户登录的时候,为了安全添加了验证码验证,但是在代码层面他只做了if(存在验证码){验证登录}存在验证码的时候,允许登录验证,但是没有考虑到验证码不存在的情况。If(存在验证码){}else{不存在验证码}这样我们通过抓包删除验证码的参数,就可以绕过验证,这就是常出现的逻辑漏洞。验证码绕过的方向:1. 通过验证码的逻辑进行入手2. 通过Python,Golang等程序自动识别验证码绕过存在的情况:1. 前端验证验证码并没有进行后端验证。直接抓包进行跑数据包,反正没有验证码的阻碍。2. 验证码设置了,但是没有校验,乱输验证码也能验证成功。(估计老板没给开发发工资吧)3.验证码可以重复使用,比如现在的验证码是1111,虽然登陆失败后但是...阅读全文

博文 2020-04-09 18:32:54 RainClv

golang之条件编译

起因 在看gin的时候发现里面有段 Gin uses encoding/json as default json package but you can change to jsoniter by build from other tags.$ go build -tags=jsoniter . go build -tags go编译的时候启用参数-tags 表示根据tgs的参数进行选择不同的文件来编译 需要注意的是: -tags参数的值可以选择多个,例如: $ go build -tags=jsoniter,numbers go文件里的build参数语法 必须将build参数放到文件顶部,并且和packeg 空出一行的间隔 // +build jsoniter package model...阅读全文

博文 2020-01-09 16:32:41 Cazy

beego 框架使用(二)controllers 与 routers 使用

有好几种创建路由的方式,我就将一个我比较常用简单的,大家有什么好的,可以自己看beego的官方文档 routers这个就是http后缀路径放的地方 controllers 就是处理业务逻辑的用的 先写一个尝试一下吧 ![image.png](https://static.studygolang.com/180817/ccdba9a00ec4de9ee987154faefaa954.png) 在写路由层 ![image.png](https://static.studygolang.com/180817/def958e1a9f2d335b892958bb4cfac6a.png...阅读全文

博文 2018-08-17 17:39:08 dai1512

Go 语言接口详解(二)

这是『就要学习 Go 语言』系列的第 20 篇分享文章提醒:文末给大家留了小练习,可以先看文章,再做练习,检验自己的学习成果!我们接着上一篇,继续讲接口的其他用法。实现多个接口一种类型可以实现多个接口,来看下例子: 1type Shape interface { 2 Area() float32 3} 4 5type Object interface { 6 Perimeter() float32 7} 8 9type Circle struct {10 radius float3211}1213func (c Circle) Area() float32 {14 return math.Pi * (c.radius * c.radius)15}1617func (c Circle) Per...阅读全文

博文 2019-07-20 09:13:29 Golang来啦