Go语言基础学习(Go安装配置、基础语法)

一、简介及安装教程

1、为什么学习Go?

简单好记的关键词和语法;更高的效率;生态强大;语法检查严格,安全性高;严格的依赖管理, go mod 命令;强大的编译检查、严格的编码规范和完整的软件生命周期工具;跨平台交叉编程,多平台编译;异步编程复杂性低,易维护,Go语言中Channel设计,异步程序写起来非常自然;语言层面支持并发,go关键字(协程)使得go的并发效率极高;严格的语法规范;Go的并发、性能、安全性、易于部署等特性,使它容易成为"云原生语言"。

Go语言设计之初,确定了三大原则:简洁性、可读性、功能性。

2、安装教程

安装Go

下载地址: All releases - The Go Programming Language

选择合适的版本进行下载安装。

这里以 .msi 文件为例,进行安装教程。

双击 .msi 文件,进行下载

等待下载完成。

配置环境变量

在 电脑 > 属性 > 高级系统设置 > 环境变量

添加如下配置

在path中配置如下:

配置GOPATH:安装相关包时的下载位置

在path中添加GOPATH

配置GOPROXY:Go的代理,不配置的话,下载某些包会失败,需要科学上网。

验证是否安装成功

在命令行界面(cmd)输入 go env ,出现以下内容即成功安装。

将 GO111MODULE 设置为 ON

在命令行界面输入

set GO111MODULE=on

到此,Go下载已经完成。

Go编程工具

这里,我使用的是VSCode,也可以选择使用Goland,下载地址如下:

GoLand by JetBrains: More than just a Go IDE

VSCode配置Go的编程环境

在VSCode的插件管理中,搜索 Go ,下载插件

Hello,World!

Go 复制代码
// 导入 fmt 包并调用其中的 Println 函数输出 "Hello, world!"
// 导入类
package main
// 导入 fmt 包
import "fmt"
// 主函数
func main() {
	fmt.Println("Hello, world!")
}

二、基础语法

1、变量

变量的标准定义: var 变量名 变量类型

变量占用多少的内存,是由变量的类型决定的

Go 复制代码
// 定义一个变量name,类型为string,然后通过fmt.Scanln()函数从控制台读取用户输入的姓名,并将其赋值给name变量。
// 最后通过fmt.Println()函数输出欢迎语,其中包含用户输入的姓名。
package main

import "fmt"

func main() {
	var name string
	fmt.Println("Please enter your name:")
	fmt.Scanln(&name)
	fmt.Println("Hello, " + name + "!")
}

2、打包

将写好的程序进行发布,需要进行build操作。

golang可以打包成各个平台的可执行程序

Go 复制代码
// 打包 windows 执行程序
set GOOS=windows
set GOARCH=amd64
go build -o bin/app.exe main.go

// 打包 Linux 执行程序
set GOOS=linux
set GOARCH=amd64
go build -o bin/app main.go

// 打包 mac 执行文件
set GOOS=darwin
set GOARCH=amd64
go build -o bin/app_mac main.go

3、数据类型

go的数据类型分为以下几种:

数值类型:整型 和 浮点型

布尔类型:bool ,值为 true 和 false

字符类型:byte (底层uint8)和 rune (int32)

字符串类型:string

其他类型:数组、指针、结构体、Channel、函数、切片、any、map

类型别名

Go 复制代码
// 类型别名,给类型定义一个名称
type my_int int
// 这里是给int定义一个别名,为my_int

(1)数值类型

go提供有符号整型和无符号整型两种类型

有符号整型:int、int8、int16、int32、int64

无符号整型:uint、uint8、uint16、uint32、uint64、uintptr

注意:这里的8、16、32是位

无符号整型 uintptr ,是用于存放指针的,没有具体的bit大小,但是足够容纳指针

uintptr 类型在底层编程时才需要,特别是在Go与C的函数库或操作系统接口交互的地方
Go语言支持两种浮点型数据:float32 和 float64

输出时进行限制位数进行输出

如:fmt.print("%.5f",a) 即保留a的小数点后5位

(2)布尔类型

布尔类型只有 true 和 false ,且不能参与任何计算和类型转换

(3)字符类型

Go语言的字符类型有2种:

uint8类型,或者叫byte型,代表ASCII码的一个字符

rune类型,代表一个Unicode字符,当需要处理中文、日文或者其他复合字符时,需要用到rune类型。rune类型等价于int32类型。

ASCII定义128个字符,Unicode是ASCII的超集。

(4)类型推断

类型推断: 可以使用 := 操作符进行变量声明和赋值,Go会根据右侧的值自动推断变量类型,例如:y := 5

零值: 未初始化的变量会被赋予零值,数字类型为0,布尔类型为false,字符串类型为空字符串等。

多变量声明: 可以同时声明多个变量,例如:var a, b, c int

Go 复制代码
package main

import (
	"fmt"
)

