一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
前言
学习了 2 次 Golang,基本都是把基础语言都学了一遍,之后就又荒废了。今天就随意使用 Golang 写个脚本项目。
需求内容
1、通过 key 和 secret 获取 accessToken 2、使用 token 从第三方接口获取数据信息的,第三方接口的数据有 4 万多条,然而没有使用分页形式返回数据,那么只能是循环,然后判断数据量进行获取所有的信息 3、将获取到数据进行转成 sql ,insert 到本地的 db 数据中
项目结构
将项目工程化,搭建一个 baseCode 的项目
.
├── cmd
│ └── yxx-app
├── config
├── internal
│ ├── repo
│ ├── service
│ ├── pkg
│ └── utilies
│
└── pkg
-
/cmd 项目主干目录,主要放置 main.go ,负责项目的主要入口
-
/internal 项目所需其他内容,不允许被其他项目导入使用
- 再划分,业务逻辑 service层,数据访问层 repo,公共部分 ,其他模块pkg
-
/pkg 放置一些可以被外部程序安全导入的包,比如 缓存,mq等一些公共内容
-
/config 配置文件或者默认模版
遇到问题
- 创建的 struct 为什么无法在main 中引入
Golang 中没有 private、protected 、public 等访问控制修饰符,但可以通过字母大小写来控制权限,大写开头则能被其他包访问或者调用,小写开头只能在包内使用
type UserService struct { // 首字母大写 类似 public
name string
}
type roleService struct { // 小写的类似 private
name string
}
2、结构体绑定函数和结构体指针绑定函数
type UserService struct {
name string
}
// 给结构体指针绑定函数
func (userService *UserService) createUser(user UserModel) {
......
}
// 给结构体绑定函数
func (userService UserService) updateUser(user UserModel) {
......
}
// 使用时的区别
func main() {
user := &UserService{ "小明"}
user.updateUser(model)
var user UserService
user.createUser(model)
}
对结构体绑定函数时,需要对 UserService 进行复制,创建一个新的结构体,然后对新的结构体操作,不影响原来结构体的值
对结构体指针绑定函数,其实就是通过指针地址使用原结构体,所以如果操作都会改变原结构体
所以,该绑定在哪里,尽量绑定在结构体指针上,避免不必要的内存拷贝,但是如果遇到业务场景,不期望修改原有的结构体的值时,可以绑定到结构体上。