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

Golang中的error类型

Golang中的error类型 error类型本身就是一个预定义好的接口,里面定义了一个method type error interface { Error() string } 生成一个新的error并返回 一般有以下几种处理方式: package main import ( "errors" "fmt" ) type Customerror struct { infoa string infob string Err error } func (cerr Customerror) Error() string { errorinfo := fmt.Sprintf("infoa : %s , infob : %s , original err info : %s ", cerr.info...阅读全文

博文 2015-06-27 03:00:00 Goden

Golang -- 字节切片

Go 语言标准库 bytes ,实现了对字节数组的各种操作。 It is analogous to the facilities of strings package. (它和string 标准包提供的功能类似) 提供的功能如下; 字节切片 处理函数 基本处理函数 字节切片比较函数 前后缀检查函数 字节切片位置索引函数 分割函数 大小写处理函数 子字节切片处理函数 Buffer 对象 Reader 对象 字节切片处理函数 基本处理函数 共七个 Contains() 返回是否包含子切片 Count() 子切片非重叠实例的数量 Map() 函数,将byte 转化为Unicode,然后进行替换 Repeat() 将切片复制count此,返回这个新的切片 Replace() 将切片中的一部分 替换为...阅读全文

博文 2015-03-26 11:00:16 xiaorenwuzyh

在 Go 语言中使用 casbin 实现基于角色的 HTTP 权限控制

身份认证和授权对 web 应用的安全至关重要。最近,我用 Go 完成了我的第一个正式的 web 应用,这篇文章是在这个过程中我所学到的部分内容。 本文中,我们的关注点在于如何在 web 应用中使用开源的 casbin 库进行 HTTP 权限控制。同时,在示例代码中我们使用了 scs 库进行 session 管理。 下面的例子十分基础,希望它尽可能的展示了如何在 Go web 应用中实现权限控制。为了更侧重于展示 casbin 的使用,我们尽量简化业务逻辑(例如:不需密码的登陆操作)。我们一起来看一下! 注意:请不要在生产环境中使用所示的用例代码,该例子侧重于描述清晰,而不是安全性。 ## 建立 首先,我们创建一个 User 模型,并实现了相应方法: ``` go type User stru...阅读全文

博文 2018-02-01 14:12:46 polaris

Golang中如何让html/template不转义html标签

近期在使用Golang的net/http和html/template开发一个简单的HAProxy负载均衡任务管理系统(见搭建高可用负载均衡组件及缓存DNS一文说明)。 htmp/template在渲染页面模板的时候默认会转义字符串中的html标签,但有时我们并不想转义html标签,以下图所示为例: 图1中“ip:port列表(一行一个)”和“说明”两个输入框的内容行与行是以\n分隔的;图2中,这两部分内容分别在表格的“后端机器列表”和“说明”两列中展示,但行与行其实是以
分隔的;那么在将数据存入数据库之前或从数据库中取出数据后,会将字符串中的\n替换为
。如果将替换后的数据以字符串类型传入模板,
标签渲染后的效果就是
文本而不是换行。 有两种方式避免h...阅读全文

博文 2014-11-05 09:48:11 youngsterxyf

Go 中 defer 的 5 个坑 - 第一部分

> 通过本节的学习以避免掉入基础的 defer 陷阱中 本文只适合想要进阶学习 Golang 的新手阅读,大牛请绕道。 ## #1 -- defer nil 函数 如果一个延迟函数被赋值为 `nil` , 运行时的 [`panic`](https://golang.org/ref/spec#Handling_panics) 异常会发生在外围函数执行结束后而不是 `defer` 的函数被调用的时候。 例子 ```go func() { var run func() = nil defer run() fmt.Println("runs") } ``` 输出结果 ``` runs ❗️ panic: runtime error: invalid memory address or nil poi...阅读全文

博文 2017-12-26 15:11:12 polaris

Go语言可变参数函数,何时该使用省略号(...)

今天的一个例子中发现,对于在调用可变参数函数时,不是总能使用省略号将一个切片展开,有时候编译器可能会报错,为了清除的说明这个问题,我用几个小例子一步一步说明。 1、提出假想的需求 假如想要在一堆数据中找出最小的一个,该怎么做? 如果数据的类型为int,那么我可以这么做: func MinimumInt(first int, others ...int) int { min := first for _, value := range others { if value < min { min = value } } return min } 上述的MinimumInt函数的第二个参数声明为:others …int,表示这是一个可变参数,可以给它传入0个或者任意多个int型参数,在花栗鼠内部,...阅读全文

博文 2015-11-02 22:00:05 CMbug

http.ServeMux解析

## web server概述 使用go语言搭建一个web服务器是很简单的,几行代码就可以搭建一个稳定的高并发的web server。 ``` // hello world, the web server func HelloServer(w http.ResponseWriter, req *http.Request) { io.WriteString(w, "hello, world!\n") } func main() { http.HandleFunc("/hello/", HelloServer) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal("ListenAndServe: ", err) }...阅读全文

博文 2015-09-29 14:14:51 shanks

Go语言学习(十)bytes包处理字节切片

bytes包提供了对字节切片进行读写操作的一系列函数 字节切片处理的函数比较多,分为基本处理函数,比较函数,后缀检查函数,索引函数,分割函数, 大小写处理函数和子切片处理函数等. 1.字节切片基本处理函数api 1.1Contains()函数 //Contains()函数的功能是检查字节切片b是否包含子切片subslice,如果包含返回true,否则返回false. func Contains(b,subslice []bytes) bool 1.2Count()函数 //Count()函数的功能是计算字节切片sep在字节切片s中非重叠显示的个数. func Count(s,sep[]byte) int 1.3Repeat()函数 //Repeat()函数的功能是把切片b复制count个,然...阅读全文

博文 2016-04-02 20:00:06 mChenys

gorilla/mux类库解析

golang自带的http.SeverMux路由实现简单,本质是一个map[string]Handler,是请求路径与该路径对应的处理函数的映射关系。实现简单功能也比较单一: 1. 不支持正则路由, 这个是比较致命的 2. 只支持路径匹配,不支持按照Method,header,host等信息匹配,所以也就没法实现RESTful架构 而gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配,可以从我们设定的路由表达式中提取出参数方便上层应用,而且完全兼容http.ServerMux ##使用事例 ``` r := mux.NewRouter() //与http.ServerMux不同的是mux.Router是完全的...阅读全文

博文 2016-06-11 16:41:09 shanks

Golang中JSON的运用解析

本篇文章翻译自Elliot Chance的"Working With JSON in Go",原文地址“http://elliot.land/working-with-json-in-go” 。欢迎大家访问[我的博客](http://zuozuohao.github.io/),代码可以在[@Zuozuohao](https://github.com/Zuozuohao/GolangGOFPatterns)下载。 在强类型语言中使用JSON是需要一些技巧的。技巧的意思是数据从JSON数据结构到语言支持的数据结构的转换可以灵活的进行,反之亦然。从而避免在操作数组和字典的时候产生类型检查和运行时类型转换的冗余代码。Go在这方面做了很多杰出的工作,正如Go在其他方面做出的努力一样。 Go...阅读全文

golang 创建守护进程

package main import ( "os" "os/exec" "path/filepath" ) if os.Getppid()!=1{ //判断当其是否是子进程,当父进程return之后,子进程会被 系统1 号进程接管 filePath,_:=filepath.Abs(os.Args[0]) //将命令行参数中执行文件路径转换成可用路径 cmd:=exec.Command(filePath,os.Args[1:]...) //将其他命令传入生成出的进程 cmd.Stdin=os.Stdin //给新进程设置文件描述符,可以重定向到文件中 cmd.Stdout=os.Stdout cmd.Stderr=os.Stderr cmd.Start() //开始执行新进程,不等待新进程退...阅读全文

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

Gin实践 连载七 Golang优雅重启HTTP服务

优雅的重启服务 在前面编写案例代码时,我相信你会想到 每次更新完代码,更新完配置文件后就直接这么 ctrl+c 真的没问题吗,ctrl+c到底做了些什么事情呢? 在这一节中我们简单讲述 ctrl+c 背后的信号以及如何在Gin中优雅的重启服务,也就是对 HTTP 服务进行热更新 ctrl + c 内核在某些情况下发送信号,比如在进程往一个已经关闭的管道写数据时会产生SIGPIPE信号 在终端执行特定的组合键可以使系统发送特定的信号给此进程,完成一系列的动作 命令 信号 含义 ctrl + c SIGINT 强制进程结束 ctrl + z SIGTSTP 任务中断,进程挂起 ctrl + \ SIGQUIT 进程结束 和 dump core ctrl + d EOF SIGHUP 终止收到该信...阅读全文

博文 2018-03-15 15:34:40 煎鱼

go语言html/template解析问题

最近使用go语言html/template包进行一些静态化工作,发现template对于小于号(左尖括号<)不能正确处理,反复研究,没有弄清楚怎么回事,后来变通了一下,先对模板进行EscapeString编码,格式化以后,再进行UnescapeString编码,问题得到解决;但还是没弄清楚template为什么对单独的小于号(左尖括号<)无法正确格式化,但发现如果左尖括号的右边有一个或多个右尖括号(>),则能正确解析格式化,而template源码包读起来很费解,最终没有弄明白,希望知道的同学能告知原因;贴上我的解决方案,以供参考 package mytemplate import ( "bytes" "html" "html/template" "os" "strconv" "time" )...阅读全文

golang中处理panic的正确姿势

golang中panic的处理没有其他语言中try-catch语法那么简单。 大部分例子的panic处理都是在退出环节。那么如何在正常业务流程中处理panic,然后不影响全局呢? // 业务处理1,定义myStrcture isDone := make(chan int) go func() { defer func() { if err := recover(); err != nil { log.E(this.Ctx, "Skip panic", "tmpInfo=[%+v]", tmpInfo) } isDone <- 1 }() myStrcture.Ip = tmpInfo.Ip myStrcture.Country = tmpInfo.Address.Country.Name /...阅读全文

博文 2018-08-30 15:30:01 lawlietfans

代付系统源码(支持API代付)

下载地址 系统图截 视频教程 代付系统演示 系统说明 1. 同一账户日限额20万 2. 同一账户每日最高交易15笔 3. 支持谷歌验证器登录 4. 单笔交易最低10元,最高49999元 5. 支持商户IP白名单系统功能 1. 应用管理: 同时支持公司多个业务系统对接。 2. 商户管理: 支持商户入驻,费率设置,商户需要向平台方提供相关的资料备案。 3. 渠道管理: 支持微信、支付宝、银联、京东支付等多种渠道。 4. 账户管理: 渠道账户管理,支持共享账户(个人商户)及自有账户。 5. 支付下单: 可手动批量下单、提供退款服务。 6. 通知模块: 处理第三方支付渠道的异步通知,并将处理结果同步至业务系统。 7. 对账处理: 实现支付系统的交易数据与第三方支付渠道交易明细的自动核对(通常T+1)...阅读全文

博文 2020-02-08 01:32:43 ckakarotto

Golang 通过tcp / ip发送数据

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 如何通过简单的tcp / ip连接将数据从进程a发送到进程b? 在许多情况下,使用更高级别的网络协议无疑会做得更好,从而将所有技术细节隐藏在一个奇特的API下面。并且已经有很多可供选择的,取决于需要:消息队列协议,grpc,protobuf,flatbuffers,restful web api,websockets等等。 但是,在某些情况下(特别是在小型项目中),您选择...阅读全文

博文 2018-01-25 17:33:04 90design

Go 中如何有效的比较字符串

当优化软件时字符串比较可能和你想的有些不同。特别是包括拆分跨 goroutines 的循环, 找到一个更快的哈希算法,或者一些听起来更科学的方式。当我们做出这样的修改时,会有一种成就感。然而, 字符串比较通常是信息传递中(in a pipeline)的最大瓶颈。下面的代码段经常被使用,但它是最糟糕的解决方案 (参见下面的 benchmarks),并导致了实际问题。 ```go strings.ToLower(name) == strings.ToLower(othername) ``` 这是一种很直接的写法。把字符串转换成小写,然后在比较。要理解为什么这是一个差的解决方案,你需要知道字符串是如何表示的,以及 `ToLower` 是如何工作的。但是首先,让我们讨论一下字符串比较中主要的使用场景...阅读全文

golang reflect

golang reflect go语言中reflect反射机制。详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect" ) func main() { var x int = 1 fmt.Println("type: ", reflect.TypeOf(x)) } type: int TypeOf函数的定义如下,参数为接口类型,返回值为类型 func TypeOf(i interface {}) Type ValueOf函数的定义如下,参数为接口类型,返回值为Value var x int = 1 fmt.Println("value: ", reflect.ValueOf(x)) value: 可以通过Kind函...阅读全文

Golang信号处理和优雅退出守护进程

Golang中的信号处理 信号类型 个平台的信号定义或许有些不同。下面列出了POSIX中定义的信号。 Linux 使用34-64信号用作实时系统中。 命令 man signal 提供了官方的信号介绍。 在POSIX.1-1990标准中定义的信号列表 信号 值 动作 说明 SIGHUP 1 Term 终端控制进程结束(终端连接断开) SIGINT 2 Term 用户发送INTR字符(Ctrl+C)触发 SIGQUIT 3 Core 用户发送QUIT字符(Ctrl+/)触发 SIGILL 4 Core 非法指令(程序错误、试图执行数据段、栈溢出等) SIGABRT 6 Core 调用abort函数触发 SIGFPE 8 Core 算术运行错误(浮点运算错误、除数为零等) SIGKILL 9 Te...阅读全文

博文 2017-06-20 12:07:01 水滴穿石

imgo——golang图像处理工具库,图像相似度计算,图像二值化

# imgo golang图像处理工具库,图像相似度计算,图像二值化(golang image process lib) 目前只支持jpg,png [![GoDoc](http://godoc.org/github.com/Comdex/imgo?status.svg)](http://godoc.org/github.com/Comdex/imgo) ### 安装 ```shell go get github.com/Comdex/imgo ``` ### 示例 ```go package main import( "github.com/Comdex/imgo" ) func main(){ //...阅读全文

golang读写文件

抗压测试的时候多线程需要使用一个文件的内容频繁发送,所以想预处理文件内容到内容,分段发送, 1.读取文件内容到内存 type Chunk struct{ data []byte } func prepareChucks(path string) { fi, err := os.Open(path) if err != nil { panic(err) } defer fi.Close() for { buf := make([]byte, 4096) //每次需要再for循环里面重新make,踩坑 n, err := fi.Read(buf) if err != nil && err != io.EOF { panic(err) } if 0 == n { break } chunckDat...阅读全文

博文 2019-05-07 13:35:15 柯蓝_e007

Go实现线程池

本文通过代码讲解如何实现一个线程池。代码及注释如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 package main import "fmt" import "time" //这个是工作线程,处理具体的业务逻辑,将jobs中的任务取出,处理后将处理结果放置在results中。 func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("worker", id, "processing job", j) ...阅读全文

博文 2016-09-17 01:00:06 kc87654321

Golang部份特性的C++对比实现

今天看到一篇文章<>, 我个人是认为这个说法是不成立的,但这里面的一些特性对比引起了我的兴趣。 我想尝试下,Go语言所带的一些东西,在C++11中是如何做的,应当很有意思。所以刷刷刷,就有了下面的东西。 目录: 字符串字面值 变量初始化 lambda 值顺序递增 多值赋值及函数返回多值 map查找 可变参数 回调函数 泛型 数组和切片 字面值 这个东西在两种语言中都有比较好的解决方式.Go语言用" ` "符号,C++使用R(" )"这种方式。可以省掉不少转义符的输入。 Golang path := `c:\a\b\c\GG再也不用烦转义符了` mulln := `"(C++/Golang aa'aaa\Cplusplus/gogogo author"xion...阅读全文

博文 2014-12-16 10:00:15 xcltapestry

正确理解golang slice的复制

slice 三个属性 golang 的slice是一个指向底层的数组的指针结构体。 这个结构体有三个属性,1.指向数组指针,2.len: slice中元素的数量 3.cap:slice占用内存数量。 只有深刻理解这三个属性才能在使用slice中不至于犯错。 正确理解变量和共享 多个slice之间可以共享底层的数据,并且引用的数组部分区间可能重叠 以上是golang 圣经中的一句话。深刻理解这句话对于日程编程非常有意义。 1.什么时候共享数据会被其他变量修改 func f1() { a1 := []int{1,2,3,4,5,6} a2 := a1 a3 := a1[1:3] a1[1] = 999 fmt.Println("a1=",a1,"a2=",a2,"a3=",a3) } 运行结果 ...阅读全文

基于Golang的游戏服务器框架cellnet开发日记(二)

看官们肯定还有大部分不是很熟悉Actor模型. 我这里基于Erlang, Skynet等语言和框架库来实战型解释下Actor模型. Actor概念 Actor模型和OO类似, 都是符合人的思维模式进行编码. OO里啥都是类, 用类来模拟对象, 解决所有的问题. Actor类似的使用Actor来模拟处理对象和单元 Actor在Erlang中叫进程(非操作系统进程), 在Skynet中叫svc(服务) Mailbox消息队列 每个Actor中包含有一个mailbox, 也就是邮箱. Actor自己只能通过收发mailbox与外界进行沟通, 也就是说, Actor之间只能通过消息进行互相交流, 不能采用其他形式. mailbox本身是一个顺序队列, 先进先出. 而且mailbox从理论上说没有上限...阅读全文

博文 2015-10-18 03:00:07 zangao

搞定淘宝,京东 api调用返回的奇葩json格式

淘宝,京东的api调用返回的json格式跟golang的标准库encoding/json中的格式不兼容。 淘宝有些地方习惯性的把float数据加""变成字符串格式 比如 "delivery_score": "0.0", 文档上的又不一样 "delivery_score": 90, 京东的习惯是,不管是不是字符串类型都都加"",变成字符串类型的。 这样就造成标准库无法识别这些格式, 我把json拷贝出来,在decode.go文件的661行的literalStore函数种修改了:字符串处理方式代码如下: case '"': // string s, ok := unquoteBytes(item) if !ok { if fromQuoted { ...阅读全文

go语言编写Web程序

1. 简介 这个例子涉及到的技术: 创建一个数据类型,含有load和save函数 基于http包创建web程序 基于template包的html模板技术 使用regexp包验证用户输入 使用闭包 假设读者有以下知识: 基本的编程经验 web程序的基础技术(HTTP, HTML) UNIX 命令行 2. 开始 首先,要有一个Linux, OS X, or FreeBSD系统,可以运行go程序。如果没有的话,可以安装一个虚拟机(如VirtualBox)或者 Virtual Private Server。 安装Go环境: (请参考 Installation Instructions). 创建一个新的目录,并且进入该目录: $ mkdir ~/gowiki $ cd ~/gowiki 创建一个wik...阅读全文

博文 2014-10-04 19:26:36 yfl8910

Go 语言中的动态 JSON

Go 语言是静态类型语言,虽然它也可以表现出动态类型,但是使用一个嵌套的 `map[string]interface{}` 在那里乱叫会让代码变得特别丑。通过掌握语言的静态特性,我们可以做的更好。 通过同一通道交换多种信息的时候,我们经常需要 JSON 具有动态的,或者更合适的参数内容。首先,让我们来讨论一下消息封装(message envelopes),JSON 在这里看起来就像这样: ```json { "type": "this part tells you how to interpret the message", "msg": ...the actual message is here, in some kind of json... } ``` ## 通过不同的消息类型生...阅读全文

博文 2018-01-14 19:14:04 jliu666

golang信号量处理

c语言的信号量都很容易理解了,注册回调函数就行了 go中的有所不同,是通过个go程和chan来处理的 func main(){ go signalHandle() //用go程执行信号量处理函数 。。。。处理其他逻辑 } func signalHandle() { for { ch := make(chan os.Signal) signal.Notify(ch, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGUSR2,syscall.SIGHUP) sig := <-ch Utils.LogInfo("Signal received: %v", sig) switch sig { default: Utils.LogInfo("get sig=%v...阅读全文

博文 2015-06-17 20:23:31 ghost911_slb

Golang websocket

环境:Win10 + Go1.9.2 1.先下载并引用golang的websocket库 ①golang的官方库都在https://github.com/golang下,而websocket库在/net下。 ②如果没有安装Git,需要先安装Git。 ③使用go get -u github.com/golang/net/websocket下载代码,将安装在环境变量GOPATH配置的路径中。 代码中使用路径为 "golang.org/x/net/websocket",在对应路径下没有代码的话则引用出错,可将对应代码放在GOPAHT/golang.org/x/net下。 2.服务端Go代码 package main import ( "fmt" "golang.org/x/net/websocke...阅读全文

博文 2018-03-29 17:33:11 mickelfeng

[翻译] Go(#golang) 实现的状态机

春节前,粗略研究了一下微信的公共帐号。用 Golang 实现了一个简单的 package wechat,用于接入微信公共帐号。当时就在思考,微信的文字交互过程如果要实现有一定逻辑的复杂过程,可能需要使用到状态机。然后,就看到了这篇文章:《State machines in Go (#golang)》。非常合时宜啊!翻译于此,以飨读者! ——–翻译分隔线——– Go(#golang) 实现的状态机 我已经用 Go 代替 Python 重写了一个关键的服务组件。由于 Python 的解释器不是线程安全的,所以在解析的时候使用了全局锁。Go 与 Python 不同,它内建了并发支持,并且是静态编译的。 首先要实现一个状态机。Python 的版本是基于 David Mertz 的这篇文章。 Mert...阅读全文

博文 2014-10-09 16:18:31 mikespook

快速掌握阿里云 E-MapReduce

课程介绍 E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。 学习入口:[点击这里](http://click.aliyun.com/m/27900/) 课程目标 掌握E-MapReduce的用法 适合人群 大数据工程师 阿里云大学官网(阿里云大学 - 官方网站,云生态下的创新人才工场...阅读全文

使用CGO封装Windows API

Go使用C的库非常简单,通过cgo这个工具基本上可以说是无缝集成了。下面就演示一下用cgo在Windows下面封装API的过程。注意,请把Go更新到最新一个Weekly版本。 首先,在$GOPATH\src(如果不知道$GOPATH是什么,请移步这里看详细信息)下面新建一个文件夹“w32api”,然后在其内新建一个文件“kernel32.go”,内容如下。 package w32api // #define WIN32_LEAN_AND_MEAN// #include import "C"import "syscall" func GetCurrentDirectory() string { if bufLen := C.GetCurrentDirectoryW(0, ...阅读全文

博文 2014-10-06 06:08:32 AllenDang

目前流行的web前端框架

Web架构是为解决Web开发中开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮助快速实现Web开发,并解决开发过程中遇到的常规问题!以下是2018年常用的Web框架: **1. Bootstrap** Bootstrap是一款很受欢迎的前端框架,基于HTML、CSS、JavaScript设计的,简单灵活,使得Web开发更加快捷,Bootstrap中包含了丰富的Web组件和13个jquery插件,这些组件和插件可以快速的搭建一个漂亮和功能完备的网站,用户还可以根据自己的需求进行CSS变量的修改,扩展自己所需功能。 **2. Angular** Angular是一款优秀的前端JS框架,已经被用于Google的多款产品中,其具有很多特性,如MVW、模块化、自动化双...阅读全文

如何实现Golang的http请求处理中间件(译)

文:Golang Http Handlers as Middleware 译者:youngsterxyf 大多数现代Web组件栈允许通过栈式/组件式中间件“过滤”请求,这样就能干净地从web应用中分离出横切关注点(译注:面向方面程序设计中的概念?)。 本周我尝试在Go语言的http.FileServer中植入钩子,发现实现起来十分简便,让我非常惊讶。 让我们从一个基本的文件服务器开始说起: func main() { http.ListenAndServe(":8080", http.FileServer(http.Dir("/tmp"))) } 这段程序会在端口8080上开启一个本地文件服务器。那么我们该如何在这其中植入钩子从而能够在文件请求处理之前执行一些代码?来看一下http.List...阅读全文

博文 2014-11-05 09:53:17 youngsterxyf

【求助】如何编译MIPS处理器的GCCGO工具链。

RT: go基本已经通吃了所有主流处理器。MIPS64的处理器也已经支持了,但是唯独MIPS32的处理器不支持。 目前有个需求就是在MIPS处理器上也能用上GO。目前知道的只有GCCGO了。 老版本的gccgo可以编译成功,gcc 4.8.3这个我就成功了 但是新版本我基本上试过,所有的办法去编译mips的gccgo 5.X,6.X版本。 1、直接从GCC源码编译。 2、crosstool-ng工具编译。 3、buildroot工具编译。 4、通过openwrt编译工具编译 都失败了。 工具基本能编译出来(gccgo,go1等),但是库编译就报错,编译不通过。 基本是gcc\libffi\src\mips\o32.s这个文件报错。 ...阅读全文

go语言实现的简单web服务器

go语言让web服务器实现和部署变得异常简洁.终于可以抛开乱七八糟的项目结构和体积庞大的IDE,一窥其基本原理. 首先是一个简单的服务器实现代码,如果是GET请求,则回送一条This is a GET request消息,如果是POST请求,则解析POST请求中的info字段,将其内容回送.程序可以直接在命令行下用go run server.go启动. //server.go package main import ( "fmt" "net/http" ) func login(w http.ResponseWriter,r *http.Request){ r.ParseForm() fmt.Println(r.Method) if r.Method=="GET"{ fmt.Fprintf(...阅读全文

博文 2016-07-01 02:00:07 liutgnukernel

Golang轻量级-高并发socket框架

使用chitchatchitchat得以支持高并发连接的关键在于其能够快速响应客户端发起的链接并及时开启goroutine确保一对一的通信。对于使用者而言,只需负责向框架注册正确的IP socket(ipAddr:ipPort)(注:除非特别说明,否则后续提到的地址Addr均指addr:port)并正确编写用于处理接收数据和异常处理函数即可正常运行。开启一个Server仅需创建一个Server实例并调用其Listen()方法即可使一个Server开始正常工作。一个Server通常只用于监听一个端口,负责一类事物的调度处理。我们看一下具体调度的API:更多go语言内容请关注:http://www.fastgolang.co...阅读全文

Golang学习(11)——path filepath包

Golang学习 - path/filepath 包-----------------------filepath 中的函数会根据不同平台做不同的处理,比如路径分隔符、卷名等。 -----------------------路径分隔符转换:const ( Separator = os.PathSeparator // 路径分隔符(分隔路径元素) ListSeparator = os.PathListSeparator // 路径列表分隔符(分隔多个路径))下面两个函数主要用于将 Windows 路径分隔符转换为 Linux 路径分隔符,处理完后再转换回去,只在 Windows 中有用,在 Linux 中没必要:// 将 path 中平台相关的路径分隔符转换为 '/'ToSlash(path ...阅读全文

博文 2017-02-10 10:15:54 1160636144

七牛云音视频新功能:音频支持 AAC_HE

![1.png](http://studygolang.qiniudn.com/160229/ae427c76a903c127fb114c705f44f355.png) 与大家所熟知的 MP3 一样, AAC 也是一种常见的音频格式。现如今常见的 AAC 规格有三种: LC-AAC (最基本的), HE-AAC ( AACPlus v1 ), HE-AAC v2 。 HE :“ High Efficiency ”(高效性)。 HE-AAC (又称 AACPlus v1 , SBR ),用容器的方法实现了 AAC ( LC )和 SBR(频段复制)技术。 SBR 把频谱切割开来,低频单独编码保存主要成分,高频单独放大编码保存音质,在减少文件大小的情况下还保存了音质。 HEv2...阅读全文

golang xml 处理

golang xml 处理 生成xml时 属性必须大写 package main import ( "encoding/xml" "fmt" "os" ) type xmldas struct { XMLName xml.Name `xml:"das"` DataPort string `xml:"DataPort,attr"` Desc string `xml:"desc,attr"` Src xmlsource `xml:"source"` Dest xmldestination `xml:"destination"` } type xmlsource struct { Path string `xml:"path,attr"` Param string `xml:"param,attr...阅读全文

博文 2014-10-04 19:26:54 咖啡伴侣

用 Go 写一个服务容器( Service Container )

我最近一直在做一个相当大的 API 项目,里面包括很多路由规则( routes )、服务接口( services )和处理函数( handlers )等。首先,我注意到 `main.go` 文件的启动过程开始越来越臃肿。 为了避免设置全局的服务接口,我使用共享结构体( struct )将服务接口与处理函数绑定在一起。举个例子: main.go ```go package main func main() { r := gin.Default() userRepo := models.NewUserRepo( drives.DataStore().C("users"), ) userHandler := handlers.NewUserHandler(userRepo) r.GET("/api...阅读全文

博文 2017-12-10 13:48:33 jzhongming

Go负载均衡

负载均衡 请求者向均衡服务发送请求type Request struct { fn func() int // The operation to perform. c chan int // The channel to return the result. } 注意这返回的通道是放在请求内部的。通道是first-class值 能很好的模拟一个请求者,一个负载产生者func requester(work chan<- Request) { c := make(chan int) for { // Kill some time (fake load). Sleep(rand.Int63n(nWorker * 2 * Second)) work <- Request{workFn, c} // ...阅读全文

博文 2017-03-05 19:45:34 紫若丹枫

【原创】k8s源码分析------第三方库go-restful分析

由本人空间转过来,空间地址为http://user.qzone.qq.com/29185807/blog/1458275362 我们先从go语言的http server来入手 先看net/http包中 server结构体中,有很多参数,其中handler则为入口处理函数。handler其实是一个interface 我们再看net/http包另外一个结构体 ServerMux,其实就是一个实现了Handler的类。并且其也封装了了路由添加的一些函数,方便使用者来进行路由的定制化。 说明:go-restful源码路径为github.com/emicklei/go-restful ,并且为k8s v1.1.1稳定版本中所包含的版本 下面我们进入到go-restful。首先大致说下其框架结构。 一个...阅读全文

博文 2016-03-20 15:00:05 screscent

golang internals

[golang internals From Genius][1] 中文的go语言内部细节的资料几乎没有,所以自己研究了一下 声明:本文内容主要来自本人对源代码的研究,以及网上找到的一些资料的整理,不保证完全正确性 函数调用协议 编译过程分析 runtime中的调度器相关 系统的初始化 interface的实现 [1]: http://www.cnblogs.com/genius0101/archive/2012/04/16/2447147.htm...阅读全文

Paramiko中上传远程文件方法步骤详解

  本文和大家分享的主要是paramiko中上传文件的方法及步骤,希望通过本文的分享,对大家学习和使用paramiko有所帮助。   机器件文件传输   一般选择SCP或者SFTP   SCP   SCP全写是:Secure Copy,是基于SSH协议的文件拷贝方法,可以在本机与远程主机或两个远程主机之间进行文件拷贝。SCP的实现需要通过SCP协议以及SCP程序。   使用:scp localfile usr@host:dir   SFTP   在计算机领域,SSH文件传输协议 (英语:SSH File Transfer Protocol,也称 Secret File Transfer Protocol,Secure FTP或SFTP) 是一数据流连...阅读全文