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

Golang Web服务器自定义路由

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 最近公司有一个项目不算大,但是流量预计不小,分配到我这来了,要求快速上线,由于本人研究Golang两个多月(本人愚钝),加上对GOlang的痴迷,考虑偷偷的(其实是项目总监被我说服了)使用go来写web服务。 看到这我只能说,瞎扯淡啥!! 上菜: 首先自定义路由的前提是路由对象实现ServeHTTP方法 自定义路由写法一: 1. 路由结构体对象定义 type Router...阅读全文

博文 2018-01-09 15:33:21 90design

Go 多态功能实现

Go 多态功能实现 Go本身不具有多态的特性,不能够像Java、C++那样编写多态类、多态方法。但是,使用Go可以编写具有多态功能的类绑定的方法。为什么这么说呢?因为Go使用struct构建类,根据不同类调用不同的方法。下面将展示如何使用Go编写多态功能。 package main import ( "fmt" ) type strCase struct{} type intCase struct{} func (text strCase) Add(x string, y string) string { return x + y } func (number intCase) Add(x int, y int) int { return x + y } func StartPolymorp...阅读全文

博文 2016-08-04 20:00:05 abcijkxyz

用于写 TCP 代理tcpproxy

包 tcpproxy 允许用户构建 TCP 代理,可选地根据 HTTP/1 主机头和 TLS 连接中的 SNI 主机名进行路由决策。 使用示例 ``` var p tcpproxy.Proxy p.AddHTTPHostRoute(":80", "foo.com", tcpproxy.To("10.0.0.1:8081")) p.AddHTTPHostRoute(":80", "bar.com", tcpproxy.To("10.0.0.2:8082")) p.AddRoute(":80", tcpproxy.To("10.0.0.1:8081")) // fallback p.AddSNIRoute(":443", "foo.com", tcpproxy.To("10.0...阅读全文

Golang RabbitMQ Demo

AMQP协议 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。 RabbitMQ 就是 amqp 协议的Erlang的实现。 AMQP的模型架构的主要角色,生产者、消费者、交换器、队列。 生产者、消费者、服务节点 生产者(Producter) 消息投递方 消费者(Consumer) 消息接收方 服务节点(Broker) 消息的服务节点,基本上可以简单的把一个broker看成一台消息服务器 交换器、队列、绑定 绑定 Rabbitmq中需要路由键和绑定键联合使用才能使生产者成功投递到队列中去。 RoutingKey 生产者发送给交换器绑定的Key BindingKey 交换器和队列绑定的Key 生产者将消息投递到...阅读全文

博文 2019-12-17 15:32:40 hellocr

自适应网站制作教程

想必很多人都跟小编一样,第一次听到自适应网站这个词的时候,都感觉很陌生,不了解是什么,是一个什么类型的网站。那什么是自适应网站呢?前几年Ethan Marcotte提出了“自适应网页设计”这个名词,指的是可以自动识别屏幕宽度,做出相应调整的网页设计。其实简单来讲,自适应网站就是能够适应不同分辨率屏幕的网站,一站通行,不需要再为每一个不同屏幕大小的设备重新制作一个网站版本。那自适应网站该如何制作呢?自适应网站与响应式网站区别是什么? 一、允许网页宽度自动调整 首先,在网页代码的头部,加入一行viewport元标签。 ...阅读全文

golang log日志笔记

日志是程序中比较重要的信息,但有时又不想输出到屏幕上。下面就对golang中把日志输出到指定文件做如下记录: package main import ("flag""fmt""log""os") var ( logF = flag.String("log", "test.log", "Log file name") //将运行时参数 地址 绑定到logF 运行时没带参数默认logF为test.log)func main() {flag.Parse() //解析参数付给logFoutfile, err := os.OpenFile(*logF, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) //打开文件,若果文件不存在就创建一个同名文件并打开if err !...阅读全文

博文 2017-10-30 00:00:01 Czc963239044

UCloud下一代VPC架构平滑演进方案和技术详解

前言2月27日,UCloud推出了下一代VPC网络(下面简称VPCng)。VPCng旨在解决客户网络使用场景中的痛点,如IP网段的自主规划、跨可用区容灾、VIP跨区高可用方案、混合云和公有云的无缝连接等。UCloud认为VPC(Virtual Private Cloud)是隶属于租户的虚拟网络。在虚拟网络中租户能完全掌控网络环境,自主管理所有的云服务资源,并能灵活扩展混合云能力,VPC的最终目标是给用户提供和传统网络完全一致的功能。这次推出的新特性如灵活的地址空间管理、VIP跨可用区都是业界首创。不过用户看不见的是,我们在后台服务做了大量工作,许多控制面和转发面的逻辑被重构。这些新功能不仅部署在新机房,UCloud在存量机房通过平滑升级,使得用户大量的已部署业务也能享受到这些新功能。存量机房...阅读全文

博文 2017-03-17 05:52:19 大爽兔

redigo建立conn的时候如何增加password参数

因为要使用ECS搭建Golang的服务,但是redis要使用远程连接的方式连接另一台redis,但是需要设置登录密码,但是在redigo建立connection的时候,没有地方可以穿password的相关参数,类似java 的jedis中的password参数,所以想问问如何使用redigo连接有密码的redis数据...阅读全文

golang学习笔记9:函数参数与返回值

按值传递和按引用传递Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量,比如 Function(arg1)。如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名前面添加&符号,比如 &variable)传递给函数,这就是按引用传递,比如 Function(&arg1),此时传递给函数的是一个指针。如果传递给函数的是一个指针,指针的值(一个地址)会被复制,但指针的值所指向的地址上的值不会被复制;我们可以通过这个指针的值来修改这个值所指向的地址上的值。(译者注:指针也是变量类型,有自己的地址和值,通常指针的值指向一个变量的地址。所以,按引用传递也是按值传递。)几乎在任...阅读全文

博文 2018-10-21 00:34:38 编程老司机

Golang ...T 的几种用法

在Go中,经常可以见到 …T 能概括一下什么场合会用到…T吗 用在函数参数中 若函数的最后一个参数是…T类型,这个参数可传入任意个T类型的参数,在函数中…T的类型为[]T. 在这个例子函数中,你可以这样使用这个函数Sum(1,2,3)orSum(). func Sum(nums ...int) int { res := 0 for _, n := range nums { res += n } return res } 用在解序列 可以传入一个slice,然后用…解开它,注意在这里没有新的slice被创造。在这个例子函数中,我们把slice传入Sum函数 primes := []int{2, 3, 5, 7} fmt.Println(Sum(primes...)) // 17 在append...阅读全文

博文 2019-04-13 14:34:41 一根薯条

Go 测试工具 GoConvey

GoConvey 是个相当不错的 Go 测试工具,支持 go test。可直接在终端窗口和浏览器上使用。 特点: * 直接与 go test 集成* 巨大的回归测试套件 * 可读性强的色彩控制台输出 * 完全自动化的 Web UI * 测试代码生成器 * 桌面提醒(可选) * 自动在终端中运行自动测试脚本 * 可立即在 [Sublime Text](http://www.sublimetext.com) 中打开测试问题对应的代码行 ([some assembly required](https://github.com/asuth/subl-handler)) ![image](http://static.oschina.net/uploads/spac...阅读全文

Golang在ARM/Linux平台上函数参数的传递

一.前言 作为一名初级的嵌入式软件开发从业者,工作中大部分项目以C语言实现。使用C语言来编写代码,通常我们可以预测到编译生成的汇编/机器编码的大致情况,在不同的芯片架构上,有其相应的ABI标准。而近年来逐渐流行起来的Go语言编程,虽然同样语法上和C语言语法都有较为简单的特点,也都是编译型的静态语言,但我们对它在基本类型——函数参数的传递方式就了解很少了。另外,Go语言的函数可以有多个返回值,其底层机制是如何实现的,也需要分析探究一下。 本文将记录Golang官方编译器生成的可执行文件在ARM/Linux平台上函数传递的分析过程。测试使用的设备是一部安卓手机,在其中安装了Bash、Git、Vim、GDB等开源软件(安装过程请参考https://pan.baidu.com/s/1i5o6Lwh中...阅读全文

博文 2016-10-13 13:00:01 yeholmes

golang interface类型的动态绑定

golang其interface类型, 实现了动态绑定. 1 import "fmt" 2 3 type ITest interface { 4 Test() 5 } 6 7 type A int 8 9 func (a *A) Test() { 10 fmt.Println(a) 11 } 12 13 func print(t ITest) { 14 fmt.Printf("%T", t) 15 } 16 17 func main() { 18 a := A(1) 19 print(&a) 20 } 输出结果是: *main.A 尤其注意, main函数中, print(&A), 如果传入A, 返回错误: "method has pointer receiver" 这里面的差别, 可以参考...阅读全文

博文 2017-11-09 11:00:01 codesay

Go restful 基础

来自自己的公众号:灰子学技术。在学习Go的restful的时候,尝试着写了下,如何实现一个Web服务器,从最简单的代码一步步写起来,算是一个练习帖子吧。1.Go中Web服务的实现方式,采用Http库,主要用到了两个函数,HandleFunc和ListenAndServe,一个用来注册函数,一个用来监听端口并提供服务。​​2.Restful通过添加路由来实现Web服务,通过router的注册来实现解析规则和函数的注册。将router添加到ListenAndServe中,用来实现数据的响应。​运行结果:​3.实现路径不同的阶段和格式的注册函数。​运行结果:​​4.使用Json API 来实现Restful的架子,其中的Http的body通过Json格式来写入数据。 ​输出:​欢迎关注公众号:灰子...阅读全文

博文 2019-09-14 11:00:58 ZhDavis

golang beego 路由个人理解

http://localhost:8084/v1/expand?shorturl=222222&longurl=2343423 beego.Router("/v1/match",&match.MatchController{}) beego.Router("/v1/reg", &user.RegController{}) beego.Router("/v1/log", &user.LogController{}) v1 /../ 相当于路径 match 相当于php里面的文件名一样 。 http://localhost/v1/log/match.php?username=aaaaaaaa&pass=ab9c64e8854703c14375abc9695b56ac&phone1=dsfsdfe...阅读全文

博文 2016-02-24 17:00:01 manlan123

[golang]如何看懂调用堆栈

之前也有文章讲过go调用堆栈的话题,但并没有完全讲清楚,这里补充里面缺漏的几个点。 阻塞 goroutine 1 [select, 2 minutes]: 方括号里的select表示阻塞原因,具体定义见runtime.waitReason 。 后面的时间是阻塞时间。需要注意的是这只是一个大概时间,是在gc的过程中标记的,所以如果这个goroutine不需要gc,那么永远也不会有值。 PC偏移 github.com/robfig/cron.(*Cron).run(0xc0000c44b0) cron.go:191 +0x28d 行号后面的16进制数是什么?pc偏移。是指函数入口(cron.(*Cron).run)到调用处(也就是行号指位置)的指令位置偏差。一般很少用到,除非下面这种特殊情况: ...阅读全文

博文 2019-01-06 14:34:44 一桶冷水

URL请求时,怎样向接口传递int64类型的参数

自己写了一个从本地输入url地址(当然是get请求),接口如下: Query( num int64 ) 这个num参数怎么传递呢?? 我自己测试,一直报错: ”Call with too few input arguments“ 这应该怎么解决呢??? PS:URL请求时,直接调用这个接口。测试一直报错,在网上也没有找到应该怎样传递这个参数的办法...阅读全文

golang月薪10k应该具备哪些知识?

对于程序员来说,10K不是一个很高的要求和门槛。具体到Go语言来说,现在接受大部分Go语言开发岗位的,还是以大的BAT以及TMD等这些大的互联网公司开展业务为主。这些大厂的薪资和人员素质也决定了不会是10K这个水平。如果要必须用10K衡量一下技能点位的话,其实这个就是个基础岗位的薪水水平。具体来说,只要掌握具备Go的一些语法,懂开发,能进行模块开发即可。按照下面的知识点来掌握:基本语法进制及转换 进制、进制转换、机器数和真值、原码、反码与补码变量与常量 变量概念、声明变量、常量及声明、特殊常量iota布尔型Bool数值型 整形、浮点型、byte、rune、uintptr字符串型复合类型(派生类型) 指针类型、数组类型、结构化类型、Channel类型、函数类型、切片类型、接口类型(interf...阅读全文

博文 2019-04-11 19:34:41 QFdongdong

Golang_tag

Golang tag也就是go语言中的注解 比如 type PostBody struct { Ids []int `json:"Id__in__int"` }`json:"Id__in__int"` 这一段内容就是Ids这个属性的一个tag 我们可以通过反射来获取这个tag的值 如下所示 package main import ( "fmt" "reflect" ) type PostBody struct { Ids []int `json:"Id__in__int"` } func main() { // s := "{\"Id__in__int\":[101010,101009],\"text__in__string\":[\"开单\",\"测试页\"]}" // var pb st...阅读全文

博文 2015-06-17 20:03:52 u012807459

币币交易能够减少成本方便快捷的兑换你想要的数字资产

数字资产是一个比较大的概念,币币交易平台主要是针对区块链数字资产之间的币与币之间的快捷兑换,减少用户的投资成本和时间成本。作为区块链技术的第一个实际应用场景,数字资产交易平台在很大程度上是在对区块链技术特点的推广,因此数字资产交易平台一直是数字资产的有力助手。玩家想要进入币圈就先要从购买数字资产开始。在进入“币圈交易”之前,想要购买数字资产有两个途径:1、找熟人购买 2、上平台用户可以通过 OTC 场外交易来完成法币与数字资产的兑换。场外法币交易类似于淘宝的 C2C 平台,用户直接与用户交易,而平台则作为担保方。找熟人购买的这种情况到目前为止是比较少的。所以就会上平台购买,因为在2017年九四之前是用法币交易(直接用法币购买数字资产,平台坐庄)。而在九四之后法币交易直接演变成了币币交易和场外...阅读全文

博文 2019-10-28 16:28:03 yanfaruiec

把别人的Tcl/Tk代码加入到Go语言里6 无框窗体

package mainimport "github.com/nsf/gothic"const init_script = ` catch { destroy .clock errorswindow } set w [ toplevel .clock ] wm withdraw . wm title $::w "clock" tk appname "clock" wm overrideredirect $::w 1 wm geometry $::w "+690+0" set ::time 12:00 label $::w.digital -textvar ::time -font "Arial 28" -fg white -bg #000000 pack $::w.digitalbind ....阅读全文

