GO备忘录

1. 菜鸟go教程

地址

2. 数组array和切片slice

array类型

array是固定长度的数组,使用前必须确定数组长度

array特点

  • go中的数组是值类型,也就是说,如果你将一个数组赋值给另外一个数组,那么,实际上就是整个数组拷贝了一份
  • 如果go中的数组作为函数的参数,那么实际传递的参数是一份数组的拷贝,而不是数组的指针
  • array的长度也是Type的一部分,这样就说明了[10]int和[20]int是不一样的

slice类型

  • slice是一个引用类型,是一个动态的指向数组切片的指针
  • slice是一个不定长的,总是指向底层的数组array的数据结构

array和slice的区别

  • 声明数组时,方括号内写明了数组的长度;而声明slice的时候,方括号内为空
  • 作为函数参数时,数据传递的是数组的副本,而slice传递的是指针

array和slice的声明和初始化

// array语法声明格式
var variable_name [SIZE] variable_type

// 长度为10 类型为float32的数组
var balance [10] float32 

// 数组初始化有2种方式
var balance = [5]float32{1000.0,2.0,3.3,4.5,55.3}
var balance = [...]flowat{1000.0,2.0,3.3,4.5,55.3,4.444} 
s := [3]int{1,2,3}

// slice语法声明格式,这种方式不需要声明长度
var identifier []type
var a1 []int

// 也可用make()函数来创建
var slice1 []type = make([]type, len)
slice1 := make([]type, len)
s1 := make([]int,10)

// 还可以指定容量
make([]T, length, capacity)

// 切面初始化
s :=[]int{1,2,3 } // 跟数组的区别就是没有声明长度

// 基于数组来初始化
var arr = [10]{1,2,3,4,5,6,7,8,9,10}

// 初始化切片s,是数组arr的引用
s := arr[:]

// 将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片
s := arr[startIndex:endIndex]

// 默认 endIndex 时将表示一直到arr的最后一个元素
s := arr[startIndex:]

// 默认 startIndex 时将表示从arr的第一个元素开始
s := arr[:endIndex]

// 通过切片s初始化切片s1
s1 := s[startIndex:endIndex]

3. go的fmt占位符

普通占位符

占位符说明举例输出
%v相应值的默认格式Printf("%v", people){zhangsan}
%+v打印结构体时,会添加字段名Printf("%+v", people){Name:zhangsan}
%#v相应值的Go语法表示Printf("#v", people)main.Human{Name:“zhangsan”}
%T相应值的类型的Go语法表示Printf("%T", people)main.Human
%%字面上的百分号,并非值的占位Printf("%%")%

布尔占位符

占位符说明举例输出
%ttrue 或 falsePrintf("%t", true)true

整数占位符

占位符说明举例输出
%b二进制表示Printf("%b", 5)101
%c相应Unicode码点所表示的字符Printf("%c", 0x4E2D)
%d十进制表示Printf("%d", 0x12)18
%o八进制表示Printf("%d", 10)12
%q单引号围绕的字符字面值,由Go语法安全地转义Printf("%q", 0x4E2D)‘中’
%x十六进制表示,字母形式为小写 a-fPrintf("%x", 13)d
%X十六进制表示,字母形式为大写 A-FPrintf("%x", 13)D
%UUnicode格式:U+1234,等同于 “U+%04X”Printf("%U", 0x4E2D)U+4E2D

浮点数和复数的组成部分(实部和虚部)

占位符说明举例输出
%b无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat 的 ‘b’ 转换格式一致。例如 -123456p-78
%e科学计数法,例如 -1234.456e+78Printf("%e", 10.2)1.020000e+01
%E科学计数法,例如 -1234.456E+78Printf("%E", 10.2)1.020000E+01
%f有小数点而无指数,例如 123.456Printf("%f", 10.2)10.200000
%g根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出Printf("%g", 10.20)10.2
%G根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出Printf("%G", 10.20+2i)(10.2+2i)

字符串与字节切片

占位符说明举例输出
%s输出字符串表示(string类型或[]byte)Printf("%s", []byte(“Go语言”))Go语言
%q双引号围绕的字符串,由Go语法安全地转义Printf("%q", “Go语言”)“Go语言”
%x十六进制,小写字母,每字节两个字符Printf("%x", “golang”)676f6c616e67
%X十六进制,大写字母,每字节两个字符Printf("%X", “golang”)676F6C616E67

