当前位置: 首页 > news >正文

GO学习记录

这里写目录标题

  • 00 环境
  • 01 语言基础
    • 二级目录
      • 三级目录

00 环境

参考的:https://www.liwenzhou.com/posts/Go/install/

编译运行:

go mod init <项目名>   // 在目录下创建项目
go mod init <项目名>   // 编译go run <文件名>.go     //快速运行

01 语言基础

匿名变量用一个下划线_表示,不占用命名空间,不会分配内存

数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。
[n]T表示指针数组,[n]T表示数组指针 。

切片每次扩容后都是扩容前的2倍。

在Go语言中对于引用类型的变量,我们在使用的时候不仅要声明它,还要为它分配内存空间,否则我们的值就没办法存储。而对于值类型的声明不需要分配内存空间,是因为它们在声明的时候已经默认分配好了内存空间。

make也是用于内存分配的,区别于new,它只用于slice、map以及channel的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

使用&对结构体进行取地址操作相当于对该结构体类型进行了一次new实例化操作。

p3 := &person{}
fmt.Printf("%T\n", p3)     //*main.person
fmt.Printf("p3=%#v\n", p3) //p3=&main.person{name:"", city:"", age:0}
p3.name = "七米"
p3.age = 30
p3.city = "成都"
fmt.Printf("p3=%#v\n", p3) //p3=&main.person{name:"七米", city:"成都", age:30}

p3.name = "七米"其实在底层是(*p3).name = “七米”,这是Go语言帮我们实现的语法糖。

结构体占用一块连续的内存。

问题:

type student struct {name stringage  int
}func main() {m := make(map[string]*student)stus := []student{{name: "小王子", age: 18},{name: "娜扎", age: 23},{name: "大王八", age: 9000},}for _, stu := range stus {m[stu.name] = &stu}for k, v := range m {fmt.Println(k, "=>", v.name)		// 娜扎 => 大王八}                                       // 大王八 => 大王八
}                                           // 小王子 => 大王八

chatGPT的解释:
在 Go 语言中,range 循环中的迭代变量 stu 是对切片中每个元素的拷贝,而不是直接引用切片中的元素。因此,虽然 stu 的值在循环迭代中会改变,但它实际上是对切片中相应元素的一个副本。
在循环迭代中,stu 每次都会被重新赋值为切片中的下一个元素,而不是引用切片中元素的地址。因此,&stu 取的地址是固定的,但指向的内存地址会随着 stu 的重新赋值而改变。

当访问结构体成员时会先在结构体中查找该字段,找不到再去嵌套的匿名字段中查找。

GO通过嵌套匿名结构体实现继承

二级目录

三级目录

http://www.lryc.cn/news/310198.html

相关文章:

  • 迭代器模式(Iterator Pattern)
  • KL divergence(KL 散度)详解
  • AzerothCore@FreeBSD安装记录
  • vue .env配置环境变量
  • ThreadLocal介绍
  • 【Linux系统化学习】线程概念
  • Redis集群模式
  • 执行go get xxx报错
  • MATLAB基础语法与实践
  • 智能边缘小站 CloudPond(低延迟、高带宽和更好的数据隐私保护)
  • 回归预测 | Matlab实现RIME-BP霜冰算法优化BP神经网络多变量回归预测
  • LeetCode15:三数之和
  • 【详识JAVA语言】面向对象程序三大特性之三:多态
  • nginx(三)实现反向代理客户端 IP透传
  • 深入Java日志框架及其最佳实践
  • threejs显示本地硬盘上的ply文件,通过webapi
  • 代码随想录day10(2)字符串:反转字符串Ⅱ (leetcode541)
  • 【MySQL】_联合查询基础表
  • InnoDB存储引擎对MVCC的实现
  • 【精选】Java项目介绍和界面搭建——拼图小游戏 中
  • C++ //练习 10.16 使用lambda编写你自己版本的biggies。
  • 【misc | CTF】BUUCTF 二维码
  • OSCP靶场--Resourced
  • Vue路由(黑马程序员)
  • 【Java程序员面试专栏 算法思维】一 高频面试算法题:排序算法
  • sql注入之sqli-labs-less-1 错误注入
  • React withRouter的使用及源码实现
  • c++之旅——第四弹
  • Mysql整理-主从复制
  • 100个百万阅读公众号爆文案例