后端——go系统学习笔记(不断更新中......)

数组

固定大小

  1. 初始化
go 复制代码
arr1 := [3]int{1, 2, 3}
arr2 := [...]int{1, 2, 3}
var arr3 []int
var arr4 [4]int

切片

长度是动态的

  1. 初始化
go 复制代码
arr[0:3]
slice := []int{1,2,3}
slice := make([]int, 10)
  1. len和cap
  • len是获取切片、数组、字符串的长度------元素的个数
  • cap是获取切片的容量------切片底层数组的长度
go 复制代码
res := [5]int{1, 2, 3}
res1 := res[1:4]
fmt.Println(res1)
fmt.Println("1111", cap(res1))
  1. 用法
  • 扩容:append
  • 拷贝切片(后面再啃)

哈希表(后面再啃)

读取

go 复制代码
//方法一
hash[key] = value
delete(hash,key)
go 复制代码
//方法二
for k,v := range hask{
}

字符串

  1. 不可以直接修改,需要转换成字节数组
go 复制代码
str := "hello"
newStr := []byte(str)
fmt.Println(str)
fmt.Println(newStr)

函数调用

接口

Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。

go 复制代码
type Shape interface {
	area() float64
}
type Rectangle struct {
	width  float64
	height float64
}

func (r Rectangle) area() float64 {
	return r.width * r.height
}

反射

  1. 三大法则
  • 从 interface{} 变量可以反射出反射对象;
  • 从反射对象可以获取 interface{} 变量;
  • 要修改反射对象,其值必须可设置;

第一法则

举例:

go 复制代码
func main() {
	author := "draven"
	fmt.Println("TypeOf author:", reflect.TypeOf(author))
	fmt.Println("ValueOf author:", reflect.ValueOf(author))
}

对于不同的类型,我们也可以调用不同的方法获取相关信息:

  • 结构体:获取字段的数量并通过下标和字段名获取字段 StructField;
  • 哈希表:获取哈希表的 Key 类型;
  • 函数或方法:获取入参和返回值的类型;

第二法则

举例:

go 复制代码
func main() {
	i := 1
	v := reflect.ValueOf(&i)
	v.Elem().SetInt(10)
	fmt.Println(i)
}

$ go run reflect.go
10
  • 调用 reflect.ValueOf 获取变量指针;
  • 调用 reflect.Value.Elem 获取指针指向的变量;
  • 调用 reflect.Value.SetInt 更新变量的值:
    由于 Go 语言的函数调用都是值传递的,所以我们只能只能用迂回的方式改变原变量:
    先获取指针对应的 reflect.Value,再通过 reflect.Value.Elem 方法得到可以被设置的变量,我们可以通过下面的代码理解这个过程:
go 复制代码
func main() {
	i := 1
	v := &i
	*v = 10
}

如果不能直接操作 i 变量修改其持有的值,我们就只能获取 i 变量所在地址并使用 *v 修改所在地址中存储的整数。

相关推荐
QYQ_112716 分钟前
嵌入式学习——字符设备驱动的注册和调用流程
学习
xinhuanjieyi1 小时前
极语言让ai学习的方法
开发语言·学习
云原生指北1 小时前
你的数据正在喂养 AI:从 Atlassian 公告,看科技平台的数据训练默认政策
笔记
念恒123061 小时前
Python(复杂判断)
python·学习
happymaker06261 小时前
MyBatis学习日记——DAY03(手写MyBatis框架实现简单功能)
学习
山楂树の1 小时前
原生 WebGL + Canvas 实现鱼眼图像去畸变(Shader逐像素计算)
图像处理·数码相机·学习·程序人生
**蓝桉**1 小时前
容器服务学习笔记
笔记·学习
乔代码嘚2 小时前
Agentic-KGR:多智能体强化学习驱动的知识图谱本体渐进式扩展技术
人工智能·学习·大模型·知识图谱·ai大模型·大模型学习·大模型教程
zhangrelay3 小时前
三分钟云课实践速通--模拟电子技术-模电--SimulIDE
linux·笔记·学习·ubuntu·lubuntu
木木_王3 小时前
嵌入式Linux学习 | 数据结构 (Day05) 栈与队列详解(原理 + C 语言实现 + 实战实验 + 易错点剖析)
linux·c语言·开发语言·数据结构·笔记·学习