GO语言学习笔记(1)| 青训营笔记

160 阅读3分钟

[ go 与 golang | 青训营笔记]

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天, 在学习了go的相关基础知识以后,可以说是初步的了解了go,我在这过程中也记录了一些自己的学习经验以及心得,与大家分享一下。

1. 开发环境搭建【windows环境】

1.1 golang编译器下载

studygolang.com/dl

go.dev/dl/

直接下载最新版本的windows go环境,会自动配置环境变量

1.2 查询go环境

go version

1.3 编写hello world(hello.go)

package main

import "fmt"

func main() {
   fmt.Println("Hello, World!")
}

1.4 通过cmd运行hello.go文件

go run hello.go

如果出现"Hello World"就代表你的第一个go文件运行成功了,当然这只是第一步,为了更好的学习go,我们还需要一个趁手的IDE,也就是我们的goland

1.5 goland下载

www.jetbrains.com/go/download…

同学们如果没用破解工具可以申请学生认证,可以免费使用完整版

1.6 配置代理

在使用go的时候,我们也会去下载一些第三方依赖,比如我们在学习java的时候,也会安装maven,并且配置阿里云镜像,这块的配置类似配置maven.

Snipaste_2023-01-18_09-59-52.jpg

2. Go Modules

2.1 生成go.mod

Snipaste_2023-01-18_10-07-35.jpg

创建新项目之后,会在根目录下生成一个go.mod文件

如果刚拿到一个项目或者是没有这个mod文件

那么可以自己手动生成

go mod init

2.2 GOPATH

第三方存包的目录

Snipaste_2023-01-18_10-10-50.jpg

3. 注释和转义字符

3.1 注释

// 单行注释

/**
*多行注释
**/  

快捷键 ctrl + /

3.2 常用转义字符

go中引号的区别

  1. 双引号表示一个字符串,双引号内字符可以转义,比如:\n,\r
  2. 单引号只能用来包裹一个字节的ASCII码字符,比如:var a int = '中'
  3. 反引号引起来的字符串就不支持转义

4. 变量常量

4.1 批量声明

// 只声明,不赋值,默认是0
var v0 int

// 先声明
var v1 int
v1 = 1

// 声明的同时赋值
var v2 int = 2

// 声明赋值
var v3 = 3

// 自动推断
v4 := 4

fmt.Printf("v0=%v, v1=%v, v2=%v, v3=%v, v4=%v\n", v0, v1, v2, v3, v4)

对于int类型,默认值为0,对于string类型,默认值为""

4.1 常量Constant

声明之后不能更改

const a int = 1
fmt.Println(a)

4.2 常量Constant

iota可以实现常量的计数功能, iota就是当前变量的层数

const ( 
a int = iota 
b = 2 
c = iota 
d = iota 
e = 1 
f = iota ) 
fmt.Println(a, b, c, d, e, f) 
// 0 2 2 3 1 5

4.3 全局变量

package main

import "fmt"

var a int = 100

func main() {
  fmt.Println(a)
}

声明为全局变量之后,该变量可以不使用

4.4 全局跨包变量

在当前项目新建test目录

package test

import "fmt"

func main() {
    var Test int = 3
}

在主程序就可以直接使用,注意如果要使用跨包变量,则需要将该变量名首字母大写

package main

import (
  "fmt"
  "go_study/test"
)

func main() {
  fmt.Println(test.Test) // 3
}

5. 基本数据类型

5.1 整数型

Golang中所有的值类型变量常量都会在声明时被分配内存空间并赋予默认值

数字型 0

布尔型 false

字符串 ""

5.2 浮点型

f1 := 2.45
var f2 float32 = 2.34
fmt.Printf("f1 %v, %T\n", f1, f1)
fmt.Printf("f2 %v, %T\n", f2, f2)

5.3 字符型

byte uint8的别名

rune uint32的别名

const (
  c1 byte = 65
  c2      = 'a'
  c3 rune = '中'
)

fmt.Printf("c1 的码值=%v, 字符为:%c, 类型是%T\n", c1, c1, c1)
fmt.Printf("c2 的码值=%v, 字符为:%c, 类型是%T\n", c2, c2, c2)
fmt.Printf("c3 的码值=%v, 字符为:%c, 类型是%T\n", c3, c3, c3)

5.4 布尔型

type bool bool // true false

5.5 字符串型

var s string = "Hello"
fmt.Printf("s=%v, type is %T", s, s)
fmt.Println(len(s))