func main() {
	// 单变量赋值
	var a int = 1

	// 多变量赋值
	var b, c int = 2, 3

	// 多变量定义并赋值
	var (
		d int    = 4
		e int    = 5
		f string = "world"
	)

	// 简化赋值
	g := "hello"

	// 打印变量值
	fmt.Println(a, b, c, d, e, f, g)
}

(5)常量

常量声明: 使用const关键字声明一个常量,例如:const pi = 3.14159。

常量赋值: 常量的值在声明时必须被赋值,一旦赋值后不可修改。

枚举常量: 可以使用一组常量来模拟枚举,例如:

Go 复制代码
const {
    a = 1
    b = 2
}

类型指定: 常量的类型也可以被指定,例如:const speed int = 300000。

常量表达式: 常量可使用表达式计算,例如:const secondsInHour = 60 * 60。

无类型常量: 常量可以是无类型的,根据上下文自动推断类型。例如,const x = 5会被推断为整数类型。

(6)类型转换

基本类型转换

在Go中基本类型可以互相转换,类型转换用于将一个数据类型转换成另一种数据类型。

显示类型转换

在Go中,使用强制转换,将一种数据类型转换成另一种数据类型。

语法:destinationType(expression),例如,float(10)

不兼容类型的转换

在Go中不兼容的数据类型之间,不能转换

类型别名的转换

如果有类型别名,转换时,注意别名的兼容性

(7)运算符

算数运算符:

  • 加法
  • 减法

* 乘法

/ 除法

% 取模(求余)

赋值运算符:

= 赋值

+= 加法赋值

-= 减法赋值

*= 乘法赋值

/= 除法赋值

%= 取模赋值

逻辑运算符

&& 逻辑与(AND)

|| 逻辑或(OR)

! 逻辑非(NOT)

比较运算符:

== 等于

<= 小于等于

>= 大于等于

!= 不等于

< 小于

> 大于

位运算符:

& 按位与(AND)

| 按位或(OR)

^ 按位异或(XOR)

<< 左移

>> 右移

其他:

& 取地址

* 指针运算符

++ 自增

-- 自减

按位清除运算符--- &^

将某些位上的位清零,即将指定位置上的位设置为0,用于处理二进制

对于每个位,右侧的操作数对应位为0,则结果与左侧数相同

对于每个位,右侧的操作数对应位为1,则结果被强制设置为0

Go 复制代码
package main

import "fmt"

func main() {
	a := 0b11001100
	b := 0b00110011

	result := a &^ b

	fmt.Printf("结果为:%08b\n", result)
	fmt.Println("结果为:", result)
}

4、函数

一个函数包含函数名、参数列表、返回值类型和函数体

如,写一个求和函数add

Go 复制代码
// 传入值为a,b都为int类型,返回也为int类型,该函数的返回值为a + b
func add(a int, b int) int {
    return a + b
}

函数可以有0个或多个参数,Go可以有0个、1个、多个返回结果

多个返回值

Go 复制代码
// 该函数有两个返回值,都为int类型
func moreresult(a int, b int) (int, int){
    // a , b 操作
    return int1, int2
}

命名返回值

Go 复制代码
// 命名返回值在函数中为局部变量,可以进行使用
func namefunc(width, heigh int) (area int){
    area = width * heigh
    return
}
// 该函数返回为 area 值为 width * heigh

空返回语句

Go 复制代码
// 空返回
func moreresult(a int, b int) (x, y int){
    x = a
    y = b
    return
}

按值传递

Go 复制代码
// 写一个函数,返回i累加
func incrementi(i int) {
    i++
}

5、条件语句

Go 复制代码
// 条件语句有两种:if语句和switch语句

// if语句
if 条件{
    // 内容
} else if 条件 {
    // 内容
} else {
    // 内容
}

// switch语句
switch 语句值 {
    case 值1:
        // 内容
    case 值2:
        // 内容

    ...

    default:
        // 内容
}
相关推荐
zongzi_49416 分钟前
二次封装的天气时间日历选择组件
开发语言·javascript·ecmascript
kikyo哎哟喂26 分钟前
Java 代理模式详解
java·开发语言·代理模式
duration~32 分钟前
SpringAOP模拟实现
java·开发语言
一条晒干的咸魚41 分钟前
【Web前端】实现基于 Promise 的 API:alarm API
开发语言·前端·javascript·api·promise
小A15941 分钟前
STM32完全学习——使用SysTick精确延时(阻塞式)
stm32·嵌入式硬件·学习
就爱六点起1 小时前
C/C++ 中的类型转换方式
c语言·开发语言·c++
我明天再来学Web渗透1 小时前
【SQL50】day 2
开发语言·数据结构·leetcode·面试
小A1591 小时前
STM32完全学习——使用标准库点亮LED
stm32·嵌入式硬件·学习
猫猫的小茶馆1 小时前
【C语言】指针常量和常量指针
linux·c语言·开发语言·嵌入式软件
朝九晚五ฺ1 小时前
【Linux探索学习】第十五弹——环境变量:深入解析操作系统中的进程环境变量
linux·运维·学习