自学内容网 自学内容网

Go语言的数据结构

数据结构

数组

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

package main
import (
"fmt"
"math/rand"
)
// 赋值 随机获取100以内的整数
func RandomArrays() {
var array [10]int //声明
var max int
for 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

// 创建map
countryCapitalMap := 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")

// 遍历map
for 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 := 0
for _, 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选项是切片的方式,所以传输会异常


原文地址:https://blog.csdn.net/qq_31667253/article/details/140613627

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!