106【GoLand-基础2】(一)

简介: 106【GoLand-基础2】

Golang基础复习

1.Go-常用命令

直接再终端输入 go help 即可显示所有的go命令以及相应命令功能简介,主要有下面这些。

  1. build: 编译包和依赖,生成.exe go build xxx.go ->./hello.exe 💥
  2. clean:移除对象文件
  3. doc:显示包或者符号的文档
  4. env:打印go的环境信息
  5. bug:启动错误报告
  6. fix : 运行go tool fix
  7. fmt: 运行gofmt进行格式化
  8. generate: 从processing source生成go文件
  9. get: 下载并安装依赖 go get xxxx 💥
  10. install 编译并安装包和依赖 go list
  11. list: 列出包
  12. run: 编译并运行go程序 💥
  13. test: 运行测试 go run xxx.go
  14. tool: 运行go提供的工具
  15. version: 显示go的版本
  16. vet: 运行go tool vet

Go语言的所有包全在这里搜索: https://pkg.go.dev/

(1).添加依赖-(配置代理)
go env -w GO111MODULE=on  
go env -w GOPROXY=https://goproxy.cn  #一定要添加代理,要不然
go get xxxx

实战演练:

PS C:\Environment\GoWorks\src\demo> go get github.com/go-sql-driver/mysql
go: added github.com/go-sql-driver/mysql v1.7.0

添加完毕之后会在 go.mod中新增

2.创建一个项目的步骤

  1. 创建项目
  2. 初始化项目
go mod init 项目名
  1. 创建包

  2. 创建模块
    创建一个包,然后下面放入一些.go文件

  3. 相互调用

test包下hello.go文件

方法名开头大写就是公有方法。小写就是私有方法

package test
// 方法名为小写的话,那么就是私有的
func hello() string {
  return "hello"
}
//  方法名为大写的话,那么就是公用
func Hello() string {
  return "Hello"
}

主项目下创建一个main.go文件。通过包名进行调用方法

package main
import "demo/test"  //导入包
func main() {
  // 注意我们这里用的是 包名. 进行调用的,因为Go语言中没有类的概念,
  println(test.Hello()) //调用共有的,私有的调用不了
}


3.golang标识符、关键字、命名规则

(1).标识符

标识符的英文是: identifer.通俗的讲:就是给变量、常量、函数、方法、结构体、数组、切片、接口起名字。

标识符的组成

  1. 标识符只能由数字、字母和下划线组成。
  2. 只能以字母和下划线开头
  3. 标识符区分大小写
(2).关键字

25个关键字

(3).命名规则
  1. 包名称:

保持package的名字和目录一致,尽量能够见名识意。包名应该小写单词,不要使用下划线或则混合大小写。

package demo
  1. 文件命名:

见名识意应该为小写单词,使用下划线分割每一个单词

user_mapper.go
  1. 结构体命名

采用驼峰式命名,首字母根据公有私有访问控制大写或者小写

type student struct{}  //私有结构体
type Student struct{}  //公有结构体
  1. 接口命名

采用驼峰式命名,首字母根据公有私有访问控制大写或者小写。单个函数的结构名以 “er” 作为后缀。

type Reader interface{
  Read(p []byte)
}
  1. 变量命名

采用驼峰式命名,首字母根据公有私有访问控制大写或者小写。但遇到特有名字的时候,要遵循以下的规则:

如果变量为私有,且特有名词为首个单词,则使用小写,如appService若变量类型为bool类型,则名称应为Hash,is,Can或Allow开头。

var isExist bool
var hasConfict bool
var canMange bool
var allowGitHook bool
  1. 单元测试

单元测试文件命名规范为 example_test.go。测试用例额的函数名必须以Test开头。例如: TestExample。

4.变量

  1. 变量的定义
var identify type
---
var(
  idetify type
  idetify type
)
--- 语法糖,这里只能在函数的内部我们才能使用,函数外部不能使用!!!
identy:=value
---
  1. 变量的初始化
var identify type=value
---
var(
  identify type=value
)
---
// 类型会对其进行自动寻找,可以不用可以设置变量的类型的
var identify1,identify2,identifyN =value1,value2,value3
---
// 函数返回多个值时
identify1,identify2=function3()
---
// 匿名变量
_,identify=function3()

5.常量

  1. 常量的定义且赋值
const identify type=value
常量一旦定义之后,我们就不能对其进行修改的操作了。
---
const(
  identify type=value
)
  1. iota

iota比较特殊,可以被认为是一个可被编译器修改的常量,它默认开始的值是0,每调用一次加1.遇到const关键字的时候被重置为0.

1. 连续会一直增加
const(
  a1=iota  //0
  a2=iota  //1
  a3=iota  //2
)-> 0 1 2
2.使用匿名变量跳过某些值
const(
  a1=iota  //0
  _     
  a2=iota  //2
)-> 0 2
2. 连续的时候被打断
3. const(
  a1=iota  //0
  a2=100  //100 1
  a3=iota  //2
)->0 100 2

