唤醒手腕 Go 语言开发学习笔记(基本简介、环境安装)

news2024/11/19 0:25:59

1. Go语言简介

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

Go语言介绍、历史

Go是基于Inferno操作系统所开发的。Go于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后来追加了Windows系统下的实现。在2016年,Go被软件评价公司TIOBE 选为“TIOBE 2016 年最佳语言”。

Go语言 vs C语言

Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输。

在1.8版本中开放插件(Plugin)的支持,这意味着现在能从Go中动态加载部分函数。

Go语言 vs C++语言

Go语言与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。

Go 2.0版本将支持泛型,对于断言的存在,则持负面态度,同时也为自己不提供类型继承来辩护。

Go语言 vs Java语言

不同于Java,Go内嵌了关联数组(也称为哈希表 Hashes 或字典 Dictionaries),就像字符串类型一样。

Go语言应用领域

服务器编程、开发云平台、区块链、分布式系统、网络编程

Go语言编译器

当前有两个Go编译器分支,分别为官方编译器gc和gccgo。官方编译器在初期使用C写成,后用Go重写从而实现自举。Gccgo是一个使用标准GCC作为后端的Go编译器。

官方编译器支持跨平台编译(但不支持CGO),允许将源代码编译为可在目标系统、架构上执行的二进制文件。

2. Go语言安装开发环境

下载安装并配置环境变量:下载地址:https://golang.google.cn/dl/

在这里插入图片描述

这里注意,安装路径选择一个比较好找的路径,例如:E:\Environment\go,其他安装都选择”下一步“即可。

配置 go 语言环境变量

安装完成后,把E:\Environment\go\bin目录添加到环境变量,这里就可以使用go了。

在这里插入图片描述

如果采用exe模式安装go语言的环境,是会自动配置环境变量的。

测试本地安装go版本

在命令行输入 go version 查看版本,输出结果如下所示。

C:\Users\HP>go version
go version go1.19.5 windows/amd64

go.exe 编译器 commands 命令参数

The commands are:

        bug         start a bug report
        build       compile packages and dependencies
        clean       remove object files and cached files
        doc         show documentation for package or symbol
        env         print Go environment information
        fix         update packages to use new APIs
        fmt         gofmt (reformat) package sources
        generate    generate Go files by processing source
        get         add dependencies to current module and install them
        install     compile and install packages and dependencies
        list        list packages or modules
        mod         module maintenance
        work        workspace maintenance
        run         compile and run Go program
        test        test packages
        tool        run specified go tool
        version     print Go version
        vet         report likely mistakes in packages

go 环境 env 配置

go env -json:将环境变量键值对以json形式进行展示

C:\Users\HP>go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\HP\AppData\Local\go-build
set GOENV=C:\Users\HP\AppData\Roaming\go\env
······

go 语言 env 变量

env 变量变量说明
GO111MODULEmodule模式开启,在包管理那篇文章有提到
GOBIN当我们使用go install命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,一般我们将GOBIN设置为GOPATH下的bin目录
GOPATH表示go的工作目录,这个目录指定了需要从哪个地方寻找GO的包、可执行程序等
GOCACHEgo缓存目录,可以使用 go clean -cache 清空,如果目录变得很大的话
GOENVGO全局环境变量
GOMODCACHEgo mod进行包管理时的缓存目录,一般为GOPATH下的pkg下的mod目录,在包管理那篇文章有提到
GOOS当前操作系统
GOROOTGo语言的安装目录
GOPROXY代理,在包管理那篇文章有提到
GOPRIVATEgo get通过代理服务拉取私有仓库(企业内部module或托管站点上的private库),而代理服务不可能访问到私有仓库,会出现了404错误,于是go1.13后有了这个变量设置
GOTOOLDIRGO工具的安装目录,有cgo.exe等
GOVERSIONgo的版本号

配置 Proxy 代理配置(阿里)

由于国内的网络环境,我们可以通过配置GOPROXY避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建。

# Windows
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/  
    
# macOS 或 Linux 
export GOPROXY=https://mirrors.aliyun.com/goproxy/

3. Goland开发者工具

开发者工具 Tool

链接:https://www.jetbrains.com/zh-cn/go/download/#section=windows

在这里插入图片描述
Goland 2023 Special Anniversary Edition

在这里插入图片描述

go 语言程序案例 hello world

package main

import "fmt"

func main() {
	fmt.Printf("hello world")
}

运行结果:

