Go语言前后端分离开发

其实是服务计算的作业啦。不过完成作业的过程中真的学到了不少东西呢。下面就把相关的学到的东西记录一下。

1、如何实现api的操作?

这个是后端的问题了。我们如何向后端去请求数据,后端又如何讲数据发送回请求者呢?

这里使用的方法是最基本的go语言实现方式,没有用到任何的框架。首先开启服务器,这个不必多说。然后设置一个对于特定路由的响应函数,就拿apiroot来讲。apiroot可以获得该服务器所有可用的api。前端访问localhost:port/apiroot,应该能够得到服务器返回的数据才对。这个过程服务器端的实现是这个样子的:

func apiroot(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "localhost:9090/people/id\n"+
    				"localhost:9090/film/id\n"+
    				"localhost:9090/vehicles/id\n"+
    				"localhost:9090/starships/id\n"+
    				"localhost:9090/species/id\n"+
    				"localhost:9090/planets/id\n")
}

上面是响应函数,w是http.ResponseWriter,我们在w中写入字符串,就完成了响应过程。绑定响应函数:

http.HandleFunc("/apiroot",apiroot)

让我们来看一下返回的结果:

访问服务器后面的网址,得到服务器的响应数据,一个简单的api就完成了.然后后端的编写者可以继续编写其他的api,前端的编写者只要假设已经编写好了就行,前端与后端的开发就分开了,这使得项目更加容易以团队的方式来实现。

2、json数据读取!

go语言如何读取json数据呢?我们完成的项目是swapi,提供了查询星球大战各种信息的api,源数据从swapi网站的官方GitHub上找到了:源数据

首先我们做的第一个工作是先进行分割,讲里面的json数据根据不同的种类分割开来保存。然后根据前端请求的种类和id来返回对用的json。我们为了方便起见,讲读取后的json封装成了一个struct,struct的内容对应json的内容。然后Go语言提供了函数可以直接进行转换。将元数据分开的过程我的队友做的,所以我并不了解他是怎么实现的。分开之后的结果如下:

每个文件夹存放着多个json文件。

Go语言读取json过程如下:

func Getjson(kind string,id int) (*people.People) {

	result := &people.People{}
	fileName := "./datas/"+kind+"/"+kind+strconv.Itoa(id)+".json"
	_, filen, _, _ := runtime.Caller(1)
	datapath := path.Join(path.Dir(filen), fileName)
	JsonParse := NewJsonStruct()
	JsonParse.Load(datapath, &result)
	fmt.Println(result)
	return result
}

type JsonStruct struct {
}

func NewJsonStruct() *JsonStruct {
    return &JsonStruct{}
}

func (jst *JsonStruct) Load(filename string, v interface{}) {
    //ReadFile函数会读取文件的全部内容,并将结果以[]byte类型返回
    data, err := ioutil.ReadFile(filename)
    if err != nil {
        return
    }

    //读取的数据为json格式,需要进行解码
    err = json.Unmarshal(data, v)
    if err != nil {
        return
    }
}

3、boltDB数据库操作

这个感觉最坑了。网站的教程基本上都不告诉你如何存储数据。只是说运行某函数就好了但是究竟怎么进行数据的增删查改呢?完全不提。大概是我看多的最烂的教程了。其尿性基本如下:

//更新事务
err := db.Update(func(tx *bolt.Tx) error {
    ...
    //到底怎么个更新法啊???!!
    return nil
})

然后找了一些其他的博客之后,终于大概知道了blotDB要怎么用。下面本次项目代码中用blotdb实现保存注册的用户的数据:

//插入数据

db, _ := bolt.Open("swapi.db", 0600, nil)//开启数据库,如果没有的话则新建
defer db.Close()
db.Update(func(tx *bolt.Tx) error {
    bu, err := tx.CreateBucketIfNotExists([]byte("users"))//新建数据表,users是表名
    if err != nil {
        fmt.Println("open bucket error")
        return err
    }
    bu.Put([]byte(string(username[0])), []byte(string(password[0])))//在数据表中插入键值对
    return nil
})

//查询数据
db, _ := bolt.Open("swapi.db", 0600, nil)
defer db.Close()
var v []byte
db.View(func(tx *bolt.Tx) error {
    b := tx.Bucket([]byte("users"))//打开数据表
    v = b.Get([]byte(string(username[0])))//通过键获取对应的值
    
    return nil
})

4、Angular 4入门

安装过程我是看的这个博客:https://segmentfault.com/a/1190000014189938?utm_source=tag-newest

这个其实我也是刚刚入门,所以自己的话没啥好讲的,实现了一些极其基本的功能,还是把我看的教程链接贴上:https://www.w3cschool.cn/angular/

5、实验感想

本次project真的让我学了太多的东西。api原来还有标准的格式,前端开发原来这这么多以前不知道的框架,Go语言处理json数据原来这么麻烦。不过前后端分离倒是确实极大的帮助了分工的进行。因为感觉以前做的时候基本上没法分工,各个代码文件互相相关,牵一发而动全身,使得团队合作起来十分困难。不过这次的话,是实实在在地将做的东西分开了,虽然到最后我还是前端后端都要写。上面介绍的部分是我在开发过程中遇到的主要的问题,其实由于对Go语言不够熟悉,还有很多比较麻烦的地方没有一一列举出来,因为那些问题基本全是因为我Go语言没学好。。

6、仓库地址

https://github.com/723fket

723ApiOnGo是服务端

723Client是客户端

projectfile是项目文档

 

要使用Go构建一个前后端分离的客户关系管理系统,您可以按照以下步骤进行操作: 1. 设计数据库模式:首先,确定客户关系管理系统所需的数据模型,包括客户信息、联系人、交易记录等。使用适合您的需求的数据库(如MySQL、PostgreSQL等)创建相应的表结构。 2. 后端开发:使用Go语言编写后端服务,处理与数据库的交互以及业务逻辑。您可以使用框架如Gin或Echo来加速开发过程。实现API端点,以便前端可以通过HTTP请求与后端进行交互,包括创建、读取、更新和删除客户数据等操作。 3. 前端开发:使用现代化的前端框架(如React、Vue.js或Angular)开发用户界面。您可以使用前端框架提供的组件和工具来构建界面元素,以便用户可以浏览和操作客户关系数据。通过HTTP请求与后端API进行数据交互。 4. 跨域处理:由于前后端分离,前端和后端可能在不同的域中运行。为了解决浏览器的跨域限制,需要在后端实现跨域资源共享(CORS)机制,允许来自前端域的请求访问后端API。 5. 认证与授权:根据您的需求,实现用户认证和授权机制,确保只有经过身份验证的用户才能访问和修改客户关系数据。 6. 部署和测试:将后端服务部署到服务器上,并将前端部署到Web服务器或静态文件服务器上。确保系统能够正确运行,并进行全面的功能测试和性能测试。 以上仅为大致的步骤概述,具体的实现细节会根据您的需求和技术栈而有所不同。建议您参考相关的Go开发文档和示例代码,以及前端框架的官方文档和社区资源,来帮助您更好地构建前后端分离的客户关系管理系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值