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

Go语言的数据结构

数据结构

数组

支持多维数组,属于值类型,支持range遍历
例子:随机生成长度为10整数数组

package main
import ("fmt""math/rand"
)
// 赋值 随机获取100以内的整数
func RandomArrays() {var array [10]int //声明var max intfor i := 0; i < 10; i++ {array[i] = rand.Intn(100)if array[i] > max {max = array[i]}}fmt.Printf("数组内容:%v,长度为:%d, 最大值:%d\n", array, len(array), max) //获取数组长度len(array)
}

 Map

	// 创建mapcountryCapitalMap := make(map[string]string)// 增加Map元素(故意写错的,方便测试修改,中国人,非行走的五十万🙏)countryCapitalMap["China"] = "Shanghai"countryCapitalMap["India"] = "New Delhi"countryCapitalMap["USA"] = "Washington D.C."// 查询Map元素capital, present := countryCapitalMap["China"]if present {fmt.Printf("中国的首都是 %s\n", capital)} else {fmt.Println("未找到国家")}// 修改Map元素countryCapitalMap["China"] = "Beijing"// 删除Map元素delete(countryCapitalMap, "India")// 遍历mapfor country, capital := range countryCapitalMap {fmt.Printf("国家: %s, 首都: %s\n", country, capital)}

指针

引用类型

var a  = 100
b:= &a  // 取地址 赋值给指针变量
c:= *b // 指针变量中指向地址的值
var d *int //定义字符指针
d = b
fmt.Println(a,b,c,*d) //100 0xc0000120d0 100 100
*b = 666
fmt.Println(a,b,c,*d) //666 0xc0000120d0 100 666
a = 999
fmt.Println(a,b,c,*d)  //999 0xc0000120d0 100 999

make 与 new, make 只能用于初始化slice,map,chan类型;new 可以用于任何类型,nil 代表空指针

var slice1 = make([]int,5)
var map1 = make(map[int]string)
var chan1 = make(chan int,3)
var x *int = new(int)
var y *int
var z * map[int]string = new(map[int]string)
fmt.Println(x==nil,y==nil,z==nil) //输出false,true,false

函数

函数支持多个返回值,支持闭包函数,函数参数支持函数类型,不定长参数用 ...,不支持函数重载

  • 返回多个值
交换X与Y的值,并返回
func Swap(x int , y int) (int, int){return  y, x
}
  • 函数参数实现回调函数
type FuncType func(x int, y int) int //声明函数类型func Minus(x int, y int) int {return x - y
}
func CalFun(x int, y int, cal FuncType) int {return cal(x, y)
}
func main() {var result = CalFun(100, 200, func(x int, y int) int { //匿名回调函数return x + y})fmt.Println(result)fmt.Println(Minus(200, 100))
}
  • 递归函数实现N的阶乘
func Factorial(n int64) int64 {if n <= 1 {return 1}return n * Factorial(n-1)
}

函数选择题

func add(args ...int) int {sum := 0for _, arg := range args {sum += arg}return sum
}

下面对add函数调用错误的是:

判断哪个选择是错误的:

A:add(1, 2)

B:add(1, 3, 7)

C:add([]int{1, 2})

D:add([]int{1, 3, 7}...)

A与B是普遍的数据传值结构

C与D是切片的传值结构,但是add方法中的入参为:...int

所以需要通过「...」将切片打散

add([]int{1, 3, 7}...)可以打散为:add(1, 3, 7)

C选项是切片的方式,所以传输会异常

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

相关文章:

  • python_在sqlite中创建表并写入表头
  • 1.c#(winform)编程环境安装
  • 图中的最短环
  • 安装依赖 npm install idealTree:lib: sill idealTree buildDeps 卡着不动
  • LLMs之Llama 3.1:Llama 3.1的简介、安装和使用方法、案例应用之详细攻略
  • 如何实现一个大模型在回答问题时同时提供相关内容链接
  • <数据集>玉米地杂草识别数据集<目标检测>
  • vue3中动态添加form表单校验
  • Java面试八股之什么是声明式事务管理,spring怎么实现声明式事务管理?
  • springboot 缓存预热的几种方案
  • 谷粒商城实战笔记-62-商品服务-API-品牌管理-OSS整合测试
  • linux c 递归锁的介绍
  • React好用的组件库有哪些
  • 简单快捷!Yarn的安装与使用指南
  • 【Django】前端技术-网页样式表CSS
  • openssl req 详解
  • mysql各种锁总结
  • SpringSecurity--DelegatingFilterProxy工作流程
  • GitHub每日最火火火项目(7.27)
  • git 学习总结
  • 《如何找到自己想做的事》
  • Vue中el的两种写法
  • ELK安装(Elasticsearch+Logstash+Kibana+Filebeat)
  • VScode使用Github Copilot插件时出现read ECONNREST问题的解决方法
  • 充电桩浪涌保护方案—保障充电设施安全稳定运行的关键
  • Python包管理工具pip
  • 最全国内13家DNS分享 解决网页被恶意跳转或无法打开问题
  • 最新站长工具箱源码,拥有几百个功能,安装教程
  • 【算法/训练】:动态规划(线性DP)
  • 计算巨头 Azure、AWS 和 GCP 的比较