当前位置: 首页 > news >正文

Go学习笔记_环境搭建

Go学习笔记_环境搭建


Go背景知识

go的特点(官网):

Build fast, reliable, and efficient software at scale

- Go is an open source programming language supported by Google
- Easy to learn and get started with
- Built-in concurrency and a robust standard library
- Growing ecosystem of partners, communities, and tools


go的特性:

  • 简单:只有25个关键字,C37个,C++84个
  • 对于复杂任务,比如并发编程,内存管理,都有内置的并发支持及垃圾回收机制
  • 高效:编译的静态类型语言,可以使用指针直接访问内存
  • 生产力:简洁清晰的依赖管理以及独特的接口类型设计以及对编程方式的约束:支持复合不支持继承的扩展方式,转语言非常方便

go的应用:

  • 云原生
  • 区块链

Go安装

1.官网下载

https://golang.google.cn/dl/


配置环境变量


go version

安装完成后,命令行输入go version可以查看是否安装成功

xxxx> go version
go version go1.17.7 windows/amd64

go env

go env可以查看当前生效的go环境参数配置

xxxx> go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=xxx\AppData\Local\go-build
set GOENV=xxx\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=xxx\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=xxx\go
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.7
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ 末小七\AppData\Local\Temp\go-build2034886303=/tmp/go-build -gno-record-gcc-switches

GOROOT

Go 语言安装根目录的路径,也就是 GO 语言的安装路径。

GOPATH

若干工作区目录的路径。是我们自己定义的工作空间。

1.8版本以前必须配置这个环境变量,1.8之后如果没有使用默认值

windows默认值是%USERPROFILE%/go

Unix:$HOME/go

Mac:可以通过修改~/.bash_profile设置

GOBIN

GO 程序生成的可执行文件(executable file)的路径。

GO111MODULE设置为on


第一个go程序

hello world

目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmqoZpPf-1646819609778)(image-20220309144929258.png)]

helloworld demo

package main

import "fmt"

func main() {
	fmt.Println("hello world~")
}

tips

在java中,package名字跟目录名字是要保持一致的,但是go是没有这个约束的。

退出返回值

与其他语言的差异
  • go中main函数不支持任何返回值
  • 通过os.Exit来返回状态
错误の示例

在这里插入图片描述

正确の示例
func main()  {
	fmt.Println("hello world~")
	os.Exit(-1)
}
##########################################
hello world~

Process finished with the exit code -1

获取命令行参数

错误の示例

在这里插入图片描述

正确の示例
func main()  {
	if len(os.Args)>1 {
		fmt.Println("args:",os.Args[1])
	}
	fmt.Println("hello world~")
	os.Exit(0)
}
##########################################
D:\gocode\godemo\basic\firstfunc> go run hello.go test
args: test
hello world~
与其他语言的差异
  • main函数不支持传入参数
  • 使用os.Args来获取命令行参数

应用程序入口要求

  • 必须是main包
  • 必须是main方法
  • 文件名不一定是mai.go

指令

go run

运行

go build

编译go文件为二进制文件,go默认使用静态链接,编译完后只是个独立的二进制文件,可以copy到不同的机器上运行。在安装部署的时候,非常便携。


单元测试

  • 源码文件以_test结尾
  • 测试方法以Test开头(大写开头表示包外可以访问

示例

package test

import "testing"

func TestHello(t *testing.T){
	t.Log("hello world test~")
}
##########################################
=== RUN   TestHello
    hello_test.go:6: hello world test~
--- PASS: TestHello (0.00s)
PASS

变量赋值

与其他语言的差异

  • 赋值可以进行自动类型推断
  • 在一个赋值语句中可以对多个变量进行同时赋值
  • go中可以使用 iota关键字快速设置连续值

示例

const (
	Monday = iota + 1
	Tuesday
	Wednesday
	Thursday
	Friday
	Saturday
	Sunday
)

func TestIota(t *testing.T) {
	fmt.Println("Monday:", Monday)
	fmt.Println("Tuesday:", Tuesday)
	fmt.Println("Wednesday:", Wednesday)
	fmt.Println("Thursday:", Thursday)
	fmt.Println("Friday:", Friday)
	fmt.Println("Saturday:", Saturday)
	fmt.Println("Sunday:", Sunday)
}
##########################################
=== RUN   TestIota
Monday: 1
Tuesday: 2
Wednesday: 3
Thursday: 4
Friday: 5
Saturday: 6
Sunday: 7
--- PASS: TestIota (0.00s)
PASS

相关文章:

  • Markdown学习
  • Markdown下载客户端
  • JDK,JRE,JVM三者的区别
  • 2020-12-01
  • 2020-12-02
  • 比较三个数字,求出最大值
  • Scanner限制次数猜数字
  • ArrayList,随机抽取6个数字在【1-33】中的随机数,并且遍历
  • 利用ArrayList遍历集合
  • 用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合中
  • String的用法截取,转换,切割
  • 由{1,2,3}转换成[word1#word2#word3#]]
  • 统计大写小写数字和其他字符串
  • static的用法静态方法的注意事项
  • Static的补充
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Asm.js的简单介绍
  • exports和module.exports
  • git 常用命令
  • iOS 系统授权开发
  • Javascript Math对象和Date对象常用方法详解
  • java概述
  • java中的hashCode
  • Next.js之基础概念(二)
  • node和express搭建代理服务器(源码)
  • 包装类对象
  • 程序员该如何有效的找工作?
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 使用docker-compose进行多节点部署
  • 思维导图—你不知道的JavaScript中卷
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #define与typedef区别
  • #pragma multi_compile #pragma shader_feature
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (2)(2.10) LTM telemetry
  • (6)STL算法之转换
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (pytorch进阶之路)扩散概率模型
  • (vue)页面文件上传获取:action地址
  • (八十八)VFL语言初步 - 实现布局
  • (二)linux使用docker容器运行mysql
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (实战篇)如何缓存数据
  • (一)Thymeleaf用法——Thymeleaf简介
  • ******IT公司面试题汇总+优秀技术博客汇总
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • ./configure、make、make install 命令
  • .net 7 上传文件踩坑