每一种编程语言,从读一本好书开始

每一种编程语言,也从Helloworld开始


1. 环境准备

1.1 安装golang

在Ubuntu下,直接输入命令可以安装最新版本:

$ sudo apt-get install golang

如果是其他Linux系统,请查找相应安装命令,或者windows下用安装包直接安装;

1.2 环境配置并检查env

已经2020了,建议直接使用go mod来管理代码, 配置方法如下, 在bash中执行:

1 # 启动go module模式
2 go env -w GO111MODULE=on
3 # 使用国内代理,防止无法下载一些外网墙掉的包
4 go env -w GOPROXY=http://goproxy.cn,direct
5 # 国内的码云可以直接访问不走代理
6 go env -w GOPRIVATE=gitee.com

配置完成后, 可以见检查一下相关参数是否正确, 下面的做参考:

$ go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN="/home/neo/go-pro/bin"
GOCACHE="/home/neo/.cache/go-build"
GOENV="/home/neo/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY="gitee.com"
GONOSUMDB="gitee.com"
GOOS="linux"
GOPATH="/home/neo/go-pro"
GOPRIVATE="gitee.com"
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/lib/go-1.13"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/go-1.13/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build476496502=/tmp/go-build -gno-record-gcc-switches"

2. 手撕打招呼代码

2.1 建立接口文件 conversation.go

打开你最爱的编辑器, 输入打招呼函数 Conversation 内容,如下:

 1 package main
2
3 import (
4 "fmt"
5 )
6
7 // Conversation 触发一段对话, 询问你的名字并回答
8 func Conversation() {
9 fmt.Println("[下面是一段对话]")
10 fmt.Println("Hello, I'm Go, what's your name?")
11 name := ""
12 _, err := fmt.Scanln(&name)
13 if err != nil {
14 fmt.Println("对不起, error found:", err)
15 return
16 }
17 fmt.Println("很高兴认识你,", name)
18 }

2.2 建立主函数文件 hello-world.go

继续使用你最心爱的编辑器, 写入主文件 hello-world.go , main 函数内容如下:

1 package main
2
3 import "fmt"
4
5 func main() {
6 fmt.Println("Hello, 世界!")
7 Conversation()
8 }

这里只是简单调用了一下前面的文件中的Conversation函数;

2.3 手撕代码要go fmt

在存放上面两个文件的路径下, 直接执行go fmt即可, 被格式化的文件会输出文件名, 比如下面的例子,故意让Conversation函数调用点没有对齐代码,被修复了;

2.4 直接go run 运行第一个程序吧


3. 使用库上的代码

3.1 go get获取代码

本文的示例代码已经托管在码云平台, 大家可以直接取用; 在本地建立一个temp目录来进行实验。

当前文章代码目录为: gitee.com/NeoWorkShop/go-basics-study/ch01-say-hello 

neo@neo-hw-matebookxpro:~/go-pro/temp
$ go get -v gitee.com/NeoWorkShop/go-basics-study/ch01-say-hello
get "gitee.com/NeoWorkShop/go-basics-study": found meta tag get.metaImport{Prefix:"gitee.com/NeoWorkShop/go-basics-study", VCS:"git", RepoRoot:"https://gitee.com/NeoWorkShop/go-basics-study.git"} at //gitee.com/NeoWorkShop/go-basics-study?go-get=1
get "gitee.com/NeoWorkShop": found meta tag get.metaImport{Prefix:"gitee.com/NeoWorkShop", VCS:"git", RepoRoot:"https://gitee.com/NeoWorkShop"} at //gitee.com/NeoWorkShop?go-get=1
go: extracting gitee.com/NeoWorkShop/go-basics-study v1.1.1

获取到的文件,默认存放在 $GOPATH/pkg/mod 下, 结构如下:

$ tree ../pkg/mod/gitee.com/\!neo\!work\!shop/go-basics-study@v1.1.1/
../pkg/mod/gitee.com/!neo!work!shop/go-basics-study@v1.1.1/
├── ch01-say-hello
│   ├── conversation.go
│   └── hello-world.go
├── go.mod
├── LICENSE
└── README.md

两个文件正是步骤2中的代码;

3.2 go build构建小程序

直接使用标准的go build命令,可以在当前目录下生成可执行程序 ch01-say-hello ;

go build gitee.com/NeoWorkShop/go-basics-study/ch01-say-hello

运行结果如下:


福利:

[Go语言圣经(中文版)] http://books.studygolang.com/gopl-zh/

Go语言基础知识01-用Go打个招呼的更多相关文章

  1. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  2. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  3. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  4. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  5. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  6. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  7. C语言基础知识-运算符与表达式

    C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...

  8. C语言基础知识-数据类型

    C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...

  9. AI-图像基础知识-01

        目前人工智能Artificial Intelligence主要分为两大分支: 计算机视常见:Computer Vision,简称CV   CV主要是研究如何让机器看懂世界的一种技术,通过各种光 ...

  10. PHP语言基础知识

    目录 前言 第一章 PHP语言学习介绍 1.1 PHP部署安装环境 1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍 2.2 PHP常量变量介绍 2.2.1 PHP变 ...

随机推荐

  1. Spring Boot 集成阿里云 OSS 进行文件存储

    最近因为项目中需要存储很多的图片,不想存储到服务器上,因此就直接选用阿里云的对象服务(Object Storage Service,简称 OSS)来进行存储,本文将介绍 Spring Boot 集成 ...

  2. Redis之命令详解

    Redis命令手册:http://doc.redisfans.com/

  3. Dos拒绝服务Syn-Flood泛洪攻击--Smurf 攻击(一)

    Dos拒绝服务利用程序漏洞或一对一资源耗尽的Denial of Service 拒绝服务DDos 分布式拒绝服务 多对一 Syn-Flood泛洪攻击 发送syn包欺骗服务器建立半连接 攻击代码,利用s ...

  4. Java知识点JUC总结

    JUC:java.util.concurrent (Java并发编程工具类) 一般面试提问:面向对象和高级语法.Java集合类.Java多线程.JUC 和高并发.Java IO和 NIO 获取多线程的 ...

  5. flask-session、数据库连接池

    flask-session 作用:将默认保存的签名cookie中的值保存到redis/memcached/file/Mongodb/SQLAlchemy 安装:pip3 install flask-s ...

  6. Shareplex搭建步骤(rman)

    实施例:rman/BCV 环境准备 splex软件上传 源端: #mkdir /quest #chmod -R 755 /quest #chown -R oracle:oinstall /quest ...

  7. NLP常见任务

    借助BERT论文, 梳理下自然语言处理当前常见的任务. NLP任务 根据判断主题的级别, 将所有的NLP任务分为两种类型: token-level task: token级别的任务. 如完形填空(Cl ...

  8. 关于button和submit的form提交以及 页面跳转问题

    最近在做官网的注册登录form提交时遇到了这个问题,1.0时因为使用普通的模板并没有出现页面跳转失败问题 由于2.0时更换了注册模板,此时按钮样式是以下样式 而在css样式的模板里使用的是button ...

  9. 一文了解Zookeeper

    Zookeeper是Apache开源的一个分布式框架,它主要为分布式应用提供协调服务. Zookeeper主要负责存储和管理大家都关心的数据,一旦这些数据的状态发生变化,Zookeeper就会通知那些 ...

  10. Azure Storage 系列(六)使用Azure Queue Storage

    一,引言 在之前介绍到 Azure Storage 第一篇文章中就有介绍到 Azure Storage 是 Azure 上提供的一项存储服务,Azure 存储包括 对象.文件.磁盘.队列和表存储.这里 ...