博文 2015-05-01 15:00:06 名字不能长

二、slice和数组的区别,map的注意事项 -go语言笔记

这次要说说array,slice,map。虽然前面已经说过了,但是实际使用中发现对这几个的使用和理解还是不够详细 现在再重新看看这几个类型 array类型 array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。但是和C中的数组相比,又是有一些不同的: 1 Go中的数组是值类型,换句话说,如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份 2 如果Go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针。这个和C要区分开。因此,在Go中如果将数组作为函数的参数传递的话,那效率就肯定没有传递指针高了。这个是不是有点陷阱的感觉? 3 array的长度也是Type的一部分,这样就说明[10]int和[20]int是不一样的。 a...阅读全文

博文 2016-03-22 13:00:01 alvine008

Golang error、panic

error是一个用于标准错误处理的接口,是内建的接口类型type error interface{ Error() string}errors包提供了New方法创建error结构体Errorf函数fmt中有一个返回error结构体的方法Errorf,内部使用errors包的New方法实现panic当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起panic异常。创建panicpanic内置函数支持任何参数值func panic(v interface{})recoverrecover用于从panic状态中恢复并重新获得流程控制权func recover() interface{}recover函数只在defer调用的函数中有效defer func(){ if ...阅读全文

博文 2018-10-28 02:34:41 水无寒

学习云数据库管理与数据迁移,还没来阿里云认证,你就OUT啦!

云数据库管理与数据迁移认证可以帮助学员掌握云数据库的概念,如何在云端创建数据库、将自建数据库迁移至云数据库MySQL版、数据导入导出,以及云数据库运维的常用操作。 认证流程 1购买认证 2学习课程/在线实验 3在线考试 4领取电子证书 课程学习 01 课程介绍 通过学习,可以了解本课程的主要内容及学习目标。 免费试听 02 云数据库简介与使用场景 通过学习,可以了解云数据库是什么,相对传统数据库的优势,以及使用场景。 免费试听 03 云数据库MySQL版的基本概念 通过学习,可以掌握云数据库MySQL版的分类,以及实例、白名单、访问模式等基本概念。 免费试听 04 创建实例、数据库与账号 通过学习,可以掌握在云数据库MySQL版中创建实例、数据库与账号的步...阅读全文

golang设置多核支持

21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>> golang默认使用单核单线程,可以通过调整或设置运行参数设置多核多线程支持 runtime.GOMAXPROCS(int) runtime.GOMAXPROCS(runtime.NumCPU()) 直接设置环境变量$GOMAXPROCS Go从1.5版本开始,默认采用多核执行,默认是你的CPU核心数,以前版本默认为1 (adsbygoogle = window.adsbygoogle || []).push({}); function googleAdJSAtOnload() { var element = document.createElement("script"); element.src = "/...阅读全文

博文 2018-09-01 14:33:12 Robin3D

golang学习笔记之-函数可变参数

语法 参数名 ... 参数的类型 注意点: 如果函数的参数是可变参数,同时还有其他的参数。可变参数要放在形参列表的最后 一个函数的参数列表中,最多只能有一个可变参数。 直接上代码演示: package main import "fmt" func getAdd(nums ... int) { sum := 0 for i := 0; i < len(nums); i++ { sum += nums[i] } fmt.Println(sum) } func main() { //需求:n个整数的和 getAdd(1, 2, 3) s1 := []int{5, 6, 7, 8} getAdd(s1...) //可变参数,调用需要加...必须这样写 ...阅读全文

博文 2018-09-02 20:34:42 Maggie_up

.net的快递鸟物流单号自动识别查询api接口demo实例

1、应用场景(1)PC端、移动端应用或网站应用集成运单物流信息查询功能时,只需要录入单号即可完成查询,无需用户输入快递公司。(2)电商网站要在快递鸟查询或者订阅运单时,可通过单号识别先行判断物流公司后,再订阅到快递鸟。2、是否需要授权要Free申请服务3、接口描述/说明API ID:点击申请API Key:点击申请示例(1)请求示例JSON格式(1)该接口仅对运单号做出识别,识别可能属于的一家或多家快递公司。(2)接口并不返回物流轨迹,用户可结合即时查询接口和订阅查询接口完成轨迹查询、订阅的动作。(3)接口识别会返回一家或者多家快递公司,返回的数据根据快递鸟大数据分析结果排序,排名靠前的命中率更高。(4)若识别失败,快递鸟返回的匹配结果为空。(5)接口支持的消息接收方式为HTTP POST,...阅读全文

博文 2019-09-09 15:36:04 fire70

关于iris-api我的入门级结构

####入口:main.go ```go app := iris.Default() //启动iris服务 route.InitRouter(app) //进入路由 app.Run(iris.Addr(“:8080”)), iris.WithoutServerError(iris.ErrServerClosed)) //设置端口号 ``` ####路由: route.go ```go func InitRouter(app *iris.Application) { g := controllers.NewIamController() //连接控制器层 app.Get("/xx/xx", g.xxx) //根据url调用 app.Post("/xx/xx", g.xxx) } ``` ###...阅读全文

博文 2019-11-12 09:29:27 jkal789

Go 语言简介

1. 简介 Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程,同时具有垃圾回收机制。 2. 安装 http://golang.org/doc/install 这里有详细的安装教程。go编辑器可以选择Eclipse和goclipse搭配,插件地址。 http://goclipse.googlecode.com/svn/trunk/goclipse-update-site/ 如果安装成功,可以在Window–>Preferences里面左边的树形菜单里看到Go,点Go,然后在右边设置GOROOT的路径为go的安装目录(如c:\go)即可,下面的几个Go tool的路径会...阅读全文

博文 2014-11-04 13:00:01 lichao_ustc

你再也不用设置 GOROOT 了

为什么不再需要设置 GOROOT 呢?推荐读两篇英文文章,我意译了下,将它们放在了一篇里。 第一篇是关于 Go 1.10 之前,怎么设置 GOROOT,发表与 2013 年。第二篇是从 Go 1.10 开始,如何处理 GOROOT,时间是 2018 年,Go 源码提交日志。这篇非常短小。 读完后,你会发现,大多数情况下,我们都不用手动设置 GOROOT 了。 第一篇 作者:Dave Cheney | 地址:you-dont-need-to-set-goroot-really 一篇小短文,解释了为什么在编译和使用 Go 时,不需要设置 GOROOT。 概要性介绍 一般来说,在 Go 1.0 之后,编译和使用 GO 不再需要设置 GOROOT。事实上,如果你的电脑上存在多个版本的 Go 语言环境...阅读全文

博文 2019-11-26 16:04:22 波罗学

Golang请求阿里云api服务器

```golang package main import ( "crypto/hmac" "crypto/sha256" "encoding/base64" // "encoding/json" //用于解析获取到的json //"fmt" "io/ioutil" "net/http" "os" // "reflect" //用反射的方式获取解析到的json数据里的值 "net/url" "sort" ) /* *自己在写项目时需要请求阿里云的api服务器 *根据阿里提供的请求api文档,克服了一个又一个坑最终访问成功 *现拿出来跟大家分享。这个例子只是根据我的项目来写的,不同的情况会有不同的修改。这个例子可以提供参考。...阅读全文

Go编程基础4-Http服务器

1、http服务器 package main import( "net/http" "log" ) func main(){//注册某个函数专门响应某个路由"/",函数签名符合 http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request){ w.Write([]byte("Hello,this is version 1!")) }) http.HandleFunc("/bye",sayBye) log.Println("Starting server ... v1") log.Fatal(http.ListenAndServe(":4000",nil)) } func sayBye( w http.ResponseWriter...阅读全文

博文 2018-07-09 15:35:29 1350368559

go-systemd

该项目是 systemd 的 Go 语言绑定版本,提供如下几个包: * activation - for writing and using socket activation from Go * dbus - for starting/stopping/inspecting running services and units * journal - for writing to systemd's logging service, journald * sdjournal - for reading from journald by wrapping its C API * machine1 - for registering machines/containers...阅读全文

开源项目 2015-11-15 16:00:00 coreos

go database/sql 源码分析(四)sql.Stmt数据结构

#sql.Stmt是sql包暴露给程序调用者的可见实体,一般通过db.Open函数获得DB实例后的下一步就是调用func (db *DB) Prepare 方法的的Stmt #其内部通过 css []connStmt 来绑定相关的连接和驱动层driver.Stmt #其内部不是引用driverConn,而是引用一个css []connStmt #sql包中有两个方式能够创建Stmt实例,一个是DB Prepare() 一个是Tx的Prepare(),二者是有区别 #Tx创建的Stmt通过Tx关联的driverConn绑定到固定的网络连接上 #DB创建的Stmt时初始化过程 1.会从连接池拿一个空闲连接,然后创建connStmt实例加到Stmt的css切片里 2.创建过程是调用DB的conn获...阅读全文

博文 2016-09-09 02:00:01 hittata

golang给请求参数追加参数

在做web服务的时候,偶尔会碰到这种需求,给http请求追加参数,下面是一些关于此类需求的记录。 if c.Request.Method == "GET" { query := c.Request.URL.Query() query.Set("login_uid", gdsLoggedUid) c.Request.URL, _ = c.Request.URL.Parse(query.Encode()) fmt.Printf("%c[1;43;30m--LOCAL--GET-- %v%c[1;43;30m\n", 0x1B, c.Request.URL, 0x1B) } if c.Request.Method == "POST" { bodyData, _ := c.GetRawData() ...阅读全文

博文 2019-11-26 18:32:42

[GO语言]深刻理解Golang中的String字符串

[深刻理解Golang中的string] 说到string类型,我们往往都能很熟练地对它进行各种处理,包括迭代、随机访问和匹配等等操作。然而在工作中,我发现迭代(range会自动识别成字符)一个字符串产生的字符的类型与随机访问一个字符的类型却并不相同,为什么会这么奇怪呢?于是我决定一探究竟 string 简析 在Golang中,字符串本质上看一看做一个只读的字节切片(仅比切片少了一个Cap属性)。它的底层结构我们可以查看reflect.StringHeader得到: type StringHeader struct { Data uintptr Len int } 例如针对字符串"你好",其在内存中的表示如下图所示: nihao Go的源文件默认使用UTF-8编码,所有的字符串字面量一般也是...阅读全文

博文 2020-05-15 17:38:33 小龙in武汉

Golang自带的http包的路由规则问题

1、调用下面的方法开启一个http监听服务http.HandleFunc("/hello/", helloHandler)err := http.ListenAndServe(":8080", nil)if err= nil { log.Fatal("ListenAndServe: ", err.Error())}2、路由规则中新增了"/hello"和"/hello/"两个key对应的handler(helloHandler)3、跟踪http\server.go源码查看到路由匹配规则中,通过高亮的代码可以让我们分析出来,假如我们请求路由"/hello/beijing",那么"/hello/"会被匹配到,但是这个通常不是我们想要的,如果使用原生的http包路由规则为了避免这种情况,在注册路由的...阅读全文

博文 2017-11-03 20:00:01 cythical-l-zc

Gin框架系列02:路由与参数

回顾 上一节我们用Gin框架快速搭建了一个GET请求的接口,今天来学习路由和参数的获取。 请求动词 熟悉RESTful的同学应该知道,RESTful是网络应用程序的一种设计风格和开发方式,每一个URI代表一种资源,客户端通过POST、DELETE、PUT、GET四种请求方式来对资源做增删改查的操作。 同样的,Gin框架给我们提供的除这4种动词外,还有PATCH、OPTION、HEAD等,详细内容可以查看rentergroup.go文件的IRoutes接口。 type IRoutes interface { Use(...HandlerFunc) IRoutes Handle(string, string, ...HandlerFunc) IRoutes Any(string, ...Hand...阅读全文

博文 2020-04-08 15:32:45 平也

Go 应用开发的管理工具GOP

GOP 是一个专为在 GOPATH 之外的 Go 应用开发的管理工具。当然他肯定不支持 `Go Get `了。GOP 会将所有的依赖项拷贝到 `src/vendor` 目录下,应用本身的源代码也在 `src` 下。 一个通常的使用过程如下: GOPATH 兼容,工程本身作为 GOPATH 多编译目标支持 将您的工程放到全局 GOPATH 之外 情确保您能正常运行 Go 命令,GOP 将依赖 Go 命令编译和测试 工程目录结构示例如下: 可以看出主文件默认放在 src/main 下可以自动识别,当然也可以在 Gop.yml 中指定 工程配置文件,必须存在并且放在和 src 平级。如果你没有定义任何目标,默认的目标将是 src/main, 目标名是工程名。 初始化 Gop 工程...阅读全文

Go语言排序一千万个随机数.开的双核.用了120秒,不知道怎么优化.然后自己调整了一下参数跑了一下34秒

自己没事调整了一下参数,然后从新跑了一下,时间缩短为34秒,结果还可以. package main import ( "fmt" "os" "runtime" "test" "time" ) var x chan []int = make(chan []int, 1) var Num int = 10 //改为100 var WNum int = 100 func main() { fmt.Println(time.Now()) var list1, list2 []int var R chan []int = make(chan []int, 1) for i := 0; i < WNum; i++ { go Chan(Num, R) } for i := 0; i < WNum; i++...阅读全文

博文 2015-06-18 09:09:13 fyxichen

Go基础学习-Reciver

Go是一门地地道道的面向对象的语言,但是他没有大部分面向对象语言的关键字class,不过这并不影响这门优秀的语言发挥面向对象的特性。 Go语言通过struct关键字来定义一个类,在定义时,仅仅定义了字段,并没有定义函数,例如 定义一个Person类,并指定姓名和年龄属性,但是无法指定test方法(行为)。 type Person struct { Name string Age uint8 //func test() //不可以这样做 } Go是通过Reciver来完成函数与类的连接工作的,下面,就给Person类增加test方法 package main import ( "fmt" ) func (per Person) test1() { per.Name = "lniwn" per....阅读全文

博文 2015-06-17 23:08:10 blueln