From 57cda30d14302abd52fa60ce677447ef9adbbc18 Mon Sep 17 00:00:00 2001
From: lihaibineric 实时查看GPU使用情况 行代码的意思是只选择指定标号GPU进行使用,执行完该行代码之后python环境无法检测到指定GPU之外的其他 对于MACOS,用VIM进入 添加环境变量的语句是,这里以增加路径为例子 添加完环境变量之后,激活一下设置 同样对于Linux系统而言也是相同的步骤 添加完成之后最后激活一下设定 如果想直接查看当前某个环境变量的设置的值可以用以下的命令进行查看 输出的值是当前的这个环境变量设置的值,比如会输出:user/workspace/golang ping 一般用于检测当前计算机到目标计算机之间的网络
是否通畅,数值越大,速度越慢 首先先查看对应的GPU内存:nvidia-smi 然后在终端输出代码: GOROOT 表示的是安装包所在的位置,一般不需要修改 GOPATH表示的是运行文件所在的位置,表示的是workspace的文件位置,里面新建三个文件夹:bin
+pkg src,src一般用来表示工程文件所在的位置 修改GOPATH的路径 将文件查找的路径设置为GOROOT和GOPATH的并集合 注意这个地方不能将gomod设置为on,否则有问题 将两个部分并在一起之后,就能从两个地方开始寻找定义的包 首先会从GOROOT进行搜索,接着从GOPATH进行搜索 对于已经写好的go文件,这里以hello.go作为例子,直接使用以下语句进行编译并运行 或者将编译和运行两个过程分开,先编译后运行: 首先给出基本框架 程序的第一行声明了名为main的package。一个package会包含一个或多个.go源代码文件。每一个源文件都是以package开头。比如我们的例子里是package
+main。这行声明语句表示该文件是属于哪一个package。 同时需要注意,一个程序的 多个返回值初始化设置了函数的形参之后,初始值是0 go每次设置一个变量值之后都有初始值,如果是数据就是0,如果是字符串那么就是空,防止出现一些野指针的情况 分别建不同的文件夹对应的就是package的名字,相应的在.go文件内部声明package的名字 注意:
+在包中设置接口的时候,函数名称必须第一个字母是大写,如果是小写的话将无法识别 如果函数名第一个是大写就是对外开放的函数,认为是public 如果函数名第一个是小写的话就认为是私有的函数,认为是private init函数的调用过程,首先会对包中的init进行初始化再进行调用接口 如果你导入了包比如lib1,但是没有使用这个包里面的接口函数,仍然会报错 但是如果我不想调用lib1的函数接口,但是想使用lib1的init()函数怎么办呢,如果这个时候直接导入了包
+但是不调用接口,就会出现上述的错误 匿名导包方式 在导入的包前面加上下划线来认为这个包是匿名的,这样就能知进行init操作 给新导入的包起个别的名字,比如叫mylib作为新的别名 或者直接使用·来进行调用 最好别使用这种,如果两个包的函数名称一样那么可能会导致出现歧义的情况 和C++以及C中的是一样的 定义的时候 *int 传递变量的地址& 通过这种方式进行初始化数组以及进行切片操作,通过range关键字进行遍历数组,并给出index和value进行给出不同的下标和数值 固定数组传递的是一个值拷贝 动态数组 slice 但是动态数组或者是说切片是一个引用传递 同时动态数组传递的过程中的参数形式是一致的,能够适配所有的slice参数类型,但是对于 这里面的下划线表示的是不需要考虑的index的数值,可以忽略 这里是关于切片slice的声明和打印 打印的结果是 声明slice但是不一定声明了空间,因此需要注意的是声明的同时并给出空间大小,同时没办法中途增加空间 注意if else的格式有要求 关于切片的截取操作 变量结构 学习网站: go的官网下载网站,选择合适的系统版本进行安装 下载安装包并按照安装包的指引下载相关的内容 对于Mac系统会直接配置好环境变量,根据官网的安装手册进行安装 测试GO的版本 测试GO的环境变量 对于已经写好的go文件,这里以hello.go作为例子,直接使用以下语句进行编译并运行 或者将编译和运行两个过程分开,先编译后运行: 学习网站: go的官网下载网站,选择合适的系统版本进行安装 下载安装包并按照安装包的指引下载相关的内容 对于Mac系统会直接配置好环境变量,根据官网的安装手册进行安装 测试GO的版本 测试GO的环境变量 GOROOT 表示的是安装包所在的位置,一般不需要修改 GOPATH表示的是运行文件所在的位置,表示的是workspace的文件位置,里面新建三个文件夹:binpkg src,src一般用来表示工程文件所在的位置 修改GOPATH的路径 将文件查找的路径设置为GOROOT和GOPATH的并集合 注意这个地方不能将gomod设置为on,否则有问题 将两个部分并在一起之后,就能从两个地方开始寻找定义的包 首先会从GOROOT进行搜索,接着从GOPATH进行搜索 对于已经写好的go文件,这里以hello.go作为例子,直接使用以下语句进行编译并运行 或者将编译和运行两个过程分开,先编译后运行: 首先给出基本框架 程序的第一行声明了名为main的package。一个package会包含一个或多个.go源代码文件。每一个源文件都是以package开头。比如我们的例子里是packagemain。这行声明语句表示该文件是属于哪一个package。 同时需要注意,一个程序的 多个返回值初始化设置了函数的形参之后,初始值是0 go每次设置一个变量值之后都有初始值,如果是数据就是0,如果是字符串那么就是空,防止出现一些野指针的情况 分别建不同的文件夹对应的就是package的名字,相应的在.go文件内部声明package的名字 注意:在包中设置接口的时候,函数名称必须第一个字母是大写,如果是小写的话将无法识别 如果函数名第一个是大写就是对外开放的函数,认为是public 如果函数名第一个是小写的话就认为是私有的函数,认为是private init函数的调用过程,首先会对包中的init进行初始化再进行调用接口 如果你导入了包比如lib1,但是没有使用这个包里面的接口函数,仍然会报错 但是如果我不想调用lib1的函数接口,但是想使用lib1的init()函数怎么办呢,如果这个时候直接导入了包但是不调用接口,就会出现上述的错误 匿名导包方式 在导入的包前面加上下划线来认为这个包是匿名的,这样就能知进行init操作 给新导入的包起个别的名字,比如叫mylib作为新的别名 或者直接使用·来进行调用 最好别使用这种,如果两个包的函数名称一样那么可能会导致出现歧义的情况 和C++以及C中的是一样的 定义的时候 *int 传递变量的地址& 通过这种方式进行初始化数组以及进行切片操作,通过range关键字进行遍历数组,并给出index和value进行给出不同的下标和数值 固定数组传递的是一个值拷贝 动态数组 slice 但是动态数组或者是说切片是一个引用传递 同时动态数组传递的过程中的参数形式是一致的,能够适配所有的slice参数类型,但是对于 这里面的下划线表示的是不需要考虑的index的数值,可以忽略 这里是关于切片slice的声明和打印 打印的结果是 声明slice但是不一定声明了空间,因此需要注意的是声明的同时并给出空间大小,同时没办法中途增加空间 注意if else的格式有要求 关于切片的截取操作 变量结构 终端中输入 cd .. #返回父级目录 相对路径 在输入路径时,最前面不是 / 或者 ~,表示相对 当前目录所在的目录位置 绝对路径 在输入路径时,最前面是 / 或者 ~,表示从根目录/家目录 开始的具体目录位置 mv 文件名 指定的路径位置 -i 用于提示 修改文件夹名称:mv 原来的文件夹名称 后来的文件夹名称 cp 当前文件夹下某个文件名(带后缀) 目标路径 -i用于提示 使用rm来对文件进行删除 -i 进行删除前的查询 Top 来显示CPU的占用情况: top退出方式是==用q进行退出== free查看内存的使用情况 vmstat指令也是用于查看内存的使用 Procs(进程): r:运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1) b:等待IO的进程数量 Memory(内存):swpd: 使用虚拟内存大小;free:空闲物理内存大小;buff: 用作缓冲的内存大小;cache:用作缓存的内存大小 Swap: si:每秒从交换区写到内存的大小,由磁盘调入内存;so:每秒写入交换区的内存大小,由内存调入磁盘 IO:bi: 每秒读取的块数,bo:每秒写入的块数 系统: in: 每秒中断数,包括时钟中断。 cs:每秒上下文切换数。 CPU(以百分比表示):us:用户进程执行时间百分比(user time) sy: 内核系统进程执行时间百分比(systemtime) ;wa: IO等待时间百分比; id: 空闲时间百分比 实时查看GPU使用情况 行代码的意思是只选择指定标号GPU进行使用,执行完该行代码之后python环境无法检测到指定GPU之外的其他 所谓进程,通俗地说就是当前正在执行的一个程序 ping 一般用于检测当前计算机到目标计算机之间的网络是否通畅,数值越大,速度越慢 首先先查看对应的GPU内存:nvidia-smi 然后在终端输出代码: 再或者使用 终端中输入 cd .. #返回父级目录 相对路径 在输入路径时,最前面不是 / 或者 ~,表示相对 当前目录所在的目录位置 绝对路径 在输入路径时,最前面是 / 或者 ~,表示从根目录/家目录 开始的具体目录位置 mv 文件名 指定的路径位置 -i 用于提示 修改文件夹名称:mv 原来的文件夹名称 后来的文件夹名称 cp 当前文件夹下某个文件名(带后缀) 目标路径 -i用于提示 使用rm来对文件进行删除 -i 进行删除前的查询 Top 来显示CPU的占用情况: top退出方式是==用q进行退出== free查看内存的使用情况 vmstat指令也是用于查看内存的使用 Procs(进程): r:运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1) b:等待IO的进程数量 Memory(内存):swpd: 使用虚拟内存大小;free:空闲物理内存大小;buff: 用作缓冲的内存大小;cache:用作缓存的内存大小 Swap: si:每秒从交换区写到内存的大小,由磁盘调入内存;so:每秒写入交换区的内存大小,由内存调入磁盘 IO:bi: 每秒读取的块数,bo:每秒写入的块数 系统: in: 每秒中断数,包括时钟中断。 cs:每秒上下文切换数。 CPU(以百分比表示):us:用户进程执行时间百分比(user time) sy: 内核系统进程执行时间百分比(systemtime) ;wa: IO等待时间百分比; id: 空闲时间百分比 实时查看GPU使用情况 行代码的意思是只选择指定标号GPU进行使用,执行完该行代码之后python环境无法检测到指定GPU之外的其他 对于MACOS,用VIM进入 添加环境变量的语句是,这里以增加路径为例子 添加完环境变量之后,激活一下设置 同样对于Linux系统而言也是相同的步骤 添加完成之后最后激活一下设定 如果想直接查看当前某个环境变量的设置的值可以用以下的命令进行查看 输出的值是当前的这个环境变量设置的值,比如会输出:user/workspace/golang 所谓进程,通俗地说就是当前正在执行的一个程序 ping 一般用于检测当前计算机到目标计算机之间的网络是否通畅,数值越大,速度越慢 首先先查看对应的GPU内存:nvidia-smi 然后在终端输出代码: 再或者使用Linux中查看系统使用情况
-查看GPU:nvidia-smi
+查看系统的GPU
1
watch -n 1 nvidia-smi
系统环境变量
+1
vim ~/.zshrc
1
export GOPATH="user/workspace/golang"
1
source ~/.zshrc
1
vim ~/.bashrc
1
source ~/.bashrc
1
echo $GOPARH
显示Linux系统的其他信息
时间和日期
@@ -570,12 +584,11 @@
-进程信息
ping检测当前服务器的网络是否通畅
+网络测试
1
2
3
4# 检测到目标主机是否连接正常
$ ping IP地址 www.baidu.com
# 检测本地网卡工作正常
$ ping 127.0.0.1指定代码在哪个GPU上跑
+GPU运行指定
安装步骤:
go语言没有异常,全部都用ERROR来表示
+1
export GOPATH="/Users/lihaibin/workspace/golang"
1
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Go基本语法
如何编译并运行一个Go文件
1
go run hello.go
1
2go build hello.go
./ hellohello.go
+1
2
3
4
5
6
7
8
9
10
11package main
import(
"fmt",
"time"
)
func main(){
fmt.Println("hello world!")
time.Sleep(1*time.Second)
}main
入口函数必须不带任何输入参数和返回结果参数
+函数
+import和init
+
+GO指针
+数组与切片
+1
2
3
4
5 //声明切片之后的长度是3,同时初始化的值是1,2,3
slice1 :=[]int{1,2,3}
//%v表示的是打印出全部的表示信息
fmt.Printf("len = %d, slice =%v\n", len(slice1),slice1)
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50package main
import (
"fmt"
)
func main(){
/*
声明切片之后的长度是3,同时初始化的值是1,2,3
*/
slice1 :=[]int{1,2,3}
//%v表示的是打印出全部的表示信息
fmt.Printf("len = %d, slice =%v\n", len(slice1),slice1)
//直接对没有赋予空间的位置修改会出现位置越界
//slice1[3]=999
slice1 = make([]int,4)
//但是这个时候就只会重新赋予空间并复制0
fmt.Printf("len = %d, slice =%v\n", len(slice1),slice1)
/*
声明slice是切片,但是没有分配空间
*/
var slice2 []int
fmt.Printf("len = %d, slice =%v\n", len(slice2),slice2)
//slice2[0]=2 //直接赋予数值会出现错误,越界
slice2 = make([]int,3)
//开辟空间,但是默认值都是0
fmt.Printf("len = %d, slice =%v\n", len(slice2),slice2)
slice2[0]=1000
fmt.Printf("len = %d, slice =%v\n", len(slice2),slice2)
//此时就修改成功
/*
声明slice类型,同时分配空间
*/
var slice3 =make([]int,5)
fmt.Printf("len = %d, slice =%v\n", len(slice3),slice3)
/*
判断一个slice切片是不是为0
*/
if slice1 == nil{
fmt.Println("slice1 is null")
}else{
fmt.Println("slice1 is not null")
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18/*
切片的截取
*/
var slice6 = make([]int,3)
slice6[0]=1
slice6[2]=33
fmt.Printf("len = %d, cap = %d, slice =%v\n", len(slice6), cap(slice6), slice6)
//截取的过程中是左闭右开
s1:=slice6[0:2]
// s1:=slice6[:]//表示截取全部
fmt.Println(s1)
//注意此时的s1的地址和slice6的位置一样了
//copy
var s2 = make([]int,3)
copy(s2,slice6)
fmt.Println(s2)// 只会从头开始截取s2长度的,如果长了那么就是0,
//否则就是选择slice6中相同长度的元素,从左到右边map的操作
+反射
+Go的环境安装
下载官网:
安装步骤:
1
go version
1
go env
Go基本语法
如何编译并运行一个Go文件
1
go run hello.go
1
2go build hello.go
./ helloGo的环境安装
下载官网:
安装步骤:
1
go version
1
go env
1
export GOPATH="/Users/lihaibin/workspace/golang"
1
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Go基本语法
如何编译并运行一个Go文件
1
go run hello.go
1
2go build hello.go
./ hellohello.go
1
2
3
4
5
6
7
8
9
10
11package main
import(
"fmt",
"time"
)
func main(){
fmt.Println("hello world!")
time.Sleep(1*time.Second)
}main
入口函数必须不带任何输入参数和返回结果参数
函数
import和init
GO指针
数组与切片
1
2
3
4
5//声明切片之后的长度是3,同时初始化的值是1,2,3
slice1 :=[]int{1,2,3}
//%v表示的是打印出全部的表示信息
fmt.Printf("len = %d, slice =%v\n", len(slice1),slice1)
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50package main
import (
"fmt"
)
func main(){
/*
声明切片之后的长度是3,同时初始化的值是1,2,3
*/
slice1 :=[]int{1,2,3}
//%v表示的是打印出全部的表示信息
fmt.Printf("len = %d, slice =%v\n", len(slice1),slice1)
//直接对没有赋予空间的位置修改会出现位置越界
//slice1[3]=999
slice1 = make([]int,4)
//但是这个时候就只会重新赋予空间并复制0
fmt.Printf("len = %d, slice =%v\n", len(slice1),slice1)
/*
声明slice是切片,但是没有分配空间
*/
var slice2 []int
fmt.Printf("len = %d, slice =%v\n", len(slice2),slice2)
//slice2[0]=2 //直接赋予数值会出现错误,越界
slice2 = make([]int,3)
//开辟空间,但是默认值都是0
fmt.Printf("len = %d, slice =%v\n", len(slice2),slice2)
slice2[0]=1000
fmt.Printf("len = %d, slice =%v\n", len(slice2),slice2)
//此时就修改成功
/*
声明slice类型,同时分配空间
*/
var slice3 =make([]int,5)
fmt.Printf("len = %d, slice =%v\n", len(slice3),slice3)
/*
判断一个slice切片是不是为0
*/
if slice1 == nil{
fmt.Println("slice1 is null")
}else{
fmt.Println("slice1 is not null")
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18/*
切片的截取
*/
var slice6 = make([]int,3)
slice6[0]=1
slice6[2]=33
fmt.Printf("len = %d, cap = %d, slice =%v\n", len(slice6), cap(slice6), slice6)
//截取的过程中是左闭右开
s1:=slice6[0:2]
// s1:=slice6[:]//表示截取全部
fmt.Println(s1)
//注意此时的s1的地址和slice6的位置一样了
//copy
var s2 = make([]int,3)
copy(s2,slice6)
fmt.Println(s2)// 只会从头开始截取s2长度的,如果长了那么就是0,
//否则就是选择slice6中相同长度的元素,从左到右边map的操作
反射
查看当前路径的位置 pwd
查看命令历史
1
history
当前目录下的文件
切换文件夹
cd 切换到当前用户的主目录(/home/用户目录) cd ~ 切换到当前用户的主目录(/home/用户目录) cd . 保持在当前目录不变 cd … 切换到上级目录 cd - 可以在最近两次工作目录之间来回切换 移动文件到指定位置 mv
拷贝某个文件夹到指定路径
命令 对应英文 作用 01 tree [目录名] tree 以树状图列出文件目录结构 02 cp 源文件目标文件 copy 复制文件或者目录 03 mv 源文件 目标文件 move 移动文件或者目录/文件或者目录重命名 创建文件夹
新建某个文件
1
touch 123.txt
删除文件夹
删除某个文件
选项 含义 -f 强制删除,忽略不存在的文件,无需提示 -r 递归地删除目录下的内容,删除文件夹时必须加此参数 解压缩文件的指令
对于ZIP文件的操作
Linux中查看系统使用情况
PID 进程的ID USER 进程所有者 PR 进程的优先级别,越小越优先被执行 NInice 值 VIRT 进程占用的虚拟内存 RES 进程占用的物理内存 SHR 进程使用的共享内存 S 进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数 %CPU 进程占用CPU的使用率 %MEM 进程使用的物理内存和总内存的百分比 TIME+ 该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值 COMMAND 进程启动命令名称 total 总计物理内存的大小 used 已使用多大 free 可用有多少 Shared 多个进程共享的内存总额 Buffers/cached 磁盘缓存的大小 查看GPU:nvidia-smi
1
watch -n 1 nvidia-smi
显示Linux系统的其他信息
时间和日期
序号 命令 作用 01 date 查看系统时间 02 cal calendar 查看日历, -y 选项可以查看一年的日历 磁盘信息
序号 命令 作用 01 df -h disk free 显示磁盘剩余空间 02 du -h [目录名] disk usage 显示目录下的文件大小 进程信息
序号 命令 作用 01 ps aux process status 查看进程的详细状况 02 top 动态显示运行中的进程并且排序 03 kill [-9] 进程代号 终止指定代号的进程, -9 表示强行终止 1
2
3
4# 检测到目标主机是否连接正常
$ ping IP地址 www.baidu.com
# 检测本地网卡工作正常
$ ping 127.0.0.1指定代码在哪个GPU上跑
]]>1
CUDA_VISIBLE_DEVICES=1 python your_model.py
**torch.cuda.set_device()**函数
指定gpu使用编号:1
2import torch
torch.cuda.set_device(2) # 使用2号GPU查看当前路径的位置 pwd
查看命令历史
1
history
当前目录下的文件
切换文件夹
cd 切换到当前用户的主目录(/home/用户目录) cd ~ 切换到当前用户的主目录(/home/用户目录) cd . 保持在当前目录不变 cd … 切换到上级目录 cd - 可以在最近两次工作目录之间来回切换 移动文件到指定位置 mv
拷贝某个文件夹到指定路径
命令 对应英文 作用 01 tree [目录名] tree 以树状图列出文件目录结构 02 cp 源文件目标文件 copy 复制文件或者目录 03 mv 源文件 目标文件 move 移动文件或者目录/文件或者目录重命名 创建文件夹
新建某个文件
1
touch 123.txt
删除文件夹
删除某个文件
选项 含义 -f 强制删除,忽略不存在的文件,无需提示 -r 递归地删除目录下的内容,删除文件夹时必须加此参数 解压缩文件的指令
对于ZIP文件的操作
Linux中查看系统使用情况
PID 进程的ID USER 进程所有者 PR 进程的优先级别,越小越优先被执行 NInice 值 VIRT 进程占用的虚拟内存 RES 进程占用的物理内存 SHR 进程使用的共享内存 S 进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数 %CPU 进程占用CPU的使用率 %MEM 进程使用的物理内存和总内存的百分比 TIME+ 该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值 COMMAND 进程启动命令名称 total 总计物理内存的大小 used 已使用多大 free 可用有多少 Shared 多个进程共享的内存总额 Buffers/cached 磁盘缓存的大小 查看系统的GPU
1
watch -n 1 nvidia-smi
系统环境变量
1
vim ~/.zshrc
1
export GOPATH="user/workspace/golang"
1
source ~/.zshrc
1
vim ~/.bashrc
1
source ~/.bashrc
1
echo $GOPARH
显示Linux系统的其他信息
时间和日期
序号 命令 作用 01 date 查看系统时间 02 cal calendar 查看日历, -y 选项可以查看一年的日历 磁盘信息
序号 命令 作用 01 df -h disk free 显示磁盘剩余空间 02 du -h [目录名] disk usage 显示目录下的文件大小 进程信息
序号 命令 作用 01 ps aux process status 查看进程的详细状况 02 top 动态显示运行中的进程并且排序 03 kill [-9] 进程代号 终止指定代号的进程, -9 表示强行终止 网络测试
1
2
3
4# 检测到目标主机是否连接正常
$ ping IP地址 www.baidu.com
# 检测本地网卡工作正常
$ ping 127.0.0.1GPU运行指定
]]>1
CUDA_VISIBLE_DEVICES=1 python your_model.py
**torch.cuda.set_device()**函数
指定gpu使用编号:1
2import torch
torch.cuda.set_device(2) # 使用2号GPU
实时查看GPU使用情况
|
行代码的意思是只选择指定标号GPU进行使用,执行完该行代码之后python环境无法检测到指定GPU之外的其他
+对于MACOS,用VIM进入
+
|
添加环境变量的语句是,这里以增加路径为例子
+
|
添加完环境变量之后,激活一下设置
+
|
同样对于Linux系统而言也是相同的步骤
+
|
添加完成之后最后激活一下设定
+
|
如果想直接查看当前某个环境变量的设置的值可以用以下的命令进行查看
+
|
输出的值是当前的这个环境变量设置的值,比如会输出:user/workspace/golang
ping 一般用于检测当前计算机到目标计算机之间的网络 是否通畅,数值越大,速度越慢
|
首先先查看对应的GPU内存:nvidia-smi
然后在终端输出代码:
@@ -1424,12 +1437,183 @@ href="https://go.dev/doc/install">https://go.dev/doc/installGOROOT 表示的是安装包所在的位置,一般不需要修改
+GOPATH表示的是运行文件所在的位置,表示的是workspace的文件位置,里面新建三个文件夹:bin +pkg src,src一般用来表示工程文件所在的位置
+修改GOPATH的路径
+
|
将文件查找的路径设置为GOROOT和GOPATH的并集合
+
|
注意这个地方不能将gomod设置为on,否则有问题
+将两个部分并在一起之后,就能从两个地方开始寻找定义的包
+ +首先会从GOROOT进行搜索,接着从GOPATH进行搜索
+对于已经写好的go文件,这里以hello.go作为例子,直接使用以下语句进行编译并运行
|
或者将编译和运行两个过程分开,先编译后运行:
|
首先给出基本框架
+
|
程序的第一行声明了名为main的package。一个package会包含一个或多个.go源代码文件。每一个源文件都是以package开头。比如我们的例子里是package +main。这行声明语句表示该文件是属于哪一个package。
+同时需要注意,一个程序的main
入口函数必须不带任何输入参数和返回结果
多个返回值初始化设置了函数的形参之后,初始值是0
+go每次设置一个变量值之后都有初始值,如果是数据就是0,如果是字符串那么就是空,防止出现一些野指针的情况
+分别建不同的文件夹对应的就是package的名字,相应的在.go文件内部声明package的名字
+注意: +在包中设置接口的时候,函数名称必须第一个字母是大写,如果是小写的话将无法识别
+如果函数名第一个是大写就是对外开放的函数,认为是public
+如果函数名第一个是小写的话就认为是私有的函数,认为是private
+ +init函数的调用过程,首先会对包中的init进行初始化再进行调用接口
+ +如果你导入了包比如lib1,但是没有使用这个包里面的接口函数,仍然会报错
+ +但是如果我不想调用lib1的函数接口,但是想使用lib1的init()函数怎么办呢,如果这个时候直接导入了包 +但是不调用接口,就会出现上述的错误
+匿名导包方式
+在导入的包前面加上下划线来认为这个包是匿名的,这样就能知进行init操作
+ + +给新导入的包起个别的名字,比如叫mylib作为新的别名
+ +或者直接使用·来进行调用
+ +最好别使用这种,如果两个包的函数名称一样那么可能会导致出现歧义的情况
+和C++以及C中的是一样的
+定义的时候 *int 传递变量的地址&
+ + +通过这种方式进行初始化数组以及进行切片操作,通过range关键字进行遍历数组,并给出index和value进行给出不同的下标和数值
+ +固定数组传递的是一个值拷贝
+动态数组 slice
+但是动态数组或者是说切片是一个引用传递
+同时动态数组传递的过程中的参数形式是一致的,能够适配所有的slice参数类型,但是对于
+ + +这里面的下划线表示的是不需要考虑的index的数值,可以忽略
+这里是关于切片slice的声明和打印
+
|
打印的结果是
+ +声明slice但是不一定声明了空间,因此需要注意的是声明的同时并给出空间大小,同时没办法中途增加空间
+
|
注意if else的格式有要求
+ + + +关于切片的截取操作
+
|
变量结构
+ ]]>