Python爬虫+Go WebServer+Flutter App(GoLang篇)

Python爬虫+Go WebServer+Flutter App(GoLang篇),第1张

概述1.前言继第一篇Python篇,这是第二篇GoLang篇,通过Go设置webserver2.Go开发设置设置服务端监听,等待客户端请求;处理客户端请求,查询数据库,生成返回结果,发送给客户端.2.1安装Go从官网下载对应系统的安装包安装完成,设置好环境变量输入"goversion",如果显示相应的go版本,则安装

1.前言

继第一篇Python篇,这是第二篇Golang篇,通过Go设置web server

2.Go 开发设置

设置服务端监听,等待客户端请求;处理客户端请求,查询数据库,生成返回结果,发送给客户端.

2.1安装Go

从官网下载对应系统的安装包
安装完成,设置好环境变量
输入"go version",如果显示相应的go版本,则安装完成

zxl@zxl:~$ go versiongo version go1.12 linux/amd64

2.2设置GOPATH

新建好go的工作空间根目录,将该目录设置为GOPATH
以linux为例

export GOPATH=/home/zxl/workspace/my_github/go_test_server

2.3安装开发工具liteIDE

通过下载链接选择最新版本,下载对应系统的安装包
打开litelDE,选择菜单"工具"—>“编辑当前环境”,设置好GOROOT,GOPATH,PATH

GOROOT=/usr/local/goGOPATH=/home/zxl/workspace/my_github/go_test_serverPATH=$GOROOT/bin:$PATH

也可以选择菜单"工具"—>"管理GOPATH/Modules"设置每个工作空间的GOPATH

3.接口功能开发

接口主要响应客户端数据请求

3.1设置端口开启服务

如下代码所示,设置了端口为"9090"的服务,点击菜单"编译"—>“BuildAndRun”,则可以启动服务
在浏览器输入"http://localhost:9090/test",网页则显示"Hello astaxIE!"

