Go语言入门

Go语言入门

1、Go 语言的安装
1.1、下载

Go 语言官方下载地址:golang.google.cn/dl/

选择最新版的windows环境下,.msi后缀点击下载

下载好后,无脑点击下一步,可以更改安转位置到D盘。

1.2、配置环境
1.3、下载go插件

vscode下载go的插件

2、第一个Go语言代码
go 复制代码
// 导入 fmt 包并调用其中的 Println 函数输出 "Hello, world!"
// 导入类
package main  // 表明这个文件属于main包,是程序的入口文件 
// 导入 fmt 包
import "fmt"  //标准库的包,输入输出,格式化字符串的函数
// 主函数
func main() {
    fmt.Println("Hello, world!")
}
3、Go语言的特色

高性能、高并发、语法简单、快速编译

4、Go语言的基础语法
4.1、变量声明

在Go语言中,变量的声明使用var关键字。可以指定变量的类型,也可以让编译器根据初始值自动推断类型。未初始化的变量不能使用,因为Go语言强调变量在使用前必须被初始化。

csharp 复制代码
// 声明变量并初始化
var a string = "initial value"
var b, c int = 1, 2
fmt.Println(a, b, c)
4.2、常量

常量在Go语言中使用const关键字声明,一旦赋值就不能更改。常量可以是数字、字符串或者布尔值。

c 复制代码
// 声明常量
const s string = "constant"
const h = 5000000
fmt.Println(s, h)
4.3、数据类型

Go语言是静态类型语言,拥有丰富的内置类型。每种类型都有明确的位大小和内存布局。

  • 布尔型bool,只有两个值truefalse
  • 整型intint8int16int32int64uintuint8uint16uint32uint64等。
  • 浮点型float32float64
  • 复数型complex64complex128
  • 字符串型string,以UTF-8编码表示。
go 复制代码
// 各种数据类型的示例
var isTrue bool = true
​
var myInt int = 42
​
var myFloat float64 = 3.1415
​
var myComplex complex128 = 5 + 10i
​
var myString string = "Hello, Go!"
4.4、控制流程

Go语言的控制流程包括if语句和for循环,没有while循环,但可以通过for循环实现相同的功能。switch语句是另一种多分支选择结构。

go 复制代码
// if 语句
if 7%2 == 0 {
    fmt.Println("7 is even")
} else {
    fmt.Println("7 is odd")
}
​
// for 循环
for i := 0; i < 3; i++ {
    fmt.Println(i)
}
​
// switch 语句
switch os := runtime.GOOS; os {
case "darwin":
    fmt.Println("OS X.")
case "linux":
    fmt.Println("Linux.")
default:
    fmt.Printf("%s.\n", os)
}
5、数组与切片
5.1、数组

数组是固定长度的序列,一旦声明,其长度不可改变。

less 复制代码
// 声明一个整型数组
var arr [5]int
arr[0] = 1
arr[1] = 2
fmt.Println(arr)
​
// 使用数组字面量初始化
b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
5.2、切片

切片是数组的抽象表示,允许动态地处理不同长度的序列。切片比数组更加灵活,是Go语言中处理集合数据的首选方式。

go 复制代码
// 创建切片
s := make([]string, 2)
s[0] = "a"
s[1] = "bcd"
fmt.Println(s)
​
// 切片追加
s = append(s, "efg", "hi")
fmt.Println(s)
​
// 切片复制
s2 := make([]string, len(s))
copy(s2, s)
fmt.Println(s2)
6、映射(Map)

映射是Go语言中存储键值对的数据结构,通过make函数创建。

go 复制代码
// 创建映射
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println("m:", m)
​
// 访问映射
r, ok := m["one"]
fmt.Println("r:", r, "ok:", ok)
​
// 删除映射中的元素
delete(m, "one")
fmt.Println("m after delete:", m)
7、函数

函数是执行特定任务的代码块,可以有参数和返回值。

csharp 复制代码
// 定义一个函数
func add(a, b int) int {
    return a + b
}
​
// 调用函数
fmt.Println("Add result:", add(3, 4))
8、结构体与方法
8.1、结构体

结构体是自定义数据类型,用于将多个变量组合成一个单一类型。

go 复制代码
// 定义结构体
type user struct {
    name string
    password string
}
​
// 实例化结构体
u := user{"Bob", "secret"}
fmt.Println(u)
8.2、方法

方法是一种特殊的函数,它与结构体关联,可以访问结构体的字段。

go 复制代码
// 定义结构体方法
func (u *user) check(password string) bool {
    return u.password == password
}
​
// 调用方法
fmt.Println("Check result:", u.check("secret"))
9、接口与面向对象
9.1、接口

接口在Go语言中是一种类型,包含一组方法签名。它定义了一组方法,任何实现了这些方法的类型都实现了该接口。

go 复制代码
// 定义接口
type Reader interface {
    Read(p []byte) (n int, err error)
}
​
type Writer interface {
    Write(p []byte) (n int, err error)
}
9.2、面向对象

虽然Go语言没有类和继承,但可以通过接口和组合来实现面向对象编程的特性,如封装、继承和多态。

10、错误处理

错误处理是Go语言中处理异常情况的重要机制,它使用error类型来表示错误。

go 复制代码
// 错误处理
func findUser(users []user, name string) (*user, error) {
    for _, u := range users {
        if u.name == name {
            return &u, nil
        }
    }
    return nil, errors.New("user not found")
}
​
// 使用错误处理
u, err := findUser([]user{{"Bob", "secret"}}, "Bob")
if err != nil {
    fmt.Println(err)
} else {
    fmt.Println("User found:", u.name)
}
相关推荐
Find23 天前
MaxKB 集成langchain + Vue + PostgreSQL 的 本地大模型+本地知识库 构建私有大模型 | MarsCode AI刷题
青训营笔记
理tan王子23 天前
伴学笔记 AI刷题 14.数组元素之和最小化 | 豆包MarsCode AI刷题
青训营笔记
理tan王子23 天前
伴学笔记 AI刷题 25.DNA序列编辑距离 | 豆包MarsCode AI刷题
青训营笔记
理tan王子23 天前
伴学笔记 AI刷题 9.超市里的货物架调整 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵25 天前
分而治之,主题分片Partition | 豆包MarsCode AI刷题
青训营笔记
三六1 个月前
刷题漫漫路(二)| 豆包MarsCode AI刷题
青训营笔记
tabzzz1 个月前
突破Zustand的局限性:与React ContentAPI搭配使用
前端·青训营笔记
Serendipity5651 个月前
Go 语言入门指南——单元测试 | 豆包MarsCode AI刷题;
青训营笔记
wml1 个月前
前端实践-使用React实现简单代办事项列表 | 豆包MarsCode AI刷题
青训营笔记
用户44710308932421 个月前
详解前端框架中的设计模式 | 豆包MarsCode AI刷题
青训营笔记