Golang 语言入门(一)

创作人 Leo


编辑时间 Tue Aug 2,2022 at 12:16


如何开始

环境安装

Windows 直接从 https://go.dev/dl/go1.18.5.windows-amd64.msi 下载,执行安装,相关环境变量会自动写入

MacOS 下载 https://go.dev/dl/go1.18.5.darwin-amd64.pkg ,执行安装,一般也会自动写入环境变量,如果没有,可以自己写入

GO 语言主要环境变量是 GOROOT 和 GOPATH

GOROOT go语言核心程序安装路径,linux 为 /usr/local/go

export GOROOT=/usr/local/go 

GOPATH 是用来安装第三方包的路径
go get / go install 会安装到这个位置

mkdir /data/gopath/bin   
mkdir /data/gopath/pkg   
mkdir /data/gopath/src   
export GOPATH=/data/gopath

开始编程

go 语言类似 c 语言,以 main 函数开始程序 新建 main.go

package main

import (
    "fmt"
)

func main(){
    fmt.Println("Hello world")
}

如何运行

打开 cmd 执行

> go run ./main.go
Hello world

基础(第一周)

大纲

  1. 掌握基础数据类型,变量声明规则 数据类型 变量
  2. 熟悉分支结构 条件语句 循环语句
  3. 熟悉函数,变量作用域 函数 变量作用域
  4. 学习数组构建,理解什么是切片 数组 切片
  5. (重点)学习结构体
  6. (重点)理解指针
  7. (重点)学习使用错误处理 错误处理

练习

目标:通过第一周学习能够基本使用 go 语言编程
本小节通过使用第三方 orm 包 Gorm 实现基础的数据保存获取操作

安装 mysql 点我进入下载页

建立数据库 test 数据表 test

CREATE TABLE `test` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

安装 gorm 和 mysql 驱动

> go get -u gorm.io/gorm
go: downloading gorm.io/gorm v1.23.8
go: downloading github.com/jinzhu/now v1.1.4
go: downloading github.com/jinzhu/now v1.1.5
>  go get -u gorm.io/driver/mysql
go: downloading gorm.io/driver/mysql v1.3.5
go: downloading github.com/go-sql-driver/mysql v1.6.0

学习 gorm 操作 GORM 指南
新建文件夹 gostudy
进入 gostudy 执行 go mod init demo.go/stage1
拷贝下列代码到 main.go,记得修改数据库连接密码

package main

import (
	"fmt"
	"time"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

var (
	// ORM全局句柄,他的作用域是整个包
	dbHandle *gorm.DB
)

// main 函数是整个程序的入口,程序将从这里执行
func main() {
	var err error

	// 首先初始化 ORM 句柄,连接到数据库
	err = initOrm()
	if err != nil {
		panic(err)
	}

	testName := fmt.Sprintf("name_%d", time.Now().Unix())
	err = saveTest(&ModelTest{Name: testName})
	if err != nil {
		panic(err)
	}

	selectAll()

	result, err := selectOne(1)
	if err != nil {
		fmt.Println("select failed ", err.Error())
		return
	}

	fmt.Printf("result %v \n", result)
}

type ModelTest struct {
	Id   int64
	Name string
}

// 实现 GORM 表模型接口
func (*ModelTest) TableName() string {
	return "test"
}

func saveTest(ttt *ModelTest) error {
	return dbHandle.Save(ttt).Error
}

func selectAll() {
	results := make([]*ModelTest, 0)
	// 考虑为什么这里需要取地址操作 &
	err := dbHandle.Find(&results).Error
	if gorm.IsRecordNotFoundError(err) {
		fmt.Println("no record found")
		return
	}
	if err != nil {
		fmt.Println("error ", err.Error())
		return
	}

	for k, v := range results {
		msg := fmt.Sprintf("index %d Id %d Name %s", k, v.Id, v.Name)
		fmt.Println(msg)
	}
}

func selectOne(id int64) (*ModelTest, error) {
	result := new(ModelTest)
	// 数据库操作语句的输入变量尽可能使用占位符操作
	err := dbHandle.Where("id=?", id).First(result).Error
	if gorm.IsRecordNotFoundError(err) {
		return nil, nil
	}
	return result, err
}

func initOrm() error {
	//"user:password@tcp(host:port)/dbname?charset=utf8&parseTime=True&loc=Local"
	myHost := "127.0.0.1"
	myUser := "root"
	myPwd := "lixinxin"
	myDb := "test"
	myPort := "3306"

	connStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", myUser, myPwd, myHost, myPort, myDb)

	var err error
	dbHandle, err = gorm.Open("mysql", connStr)
	if err != nil {
		return err
	}

	return nil
}

执行 go mod tidy 自动下载依赖包
执行 go run . 看效果

任务: 1. 理解这段程序,对每个注释在google搜索相关知识点并了解
2. 自己建立一个商品表,并实现该表的增删改查(最好自己单起一个目录做)

参考:
菜鸟教程
我的Golang学习笔记
GORM 指南


阅读:124
搜索
  • Linux 高性能网络编程库 Libevent 简介和示例 2288
  • Mac系统编译PHP7【20190929更新】 2186
  • Hadoop 高可用集群搭建 (Hadoop HA) 1852
  • Linux 常用命令 1837
  • zksync 和 layer2 1832
  • 安徽黄山游 1817
  • Windows 安装Swoole 1794
  • Hadoop 高可用YARN 配置 1750
  • 小白鼠问题 1707
  • 使用 Java+Thrift 实现异步事件处理服务 1627
简介
不定期分享软件开发经验,生活经验