Go

Go - 从零开发第一个Golang项目

2021-03-17  本文已影响0人  红薯爱帅
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

$ 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

完善代码

补充说明

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 -mod readonly -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
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"
$ 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。

上一篇下一篇

猜你喜欢

热点阅读