6.数据类型

字符串、数字型、布尔型、数组、切片、接口、函数、管道、结构体。

(1).字符串类型

Go语言中的字符串是被双引号括起来的值。被反引号`引起来的字符串用来创建多行的消息,HTML以及正则表达式.

%T 查看类型   %c 查看字符   %v 万能取值 %s 取字符串
1. 字符串-双引号
var identify string="value"
var identify=""
identify:=""
2. 字符串-反引号
var identify string=`
    line1
    line2
`
3.字符串的拼接可以使用+号进行拼接 
4.可以使用printf进行格式化进行拼接
5.使用strings.Join([]string{identify1,identify},",")
6.也可以使用bytes.Buffer进行字符串链接 (效率较高)
  var buffer bytes.Buffer
  buffer.WriteString("hello")
  buffer.WriteString(",")
  buffer.WriteString("jsxs")
  s := buffer.String()
7. 转义字符
\n ->换行  \t ->4个空格 \\ ->网络路径 
8.字符串切片操作
var identify="xxxxx" 
| 获取->m-n的字符(包头不包尾) identify[m:n]
| 获取->m- 到最后一个的字符 identify[m:]
| 获取-> -n 从开始到n的字符 identify[:n] 
9.获取字符串的长度 len(str)
10.字符串进行切割 strings.Split(str,"切割字符")->输出的是一个数组
11.是否包含字符串 strings.Contains(str,"xxx") -》bool
12.strings.ToLower(str) ->全部小写 strings.ToUpper(str) ->全部大写
13.strings.HahsPrefix(str,"xx")->是否以xx开头 string.HashSuffix("xxx")->是否以xx结尾
14. 查看某个字符串所在的索引位置 strings.Index(str,"xx")
(2).指针类型->引用类型

Go语言中的函数传参都是值拷贝,当我们想要修改某一个变量的时候,我么可以创建一个指向该变量的地址的指针变量传递数据使用的指针,而无需拷贝数据

类型指针不能进行偏移和运算。

Go语言中的指针操作非常简单,只需记住两个符号: &(取地址)和 *(根据地址取值)

指针地址和指针类型

每个变量在运行时都有一个地址,这个地址代表变量在内存中的位置。Go语言中使用 & 字符放在变量前面对变量进行取地址操作。Go语言中的值类型(int、float、bool、string、array、struct) 都有对应的指针类型,如" *int 、 *int64、 *string等

var identify *type=&idenify

指针地址和指针类型

一个指针指向了一个值得内存地址。(也就是我们声明了一个指针之后,可以像变量赋值一样,把一个值的内存放入到指针当中)

类似于变量和常量,在使用指针前我们需要声明指针。

1.指针的定义语法  
var var_name *var_type
package main
import "fmt"
func main() {
  var ip *int
  fmt.Printf("%T\n", ip)   //*int
  fmt.Printf("%v\n", ip)   //<nil>
  var num int = 10         //创建一个变量,也就是分配了一个地址
  fmt.Printf("%T\n", &num) //查看取地址的类型
  ip = &num                // ip指向num的地址
  fmt.Printf("%v", *ip)  //获取值
}
  1. 指向数组的指针

需要借助数组进行遍历取数组的地址

1.定义语法
var ptr [n]*int;
2. 指针数组的取地址需要通过遍历的方式进行遍历赋值。
package main
import "fmt"
func main() {
  var ip [4]*int
  fmt.Printf("%T\n", ip)
  fmt.Printf("%v\n", ip)
  num := [4]int{1, 2, 3}
  fmt.Printf("%T\n", &num)
  for i := 0; i < len(num); i++ {
    ip[i] = &num[i] // 数组指针的赋值
    fmt.Printf("%v\t", *ip[i])
  }
}


相关文章
|
2天前
|
Go
GoLand创建项目过程
GoLand创建项目过程
16 0
|
6月前
|
Cloud Native 测试技术 Go
你不知道的goland技巧
你不知道的goland技巧
|
8月前
|
关系型数据库 Go
106【GoLand-基础2】(四)
106【GoLand-基础2】
55 0
|
6月前
|
IDE Go 开发工具
Go开发IDE全览:GoLand vs VSCode全面解析
Go开发IDE全览:GoLand vs VSCode全面解析
221 0
|
2天前
|
Java Python
pycharm-ieda-phpstorm超级好用插件,一键解释代码
pycharm-ieda-phpstorm超级好用插件,一键解释代码
|
2天前
|
Python
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
20 0
|
2天前
|
Go
Go命令行解析神器入门 - 10分钟上手flag包
Go命令行解析神器入门 - 10分钟上手flag包
43 0
|
2天前
|
NoSQL 开发工具 数据库
基于Python开发的五子棋小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的五子棋小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
|
6月前
|
C++
03 C++ - CLion创建程序
03 C++ - CLion创建程序
59 0
|
8月前
|
Go
106【GoLand-基础2】(三)
106【GoLand-基础2】
21 0