GOROOT=E:\Environment\go #gosetup
GOPATH=C:\Users\HP\go #gosetup
E:\Environment\go\bin\go.exe build -o C:\Users\HP\AppData\Local\Temp\GoLand\___go_build_main_go.exe C:\Users\HP\GolandProjects\awesomeProject\main.go #gosetup
C:\Users\HP\AppData\Local\Temp\GoLand\___go_build_main_go.exe
hello world
Process finished with the exit code 0

vscode 安装 go

Windows平台按下 Ctrl+Shift+P,我们在这个输入框中输入>go:install,下面会自动搜索相关命令,我们选择Go:Install/Update Tools这个命令,然后安装所有的依赖包。

安装需要一定的时间,安装完之后重启即可。

main.go:1:1: expected ‘package’, found ‘EOF’
解决方案:按 ctrl+s 保存即可,要在编辑文本 按ctr+s

Vscode 快捷键

在这里插入图片描述

4. Go语言新建项目

早期的go项目使用gopath来管理项目,不方便而且容易出错,从golang 1.11 开始使用gomod管理项目,当然还有第三方模块例如govendor

go mod init mypro

基本流程:1.创建项目 2.初始化项目 3.创建包 4.创建模块 5.相互调用

go mod init 初始化

PS C:\Users\HP\Desktop\字节跳动Go语言\basic_learn_go> go mod init mypro
go: creating new go.mod: module mypro
go: to add module requirements and sums:
        go mod tidy

Go 语言基本组成说明

属性说明
包声明编写源文件时,必须在非注释的第一行指明这个文件属于哪个包,如package main。
引入包其实就是告诉Go 编译器这个程序需要使用的包,如import "fmt"其实就是引入了fmt包。
函数和c语言相同,即是一个可以实现某一个功能的函数体,每一个可执行程序中必须拥有一个main函数。
变量Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
语句 / 表达式在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
注释和c语言中的注释方式相同,可以在任何地方使用以 // 开头的单行注释。以 /* 开头,并以 */ 结尾来进行多行注释,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

需要注意的是:标识符是用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母和数字、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

5. Go语言变量

定义变量

声明变量的一般形式是使用 var 关键字,具体格式为:var identifier typename

如下的代码中我们定义了一个类型为int的变量。

package main
import "fmt"
func main() {
	var a int = 27
	fmt.Println(a);
} 

在go语言中定义了一个变量,指定变量类型,如果没有初始化,则变量默认为零值。零值就是变量没有做初始化时系统默认设置的值。

数值类型 0、布尔类型 false、字符串 “”(空字符串)

变量没有指定类型

在go语言中如果没有指定变量类型,可以通过变量的初始值来判断变量类型。如下代码

