go新手探索之路一

这篇博客介绍了Go新手如何开始学习,包括安装Go环境,设定小目标为编写后端API,以及后期的大目标是处理大量数据。文章详细讲解了连接数据库的步骤,分析了在`bootstrap`文件夹下有多个文件时的组织方式,并强调了本地包引用的注意事项。
摘要由CSDN通过智能技术生成

安装go

当然,一门新语言,所需要做的第一步就是在自己的电脑上安装配置环境,使go项目能在自己的电脑里跑起来。这里大家自行搜索,网上很多资源。

设定一个小目标

我的目标是能快速的使用go进行开发,其他所有需要了解的东西如果在开发过程中遇到了问题再自行去了解,后续补充理论~~~我给自己设定一个小目标,使用go写后端API,保存表单提交数据:

后期大目标

使用excel下载or上传超百万数据,自定义下载格式or上传格式

小目标设计

需实现功能:

  1. 日志模块
  2. 中间键
  3. 参数配置
  4. 数据库ORM模型
  5. 返回格式化
  6. swagger文档
  7. 单元测试

对实现功能分优先级

  1. 连接数据库并往数据库写数据
  2. 数据库ORM模型
  3. 后端API

1.连接数据库

main.go

package main

import (
	beego "github.com/astaxie/beego/server/web"
	mysql "ExcelHandleProject/bootstrap"
)

func main() {
	db := mysql.ConnectDb()
	mysql.CreateNewTable(db)
	mysql.InsertData(db)
	mysql.QueryData(db)
	mysql.QueryAllData(db)
	mysql.DeleteData(db)

	beego.Run()
}

mysql.go

文件位置:
在这里插入图片描述

package bootstrap

import (
	"fmt"
	"log"
	"time"
	"database/sql"
	_ "github.com/go-sql-driver/mysql"
)

func ConnectDb() *sql.DB {
	db, err := sql.Open("mysql", "root:root@(127.0.0.1:3306)/excel_handle_project?parseTime=true")
	if err != nil {
		log.Fatal(err)
	}
	if err := db.Ping(); err != nil {
		log.Fatal(err)
	}
	fmt.Println("connect mysql success!")
	return db
}

func CreateNewTable(db *sql.DB)  {
	query := `
		CREATE TABLE users (
			id INT AUTO_INCREMENT,
			username TEXT NOT NULL,
			password TEXT NOT NULL,
			created_at DATETIME,
			PRIMARY KEY (id)
		);`
	if _, err := db.Exec(query); err != nil {
		log.Fatal(err)
	}
	fmt.Println("create table success!")
}

func InsertData(db *sql.DB)  {
	username := "johndoe"
	password := "secret"
	createdAt := time.Now()

	result, err := db.Exec(`INSERT INTO users (username, password, created_at) VALUES (?, ?, ?)`, username, password, createdAt)
	if err != nil {
		log.Fatal(err)
	}
	id, err := result.LastInsertId()
	_ = fmt.Sprintf("insert new data success, and id is %d", id)
}

func QueryData(db *sql.DB)  {
	var (
		id        int
		username  string
		password  string
		createdAt time.Time
	)

	query := "SELECT id, username, password, created_at FROM users WHERE id = ?"
	if err := db.QueryRow(query, 1).Scan(&id, &username, &password, &createdAt); err != nil {
		log.Fatal(err)
	}

	fmt.Println(id, username, password, createdAt)
}

func QueryAllData(db *sql.DB)  {
	type user struct {
		id        int 
		username  string
		password  string
		createdAt time.Time
	}

	rows, err := db.Query(`SELECT id, username, password, created_at FROM users`)
	if err != nil {
		log.Fatal(err)
	}

	defer rows.Close()

	var users []user
	for rows.Next(){
		var u user
		err := rows.Scan(&u.id, &u.username, &u.password, &u.createdAt)
		if err != nil {
			log.Fatal(err)
		}
		users = append(users, u)
	}

	if err := rows.Err(); err != nil {
		log.Fatal(err)
	}

	fmt.Printf("%#v", users)
}

func DeleteData(db *sql.DB)  {
	_, err := db.Exec(`DELETE FROM users WHERE id = ?`, 1)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("delele data success!")
}

运行结果:
在这里插入图片描述

2.若bootstrap文件夹下有多个文件

新手很容易遇到文件调用的问题,上述例子bootstrap文件下仅一个go文件,默认package为bootstrap

如果bootstrap下有多个文件怎么办?
在这里插入图片描述

如果在bootstrap下没有其他文件夹,仅有多个文件,则这多个文件的package必须相同,且这些文件的function的名称不能有重复;这个package的名称可以是文件夹名称,也可以统一自定义一个相同的名称

如果想明确go文件的功能,可以在文件夹下再创建一个文件夹,再将mysql.go移入进去,此时,mysql.go的package名称为mysql

import 时记住一个原则,具体到包名,而不是文件名,也不是文件夹名

变化的main.go文件

import (
	beego "github.com/astaxie/beego/server/web"
	"ExcelHandleProject/bootstrap/mysql"
)

func main() {
	db := mysql.ConnectDb()
	mysql.CreateNewTable(db)
	mysql.InsertData(db)
	mysql.QueryData(db)
	mysql.QueryAllData(db)
	mysql.DeleteData(db)

	beego.Run()
}

小结

此节主要注意的是本地包的引用,其他mysql操作,只要多熟悉go语法,就没有什么难度了~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值