inpm
! dlrow olleH

go开发总结

2019-07-29 go
Word count: 1.3k | Reading time: 4min

题外话(ps:可以跳过)

单纯想学一门后端开发的语言,开始呢想用nodejs吧,也熟悉一点,不过放弃了
理由:干嘛不学点新东西

了解过后,看到Google弄了一个Go而且没出几年,果断入坑,贴一下go的宣传标语

用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐趣
以下就是他们讨论得出的对编程语言的设计要求:

  • 能够以更快的速度开发软件
  • 开发出的软件能够很好地在现代的多核计算机上工作
  • 开发出的软件能够很好地在网络环境下工作
  • 使人们能够享受软件开发的过程

这还有什么理由不选它呢

基础

这里推荐3个学习基础的网站,要学习一门新的语言基础语法、安装这些都是逃不过的

Go的环境搭建也非常简单:

  • 第一步: 打开浏览器,到这里Go下载页面
  • 第二步: 选择符合你系统的source点击下载
  • 第三步: 一直下一步知道完成安装
  • 第四步: 查看本地go环境变量 $GOROOT $GOARCH $GOOS $GOBIN (默认都在$HOME/go)

为了测试你是否安装成功?

cd ~
touch hello.go
粘贴以下代码

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello, 世界")
}

go run hello.go

输出“Hello, 世界”即表示安装成功

这些看到什么时候开始搞项目代码呢?

我的想法是至少做到以下几点:
1.关键字、标识符、后缀名、变量基本数据类型、运算符
2.基础语法 变量定义、if-else、for循环、函数声明
3.会用package 这里可以找你要的包

实战项目分析

先放代码目录结构,标准的MVC

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
.
├── README.md
├── api // Controller层,处理逻辑的地方,等同于React中的Reducers
│   ├── main.go
│   ├── user.go
│   └── video.go
├── auth
├── cache
│   └── main.go
├── conf // 配置信息,等同于React中config/constants
│   ├── conf.go
│   ├── i18n.go
│   └── locales
│   └── zh-cn.yaml
├── go.mod
├── go.sum
├── main.go //入口文件,等同于app.js
├── middleware // 中间键,顾名思义,等同于React中的也是middleware
│   ├── auth.go
│   ├── cors.go
│   └── session.go
├── model //Model层,跟数据库打交道的地方,等同于React中的store
│   ├── init.go
│   ├── migration.go
│   └── user.go
├── serializer // 序列化过的View层,丢一个json页面,等同于React中pages/component
│   ├── common.go
│   └── user.go
├── server // 路由层,分发路由的地方,等同于React中的router
│   └── router.go
├── service // 接收参数,异常处理
│   ├── user_login_service.go
│   └── user_register_service.go
└── util
└── common.go

这样看来的话,react和go的目录结构真的好像呀,其实我感觉就是差不多的,我这里想用类比react的方法来翻译一下每个目录实际在做什么,无非当我们是前端的时候,我们是跟接口打交道,而当我们是后端的时候,我们是跟数据库打交道。

(未完待续。。。

开发经验总结

本项目呢,我还用到了redis,所以这里简单说一下

  • 对redis不了解的同学可以百度一下
  • 做了redis其实就是实现了数据的持久化,将全部数据存储在内存中,支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制
  • 性能好,拿数据库系统比较,数据库在执行一个事务时将每个变化都写入硬盘,而redis是放内存读取
  • 可以简单理解为前端中的localstorage

在install包的时候呢遇到总下载失败,原因是包被墙,下面介绍两个方案解决,更推荐第二种方式

  • 如果自己有梯子,开http代理,把代理全局设置一下,类似这样
    export http_proxy=127.0.0.1:10181;export https_proxy=127.0.0.1:10181;
  • 换个源,就像前端中的cnpm或者taobao源,npm install失败的时候,一般切个源就搞定了
    1
    2
    3
    4
    5
    6
    // 需要依赖于 go module 功能,因此打开MODULE
    export GO111MODULE=on

    // 换个源,等同于用nrm use切源,亲测以下两个源都很快,任意挑选一个
    export GOPROXY=https://goproxy.io
    export GOPROXY=https://mirrors.aliyun.com/goproxy/

在开发过程中,对数据库的CRUD是难免的,所以这里我用Sequel Pro可以很方便的图形化管理数据库
在测试接口的时候,推荐Postman,高效且易操作

个人想法

  • 能做高并发的同时节约服务器资源,小服务的话用一个路由器都可以跑起来(ps:说人话!省钱!)
  • 📦打包快、体积轻,部署简单go build
  • 取精华、剔糟粕,性能是真的好呀
  • 这里省略一万个彩虹屁

其他一些东西

Author: inpm.cy@gmail.com

Link: https://inpm.top/2019/07/29/go开发总结/

Copyright: All articles in this blog are licensed under inpm unless stating additionally.

< PreviousPost
python爬旅游景点并导出Excel
NextPost >
React16复习总结
CATALOG
  1. 1. 题外话(ps:可以跳过)
  2. 2. 基础
    1. 2.1. Go的环境搭建也非常简单:
    2. 2.2. 为了测试你是否安装成功?
    3. 2.3. 这些看到什么时候开始搞项目代码呢?
  3. 3. 实战项目分析
  4. 4. 开发经验总结
  5. 5. 个人想法
  6. 6. 其他一些东西