指针

占位符说明举例输出
%p十六进制表示,前缀 0xPrintf("%p", &people)0x4f57f0

4. GoLand的配置

本地go环境

访问Go国内镜像站下载页面 下载,并在页面最上方的版本中选择你当前的系统版本,会下载最新版本的Go开发包,下载完后一路下一步。

配置goroot

File | Settings | Go | GOROOT,选到本地go环境安装目录

配置go mod(go的包管理工具)

PS:这就是很多文章里写的vgo配置。

File | Settings | Go | Go Modules,环境参数填上:GOPROXY=https://goproxy.cn

可选择的反向代理地址有:

  • https://goproxy.cn
  • https://goproxy.io
  • https://mirrors.aliyun.com/goproxy/

5. 新建go项目

  • 新建一个go.mod文件,用于管理go包,其中go的版本只到2级,即:1.16
  • 新建一个main.go文件,用于启动类,package也要是main
  • 配置goland的go mod配置,参考上一个配置

6. import导入包时:点. 、下划线_ 、别名的用法

例子

import (
	v2 "github.com/YFJie96/wx-mall/controller/api/v2"
	_ "github.com/YFJie96/wx-mall/docs"
	. "fmt"
	"github.com/gin-gonic/gin"
	"github.com/swaggo/gin-swagger"
	"github.com/swaggo/gin-swagger/swaggerFiles"
)

别名v2:

此处的v2相当于是上述导入包的一个别名,我们可以直接使用 v2.WxLogin来调用包中的接口或方法。

下划线_:

在导入路径前加入下划线表示只执行该库的 init 函数而不对其它导出对象进行真正地导入。因为 Go 语言的数据库驱动都会在 init 函数中注册自己,所以我们只需要进行上述操作即可;否则的话,Go 语言的编译器会提示导入了包却没有使用的错误。

点.:

此处的.,含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println(“hello world”) 可以省略的写成Println(“hello world”)

7. Golang应用

TOML配置处理

https://www.cnblogs.com/CraryPrimitiveMan/p/7928647.html

鼠标键盘截图等用robotgo

https://github.com/go-vgo/robotgo/blob/master/README_zh.md

对比图片是否相似用goimagehash

https://github.com/videoProcess/goimagehash

图像相似性比较实践

8. Goland开发细节

  1. func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数,导入包时用的下划线的情况,只导入init函数)
  2. 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
  3. Go 没有三目运算符,所以不支持 ?: 形式的条件判断。
  4. defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源,典型的例子就是对一个互斥解锁,或者关闭一个文件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go Micro是一个面向微服务架构的开源框架,用于构建分布式系统。它是一个轻量级的框架,旨在简化微服务的开发和部署。 首先,Go Micro提供了服务发现和负载均衡的能力,可以让我们方便地将一个服务注册到服务发现组件中,并自动进行负载均衡。这样,我们就可以实现透明地调用不同节点上的同一个服务,提高系统的可伸缩性和稳定性。 其次,Go Micro还提供了消息总线的功能,可以方便地进行异步通信。通过使用消息总线,我们可以将不同的微服务连接起来,实现松耦合的通信方式,提高系统的可维护性和灵活性。 此外,Go Micro还提供了服务代理的功能,可以将不同语言实现的服务统一注册到代理中,实现跨语言通信。这样,我们就可以使用不同语言实现的服务进行无缝的交互,提高开发效率和团队的协作能力。 另外,Go Micro还支持使用插件来扩展其功能。这样,我们可以根据具体的需求选择合适的插件,来满足个性化的需求。例如,我们可以选择使用Gin插件来支持HTTP接口,或者选择使用NATS插件来支持消息总线的功能。 综上所述,Go Micro是一个强大、灵活且易用的微服务框架,可以帮助我们更方便地构建分布式系统。无论是在服务发现、负载均衡、异步通信还是跨语言通信方面,Go Micro都提供了完善的解决方案,并支持使用插件扩展功能。通过使用Go Micro,我们可以更快速地构建出高性能、高可扩展性和高稳定性的微服务系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值