package main
import "fmt"
func main() {
    var d = true
    fmt.Println(d)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java中String类的常见问题

目录 Q1:为什么String类要定义成不可变类型? 方便String对象缓存HashCode值 字符串常量池的需要 衍生问题:String str new String("hello world") 创建了几个对象? 为了保障程序的安全性 Q2:String的…

2022年深度学习在时间序列预测和分类中的研究进展综述

时间序列预测的transformers的衰落和时间序列嵌入方法的兴起,还有异常检测、分类也取得了进步 2022年整个领域在几个不同的方面取得了进展,本文将尝试介绍一些在过去一年左右的时间里出现的更有前景和关键的论文,以及Flow Forecast [FF]预测…

解决Windows莫名其妙地从休眠状态唤醒的问题

因为经常写代码开很多个工作区,电脑经常就是合盖休眠,这样打开就能用,但是总是在我不经意的时候发现电脑风扇在狂转,不知道是哪个应用又在qj我的电源管理计划,今天午休发现电脑风扇狂转,打开发现是windows系…

c语言操作符(下)

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>: 讲解c语言中有关操作符的知识. 金句分享: ✨✨✨行程…

我用python写了个小病毒,老板再也不敢扣我工资啦

名字:阿玥的小东东 学习:python正在学习c 主页:阿玥的小东东 今天做个什么呢,我的好朋友提议做一个关机的代码吧,我这一想,对吼,我以前还做过一个关机代码呢,于是乎,今天…

时序收敛技巧之寄存器复制

1、何时需要复制寄存器? 在设计中的关键路径发现某个寄存器具有高扇出和高延迟时,使用寄存器复制是个不错的实现时序收敛的方法。下图是一个典型的例子: 可以看出,第一个寄存器的 IC(InterConnect) 延迟为 1.476ns,该寄…

seo站内优化的方法有哪些(站内优化和站外优化)

站内部优化什么意思 网站优化公司的内部优化意味着什么?网站内部优化,就是网站关键词优化、内容优化、内链优化等等,网站要有一定的排名和流量,要做到内部优化,要做到最快,最快的优化排名?接下…

「认知」打工人的自我修养

都说认知以外的钱难搞,那认知内的呢? 01互联网内卷年代,作为不着调的普通选手; 在诸多花里胡哨的黑话中,个人最待见的就是"认知"这个词; 认知,有强烈的抽象感; 想要深刻…

Mr. Cappuccino的第37杯咖啡——Kubernetes资源管理

Kubernetes资源管理kubectl常用的命令陈述式管理方法1. 创建一个namespace2. 查询所有namespace3. 在namespace下运行一个pod4. 查询指定namespace下的pod5. 查看指定pod的详细信息6. 删除pod7. 删除namespace声明式管理方法命令式对象配置1. 创建yaml文件2. 基于yaml文件创建资…

【JavaEE】多线程(初阶)

目录 Thread 线程的创建 线程的常见属性 中断线程 等待线程 休眠线程 线程的状态 多线程相比于单线程的优势 Thread 在Java中操作多线程,最常用的类就是Thread。 Thread 类是 JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一…

一网打尽带环链表问题(手把着手带你理解,木有基础也能看懂!)

目录 0.前言 1.认识带环链表 2.带环链表OJ问题简述 3.判断是否为带环链表 4. 寻找入环节点(法一:数学推理的魅力) 5. 寻找入环节点(暴力拆解带环链表的魄力) 6.番外:判断是否为带环链表(fast和slow的…

树上的DP

ACACAC来的如此之快,让我以为还要再调试几个点(h),本文涉及思路参考:参考文章 嗯,这个题和思路让我对跨父节点的树上链有了一个认识,我们来看一下: 如果说,我们要对这样的一条链进行dpdpdp操作&#xff0c…

[GXYCTF2019]BabysqliV3.0

发现我们随便上传一个以后返回的是 alert(Wrong pass); 密码错误 如果上传一个账号永真的话返回 Not this user! 没有这个用户,所以感觉可以使用盲注,对账号进行盲注 可是题目 ascii(substr((select database()),1,1))>1 也不对 最后才知道是…

电脑组装配件知识

目录 1.电脑硬件基础知识 1.1CPU 1.2内存 ​编辑 1.3硬盘 1.4主板 1.5显卡 ​编辑 1.6显示器 1.7电源 1.8机箱 2.电脑硬件搭配及选购 2.1硬件搭配原则 2.2怎样查询软件或游戏配置 2.3配件购买注意事项 2.4搭配一台普通办公电脑 3.电脑组装 1.电脑硬件基础知识 …

软件测试/测试开发 | 一文学会 Appium 环境配置

Appium 是一个开源的、跨平台的测试框架,可以用来测试 Native App、混合应用、移动 Web 应用(H5 应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium 坚持的测试理念: •无需用户对 App 进行任何修改或…

OAuth2.0 开放平台认证授权开发套件 Authmore-Framework 1.0 发布

简介 | Intro 基于 OAuth2.0 协议的开放平台认证授权开发套件, 包含授权服务和开放平台 Docker 镜像,基于 Spring Boot Starter 的资源服务工具包和客户端(第三方应用)工具包 优点 | Advantages 简洁:专注核心功能 —— 社会化…

剑指offer----C语言版----第十六天----面试题22:链表中的倒数第k个节点

目录 1. 链表中倒数第 k 个节点 1.1 题目描述 1.2 思路一 1.3 思路二: 1.4 总结----代码的鲁棒性 1. 链表中倒数第 k 个节点 原题链接: 剑指 Offer 22. 链表中倒数第k个节点 - 力扣(LeetCode)https://leetcode.cn/problems/l…

竹制品行业市场运行态势及未来前景分析

2023-2029年中国竹制品行业市场运行态势及未来前景分析报告报告编号:1691644免费目录下载:http://www.cninfo360.com/yjbg/qthy/qt/20230110/1691644.html本报告著作权归博研咨询所有,未经书面许可,任何组织和个人不得以任何形式复…

基于Power BI的终端消费会员客户价值RFM分析

一、原理:RFM分析 (一)概念 RFM模型衡量当前客户价值和客户潜在价值的重要工具和手段。通过一个客户的近期购买行为、购买的总体频率以及花了多少钱三个维度来描述该客户价值状况的客户分类模型。 (二)分析维度 R&a…

使用标量衍射理论和菲涅耳和弗劳恩霍夫衍射的衍射对波动光学进行建模(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本文使用Matlab对波动光学进行建模。包括使用标量衍射理论和菲涅耳和弗劳恩霍夫衍射的衍射。 📚2 运行结果 &#…