golang

【golang实战】获取web提交的数据

匿名 (未验证) 提交于 2019-12-02 23:56:01
背景 之前做 golang 开发的时候,用的是 beego 框架,框架的好处是,把所有工具都封装好了,在获取参数的时候,只要调用相应的方法,就能取得对应的数据。 而最近在从零开始,原生写一个小说爬虫管理的web服务功能时,发现自己所掌握的那点知识,并不能满足自己的开发需求,测试好多遍都未果,希望写下这篇记录贴,供以后回顾。 数据提交场景大致如下: 1、表单提交,纯粹的 Form 表单提交数据; 2、表单上传文件,利用 Form 表单上传文件; 3、ajax 提交 json 数据; 4、ajax 提交 表单数据; 5、ajax 上传文件; 下面我将对以上五种场景进行实际的示例展示,并采用 Fetch API 代替 ajax 发送请求。 示例 示例1:html表单提交数据 html 表单 < form action = " http://127.0.0.1:8088/api/task?debug=1 " method = " POST " > < input type = " text " name = " username " placeholder = " username " > < input type = " text " name = " password " placeholder = " password " > < input type = " submit "

golang依赖包被墙解决方法

匿名 (未验证) 提交于 2019-12-02 23:56:01
由于众所周知的原因,在终端下载golang依赖包会出现类似下面的提示: go: cloud.google.com/go@v0.26.0: unrecognized import path "cloud.google.com/go" (https fetch: Get https://cloud.google.com/go?go-get=1: dial tcp 216.58.200.238:443: i/o timeout) go: error loading module requirements 解决方法: 主要使用go mod的replace方法,在go.mod文件中将被墙的包,重定向到github上;当然也可以下载到本地,然后使用本地路径来指定被墙的包 replace golang.org/x/net => github.com/golang/net latest replace golang.org/x/tools => github.com/golang/tools latest replace golang.org/x/crypto => github.com/golang/crypto latest replace golang.org/x/sys => github.com/golang/sys latest replace golang.org/x/text =>

golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布

匿名 (未验证) 提交于 2019-12-02 23:56:01
本章节阐述micro消息订阅和发布相关内容 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-micro 入门笔记2.1 micro工具之micro api golang微服务框架go-micro 入门笔记2.2 micro工具之micro web 微服务之间需要通过broker来传递消息,go-micro支持http/nats/memory三种broker,其中http是默认的broker。 同时,go-micro以强大的插件形式,提供如下几种常见的broker。 $ls gocloud / googlepubsub / grpc / kafka / mqtt / nats / nsq / proxy / rabbitmq / redis / snssqs / sqs / stan / stomp / http HTTP Broker 是基于HTTP的异步broker,源代码在 github.com\micro\go-micro@v1.9.1\broker\broker.go 中,默认DefaultBroker为http var ( DefaultBroker Broker = newHttpBroker () ) httpbroker实际上就是一个结构体 type httpBroker struct { id

Golang防止多个进程重复执行

匿名 (未验证) 提交于 2019-12-02 23:55:01
lockFile := "./lock.pid" lock , err := os . Create ( lockFile ) if err != nil { log . Fatal ( "创建文件锁失败" , err ) } defer os . Remove ( lockFile ) defer lock . Close () lockFile 变量值自定义;在main函数执行完成后需要移除锁文件并关闭文件读取。 err = syscall . Flock ( int ( lock . Fd ()), syscall . LOCK_EX | syscall . LOCK_NB ) if err != nil { log . Println ( "上一个任务未执行完成,暂停执行" ) os . Exit ( 1 ) } syscall.LOCK_EX 排它锁,不允许其他人读和写。 syscall.LOCK_NB 意味着无法锁定文件时不能阻断操作,马上返回给进程。 lock.Fd() 返回文件描述符,文件描述符是一个索引值,指向当前进程打开的文件记录表。最后在执行完毕后对文件解锁。 defer syscall . Flock ( int ( lock . Fd ()), syscall . LOCK_UN ) 来源:博客园 作者: ƽҲ 链接:https://www.cnblogs

gprc 环境搭建 多语言调用

匿名 (未验证) 提交于 2019-12-02 23:55:01
一、golang 1、protocal buffer安装 https://github.com/google/protobuf/releases下载安装包 解压后看到protoc.exe 我这里是windows 最后设置环境变量即可 2、安装 golang protobuf go get -u github.com/golang/protobuf/proto // golang protobuf 库 go get -u github.com/golang/protobuf/protoc-gen-go //protoc --go_out 工具 3、安装 gRPC-go go get google.golang.org/grpc 好啦开始写代码,我们就用网上的helloworld来测试 4、项目结构 golang 为服务端,其它语言都为客服端。 syntax = "proto3"; package helloworld; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name.

golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

匿名 (未验证) 提交于 2019-12-02 23:55:01
micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 主要作用是为微服务提供http网关支持。假如后端服务名称为 go.micro.srv.hello ,提供 call 方法,则我们可用通过http协议来调用微服务。 curl http://127.0.0.0:8080/hello/call?name=123 micro api 指令全部参数如下 $micro api -h NAME: micro api - Run the api gateway USAGE: micro api [command options] [arguments...] OPTIONS: --address value Set the api address e.g 0.0.0.0:8080 [%MICRO_API_ADDRESS%] --handler value Specify the request handler to

golang读写文件内容

匿名 (未验证) 提交于 2019-12-02 23:55:01
package main import ( "fmt" "io/ioutil" ) func main() { inputFile := "/golang/code/test1/src/day9/文件读写/input1" output := "/golang/code/test1/src/day9/文件读写/output" reader, err := ioutil.ReadFile(inputFile) if err != nil { fmt.Println("err: ", err) return } fmt.Println("reader: ", string(reader)) err1 := ioutil.WriteFile(output, reader, 0777) // 写入文件内容,0777是创建的文件权限 if err1 != nil { fmt.Println(err1) } } 来源:博客园 作者: 输诚 链接:https://www.cnblogs.com/shuchengyi/p/11406259.html

golang(5):struct &amp; 链表 &amp; 二叉树 &amp; 接口

匿名 (未验证) 提交于 2019-12-02 23:52:01
// 1. 用来自定义复杂数据结构 // 2. struct里面可以包含多个字段(属性) // 3. struct类型可以定义方法,注意和函数的区分 // 4. struct类型是值类型 // 5. struct类型可以嵌套 // 6. Go语言没有class类型,只有struct类型 struct的定义 struct 声明: type 标识符 struct { field1 type field2 type } // 示例: type Student struct { Name string Age int Score int } struct定义的三种形式: 1. var stu Student 2. var stu *Student = new (Student) 3. var stu *Student = &Student{} 1) 其中 2 和 3 返回的都是指向结构体的指针,访问形式如下: // 标准形式: (*stu).Name (*stu).Age // 简写形式: stu.Name stu.Age

Golang理解-匿名函数

匿名 (未验证) 提交于 2019-12-02 23:49:02
匿名函数 (英语:Anonymous Function)在计算机编程中是指一类无需定义(函数名)的或,普遍存在于多种编程语言中。---wikipedia Golang是支持匿名函数的,即在需要使用函数时,再定义函数,匿名函数没有函数名,只有函数体,函数可以被作为一种类型被赋值给函数类型的变量,匿名函数往往以变量方式被传递 匿名函数经常被用于实现回调函数,闭包等. 匿名函数的定义就是: 没有名字的普通函数 func (参数列表) (返回值列表) { 函数体 } 匿名函数可以在声明后直接调用; 例如: package main import "fmt" func main() { // 定义匿名函数并赋值给f变量 f := func(data int) { fmt.Println("hello", data) } // 此时f变量的类型是func(), 可以直接调用 f(100) } 匿名函数的用途非常广泛,匿名函数本身是一种值,可以方便的保存在各种容器中实现回调函数和操作封装 回调函数 ,或简称 回调 (Callback 即call then back 被主函数调用运算后会返回主函数),是指通过传递到其它代码的,某一块的 匿名函数作为回调函数的设计在go语言的系统包中是很长见的;strings包中就有这种实现: func TrimFunc(s string, f func(rune)

golang web框架 beego 学习 (三) beego获取参数

匿名 (未验证) 提交于 2019-12-02 23:49:02
直接上常用的例子吧: A: 获取URL中的参数 router func init() { beego.Router("/task/?:id/?:name", &controllers.TaskController{}) } controller func (c *TaskController) Get() { id1 := c.GetString(":id") name1 := c.GetString(":name") id2 := c.Ctx.Input.Param(":id") name2 := c.Ctx.Input.Param(":name") c.Ctx.WriteString("id1:" + id1 + ";name1" + name1 + ";id2:" + id2 + ";name2:" + name2) } URL: B 获取Request Body里的内容 第一步:在app.conf中加上 copyrequestbody = true   第二步:导入json包 import ( "encoding/json" ) 下面是请求: 下面是controller的定义: package controllers import ( "encoding/json" "github.com/astaxie/beego" ) type JsonController