Skip to content

zspishere/tour

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
shuzhang
Mar 17, 2021
10a99e5 · Mar 17, 2021

History

3 Commits
Mar 17, 2021
Mar 16, 2021
Mar 16, 2021
Mar 16, 2021
Mar 16, 2021
Mar 16, 2021
Mar 16, 2021
Mar 16, 2021
Mar 16, 2021
Mar 17, 2021

Repository files navigation

Go语言编程之旅:一起用Go做项目

1. 概述

Go语言特性请参考我的上一篇文章,本文不再赘述啦: https://www.jianshu.com/p/2f56e491172d

本文重点介绍Go语言开发环境的安装流程,以及第一个Golang项目的开发流程(来自上面那本书)。

2. Go开发环境安装

Windows10

$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
$ go env -w GOPATH=D:\golang

Ubuntu20.04

  • 下载最新版本1.16.2,并配置env
$ wget -c https://dl.google.com/go/go1.16.2.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
$ sed -i '$a\export PATH=$PATH:/usr/local/go/bin' ~/.profile
$ sed -i '$a\export GO111MODULE=on' ~/.profile
$ sed -i '$a\export GOPROXY=https://goproxy.cn,direct' ~/.profile
$ source ~/.profile
$ go version
go version go1.16.2 linux/amd64

3. 从零创建一个Golang项目

初始化项目,其中tour目录位置随意

$ mkdir tour && cd tour
$ go mod init test.com/shuzhang/tour  // will create go.mod file
$ go get -u github.com/spf13/cobra    // will create go.sum file

完善项目目录结构

$ touch main.go
$ mkdir -p cmd internal
$ tree tour
├── main.go
├── go.mod
├── go.sum
├── cmd
└── internal

完善代码

补充说明

  • 增加了makefile,汇总了一些常用的go命令
BINARY_NAME=tour

all: test install

#compile:
#	echo "Compiling for every OS and Platform"
#	GOOS=freebsd GOARCH=386 go build -o bin/main-freebsd-386 main.go
#	GOOS=linux GOARCH=386 go build -o bin/main-linux-386 main.go
#	GOOS=windows GOARCH=386 go build -o bin/main-windows-386 main.go

build:
	go build -o ${BINARY_NAME} main.go

test:
	go test -v main.go

run: build
	./${BINARY_NAME}

install: build
	cp ./${BINARY_NAME} ${GOPATH}/bin

deps:
	go mod download

clean:
	go clean
	rm ${BINARY_NAME} ${GOPATH}/bin
  • 增加了dockerfile,支持容器化部署
FROM golang:1.16.2
LABEL maintainer="zspishere@163.com"

ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
# ENV GOMAXPROCS=8

RUN mkdir /code
WORKDIR /code
COPY . /code/
RUN cd /code && make all

ENTRYPOINT ["tour"]
CMD ["time", "now"]
  • 启动测试
$ docker build -t golang/tour .

$ docker run golang/tour -h
2021/03/16 15:36:11 maxprocs: Leaving GOMAXPROCS=8: CPU quota undefined
2021/03/16 15:36:11 let us begin ...
Usage:
   [command]

Available Commands:
  help        Help about any command
  json        json转换和处理
  sql         sql转换和处理
  time        时间格式处理
  word        单词格式转换

Flags:
  -h, --help   help for this command

Use " [command] --help" for more information about a command.

$ docker run golang/tour time now
2021/03/16 15:36:05 maxprocs: Leaving GOMAXPROCS=8: CPU quota undefined
2021/03/16 15:36:05 let us begin ...
2021/03/16 15:36:05 输出结果: 2021-03-16 23:36:05, 1615908965

$ docker run golang/tour json struct -s '{"a": 1, "xx": 234, "ss": {"a": 1, "xx": 234},"yy": "asdf", "listaa": ["asdf", "asdf"]}'
2021/03/17 19:42:33 maxprocs: Leaving GOMAXPROCS=8: CPU quota undefined
2021/03/17 19:42:33 let us begin ...
2021/03/17 19:42:33 输出结果:
type Tour struct {
A float64
Xx float64
Ss map[string]interface {}
Yy string
Listaa []string
}

$ docker run golang/tour sql struct --host 10.20.3.233:33306 --password 123123 --table user --username root --db test
2021/03/17 20:12:15 maxprocs: Leaving GOMAXPROCS=8: CPU quota undefined
2021/03/17 20:12:15 let us begin ...
type User struct {
         // 唯一ID
         Id     int32   `json:"id"`
         // 昵称
         Nickname       string  `json:"nickname"`
         // 姓名
         Name   string  `json:"name"`
         // 性别
         Sex    int8    `json:"sex"`
         // 部门
         Department     string  `json:"department"`
         // 生日
         Birthday       time.Time       `json:"birthday"`
         // 创建时间
         CreatedAt      time.Time       `json:"created_at"`
}
func (model User) TableName() string {
        return "user"
  • 启动mysql服务脚本
$ docker run --name test-mysql \
     -v `pwd`/mysql:/var/lib/mysql \
     -e MYSQL_ROOT_PASSWORD=123123 \
     -p 33306:3306 \
     -d mysql

4. 下一步计划

主流的静态语言并不多,诸如C/C++、Java、C#、Go等,其中,Go凭借其自身优势,既利于项目开发迭代,又不失程序执行效率,逐渐被大厂认可。

然而,Go的坑也很多,同时语言本身也在不断升级。路漫漫其修远兮,吾将上下而求索!下一步,将继续深入学习Web、高并发等场景的应用。

补充:本文build的docker image比较大,近1G。在Production环境,可以直接使用debian镜像执行Go程序,114MB。

Releases

No releases published

Packages

No packages published