惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Troy Hunt's Blog
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
S
Securelist
L
Lohrmann on Cybersecurity
Security Latest
Security Latest
T
Threatpost
H
Heimdal Security Blog
W
WeLiveSecurity
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
IT之家
IT之家
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
TaoSecurity Blog
TaoSecurity Blog
A
About on SuperTechFans
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
量子位
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
AI
AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
Vercel News
Vercel News
C
Cyber Attacks, Cyber Crime and Cyber Security
Latest news
Latest news
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security

博客园 - 悉野

ssh连结vmware中ubuntu的共享文件夹 spring加载冲突问题 spring一个错误修正 抓安卓日记到文件 注册表删除桌面顽固图标 github买的账号无法拉取代码的解决方法 apk常用命令 java服务器异常处理 ES6 学习难度分层 promise原理 材质, 纹理, shader之间的关系 TCP与UDP区别 javascript中=>与function的区别 javascript中函数解析过程 cocos使用fgui 几种服务注册与发现的区别 mybatis测试 向量点乘与叉乘 unity画布3种渲染模式 go学习笔记10(HTTP) go学习笔记9(TCP) go学习笔记8(反射) c++简单的线程池 operator new 是 C++ 动态内存分配的核心函数,负责分配原始内存,不调用构造函数 C++的定位放置new(Placement new) go学习笔记7(泛型,文件读写,测试) go学习笔记6(协程与channel,select使用,线程安全,异常处理) go学习笔记5(函数,结构体,自定义类型和类别名,接口) go学习笔记3(变量定义,输入输出,基本数据类型) go学习笔记2 laya打包的apk版本更新脚本 laya列表滚动问题 laya踩坑记 laya列表时计算具体体子项是列表中第几个 子弹射击 laya给自己画边框 查看laya已经加载的资源 laya spine事件
go学习笔记4(数组与切片,map,if,switch,for循环)
悉野 · 2026-04-05 · via 博客园 - 悉野

4.数组与切片

package main

import (
    "fmt"
    "reflect"
    "slices"
    "sort"
)

type User struct {
    name string
    age  int
}

func main() {
    arr := [3]int{1, 2, 3}
    slice := arr[1:2]
    fmt.Println(arr, len(arr), reflect.TypeOf(arr), "\n", slice, len(slice), reflect.TypeOf(slice))
    fmt.Println(slice)
    cc := append(slice, 1, 1)
    fmt.Println(slice) //slice值,长度不变
    fmt.Println(cc)

    var nullSlice []int
    //fmt.Println(nullSlice[0])
    var arr2 [0]int = [0]int{}
    fmt.Println(len(nullSlice), nullSlice == nil, reflect.TypeOf(nullSlice), reflect.TypeOf(arr2))
    //fmt.Println(arr2 == nil) 数组不能与nil判断, slice可以的
    arrList := [...]int{1, 7, 5, 4, 8} //数组与[3]int
    arrList2 := []int{}                //空切片 编译时创建
    arrList3 := make([]int, 0, 5)      //空切片 运行时动态创建 1.20+两者的效果差不多 ,长度为0, 初始为10, 可能传变量进来, 这样
    fmt.Println(len(arrList), arrList, arrList2, arrList3)
    //sort.Ints(arrList) //不支持数组直接排序, 要转成切片
    sort.Ints(arrList[:])                            // 转成切片再排序 从小到大排序
    sort.Sort(sort.Reverse(sort.IntSlice(arrList3))) //从大到小排序

    fmt.Println(len(arrList), arrList)
    arrList3 = append(arrList3, 4, 8, 6, 8, 7, 9)
    sort.Slice(arrList3, func(i, j int) bool {
        // func里面i,j是索引
        return arrList3[i] < arrList3[j]
    })
    // 源码中推荐使用slices.Sort, 而直接用sort.Ints调用
    slices.Sort(arrList3)
    slices.SortStableFunc(arrList3, func(i int, j int) int {
        // func里面i,j是具体对象
        return i - j
    })
    // 可以排对象
    users := []User{
        {"Jack", 30},
        {"Bobo", 20},
    }
    slices.SortFunc(users, func(a, b User) int {
        return a.age - b.age
    })

    fmt.Println(users)
}

5.map.go

package main

import "fmt"

// map映射字典, 是内部结构 无序的key-value, key为基础类型, value为任意类型, 使用前要初始化
func main() {
    var userMap = map[string]string{
        "A": "B",
        "B": "C",
        "4": "",
    }
    fmt.Println(userMap)
    // 显示出"4"对应的值
    fmt.Printf("%#v\n", userMap["4"])
    // 返回第一个是数值, 第二值是判断是否取到, 可为空
    val := userMap["A"]
    val, OK := userMap["E"]
    // 判断是否拿到
    fmt.Println(val, OK)
    delete(userMap, "B")
    fmt.Println(userMap)

    var aMap = make(map[string]string)
    var bMap = map[int]string{} //复杂类型要初始化, {}
    fmt.Println(aMap, bMap)
}

6.if,switch.go

package main

import "fmt"

func main() {
    a := 5
    if a < 3 {
        fmt.Println("a < 3")
    } else if a < 5 {
        fmt.Println("a < 5")
    } else {
        fmt.Println("a >=5")
    }

    //switch,支持两个判断, 用,分隔, 默认自带了类似break的效果
    switch a {
    case 1, 2:
        fmt.Println("1或2")
    case 3, 4, 5:
        fmt.Println("3,4,5")
        // fallthrough可以继续执行下面的判断
        fallthrough
    case 6:
        fmt.Println("6")
    default:
        fmt.Println("default")
    }
}

7.for循环.go

package main

import (
    "fmt"
    "maps"
    "sort"
    "time"
)

// 没有while, 只有后缀式i++, 没前缀写法
func main() {
    var sum int
    for i := 1; i < 10; i++ {
        sum += i
    }
    fmt.Println(sum)
    for {
        sum++
        if sum > 100 {
            break
        }
    }
    fmt.Println(sum)

    list := []string{
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
    }
    for i := 0; i < len(list); i++ {
        fmt.Println(list[i])
    }
    //遍历
    for i, c := range list {
        fmt.Println(i, c)
    }

    userMap := map[string]string{
        "a": "b",
        "e": "f",
        "b": "c",
    }
    for k, v := range userMap {
        fmt.Println(k, v)
    }
    // 返回key的迭代器
    keysIter := maps.Keys(userMap)
    keys := make([]string, len(userMap))
    for k := range keysIter {
        keys = append(keys, k)
    }
    sort.Strings(keys)
    fmt.Println("keys:", keys)

    for {
        fmt.Println(time.Now())
        time.Sleep(time.Second)
    }
}