package mainimport (	"fmt"	"log"	"net/http"	"strings"	http_handle "http_handle")func sayhelloname(w http.ResponseWriter, r *http.Request) {	r.ParseForm()       //解析参数,默认是不会解析的	fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息	fmt.Println("path", r.URL.Path)	fmt.Println("scheme", r.URL.Scheme)	fmt.Println(r.Form["url_long"])	for k, v := range r.Form {		fmt.Println("key:", k)		fmt.Println("val:", strings.Join(v, ""))	}	fmt.Fprintf(w, "Hello astaxIE!") //这个写入到w的是输出到客户端的}func main() {	http.HandleFunc("/test", sayhelloname) //设置访问的路由	err := http.ListenAndServe(":9090", nil) //设置监听的端口	if err != nil {		log.Fatal("ListenAndServe: ", err)	}}

3.2从数据库获取数据,响应客户端请求3.2.1创建数据结构
package datatype QsbkHotPicItem struct {	ID                    string	AuthorNickname        string	AuthorGender          string	AuthorAge             string	Authorimgurl          string	Content               string	Thumbimgurl           string	StatsVoteContent      string	StatsCommentContent   string	StatsCommentDetailUrl string	Md5                   string}type QsbkHotPicItemList struct {	ItemList []QsbkHotPicItem}

3.2.2创建数据库 *** 作
package base_dbimport (	"database/sql"	"fmt"	_ "github.com/Go-sql-Driver/MysqL")func query(sql_str string) (*sql.Rows, *sql.Stmt, *sql.DB) {	fmt.Println("query::sql_str = ", sql_str)	db, _ := sql.Open("MysqL", "用户名:密码@tcp(zxltest.zicp.vip:42278)/数据库名")	fmt.Println("query::open_db_err = ", open_db_err)	stmt, prepare_err := db.Prepare(sql_str)	fmt.Println("query::prepare_err = ", prepare_err)	rows, query_err := stmt.query()	fmt.Println("query::query_err = ", query_err)	return rows, stmt, db}

3.2.3响应客户端请求

以MysqL为例,导入数据库驱动
在命令行终端,输入go get -u github.com/go-sql-driver/MysqL
匿名导入包_ "github.com/Go-sql-Driver/MysqL"
导入数据解构"data"
导入数据库 *** 作base_db "db"
其会自动下载驱动库,并放入到设置的GOPATH目录下
这样就可以完成代码开发,最后以Json形式把数据返回给客户端

package http_handleimport (	"enCoding/Json"	"fmt"	"net/http"	"strconv"	"strings"	_ "github.com/Go-sql-Driver/MysqL"	"data"	base_db "db")func QsbkHotPicList(w http.ResponseWriter, r *http.Request) {	r.ParseForm()       //解析参数,默认是不会解析的	fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息	fmt.Println("path", r.URL.Path)	fmt.Println("scheme", r.URL.Scheme)	var last_ID = -1	if len(r.Form["last_ID"]) > 0 {		last_ID, _ = strconv.Atoi(r.Form["last_ID"][0])	}	page, _ := strconv.Atoi(r.Form["page"][0])	page_size, _ := strconv.Atoi(r.Form["page_size"][0])	fmt.Println("last_ID", last_ID)	fmt.Println("page", page)	fmt.Println("page_size", page_size)	var start_index = page * page_size	var end_index = page_size	fmt.Println("start_index", start_index)	fmt.Println("end_index", end_index)	for k, v := range r.Form {		fmt.Println("key:", k)		fmt.Println("val:", strings.Join(v, ""))	}	var sql_where = ""	if last_ID > 0 {		start_index = 0		end_index = 10		sql_where = " WHERE ID < " + strconv.Itoa(last_ID) + " "	}	fmt.Println("sql_where", sql_where)	var sql_str = "SELECT " +		"ID, author_nick_name,author_gender,author_age,author_img_url,content,thumb_img_url,stats_Vote_content,stats_comment_content,stats_comment_detail_url,md5 " +		"FROM joke " + sql_where +		"ORDER BY ID DESC liMIT " + strconv.Itoa(start_index) + "," + strconv.Itoa(end_index)	rows, stmt, db := base_db.query(sql_str)	var qsbkHotPicItemList data.QsbkHotPicItemList	for rows.Next() {		var ID, author_nick_name, author_gender, author_age, author_img_url, content, thumb_img_url, stats_Vote_content, stats_comment_content, stats_comment_detail_url, md5 string		rows.Scan(&ID, &author_nick_name, &author_gender, &author_age, &author_img_url, &content, &thumb_img_url, &stats_Vote_content, &stats_comment_content, &stats_comment_detail_url, &md5)		fmt.Println("query::result = ", ID, author_nick_name, author_gender, author_age, author_img_url, content, thumb_img_url, stats_Vote_content, stats_comment_content, stats_comment_detail_url, md5)		var item = data.QsbkHotPicItem{ID, author_nick_name, author_gender, author_age, author_img_url, content, thumb_img_url, stats_Vote_content, stats_comment_content, stats_comment_detail_url, md5}		qsbkHotPicItemList.ItemList = append(qsbkHotPicItemList.ItemList, item)	}	defer rows.Close()	defer stmt.Close()	defer db.Close()	responseResult, responseError := Json.Marshal(qsbkHotPicItemList)	fmt.Println("query::responseError = ", responseError)	fmt.Println("query::responseResult = ", string(responseResult))	fmt.Fprint(w, string(responseResult))}

4.设置电脑外网可访问

由于我们当前调试都是本地局域网络,别人是访问不了我们的服务,因此我们需要提供外网功能,即内网穿透
可以通过花生壳教程完成内网穿透设置

最后将我们的端口为"9090"的服务启动,再开启花生壳内网穿透设置,就可以提供外网功能了

总结

以上是内存溢出为你收集整理的Python爬虫+Go WebServer+Flutter App(GoLang篇)全部内容,希望文章能够帮你解决Python爬虫+Go WebServer+Flutter App(GoLang篇)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1186204.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存