【Golang】for range 数组指针遍历
在Go语言中,使用for range遍历数组或切片时,确实会对每个元素进行值拷贝。但是,当你遍历的是指针数组(如[]*Student)时,虽然指针本身是被拷贝的,但拷贝的指针仍然指向原始的内存地址。因此,通过这个拷贝的指针修改指向的值会影响到原始数据。 这意味着,即使for range对指针进行了拷贝,你仍然可以通过这个拷贝的指针修改原始结构体的内容。下面是一个例子来说明这一点: 1234567891011121314151617181920212223242526package mainimport "fmt"type Student struct { Name string Age int}func main() { students := []*Student{ {Name: "Alice", Age: 20}, {Name: "Bob", Age: 22}, } ...
Go 浮点数次方
在Go语言中,计算一个数的几次方可以通过标准库中的math包来实现。math包提供了一个Pow函数,用于计算x的y次方。 使用math.Pow函数math.Pow函数的签名如下: 1func Pow(x, y float64) float64 这个函数接受两个float64类型的参数:x是底数,y是指数,返回x的y次方的结果。 示例代码下面是一个使用math.Pow函数的示例: 1234567891011121314151617181920package mainimport ( "fmt" "math")func main() { // 计算2的3次方 result := math.Pow(2, 3) fmt.Printf("2的3次方是: %v\n", result) // 计算3的2次方 result = math.Pow(3, 2) fmt.Printf("3的2次方是: %v\n", result) // 计算10的-2次方...
【基础知识】Golang sort.Slice 复杂排序
在 Go 语言中,你可以使用 sort.Slice 对 slice 按照复杂条件进行排序。 sort.Slice 函数接受一个 slice 和一个比较函数,该比较函数定义了两个元素之间的排序关系。 以下是实现复杂条件排序的步骤和示例: 1. 基本语法1234sort.Slice(slice, func(i, j int) bool { // 比较 slice[i] 和 slice[j] return 条件}) 2. 示例:对结构体切片进行多条件排序假设有一个包含多个 Person 的切片,我们希望按以下规则排序: 年龄从小到大排序。 如果年龄相同,则按名字的字母顺序排序。 1234567891011121314151617181920212223242526272829303132package mainimport ( "fmt" "sort")type Person struct { Name string Age int}func main() { people...
【刨根问底】创建slice是否填第二个参数0的区别
在Go语言中,创建切片(slice)时使用make函数有两种常见的方式,它们之间有细微的差别: slice := make([]string, 0) 这种方式明确指定了切片的初始长度为0。这意味着你创建了一个容量和长度都是0的字符串切片。在这种形式中,你可以指定切片的类型(这里是[]string),并且设置其长度为0。由于长度和容量都是0,这个切片一开始是空的,没有任何元素。 slice := make([]string) ...
【刨根问底】为什么Itoa代表整型转化为字符串,为什么不是ItoSting
确实,如果我们按照缩写的逻辑来看,Itos(Integer to String)可能更直观地表达了Itoa函数的功能,即把整数转换为字符串。 然而,Itoa这个名称的由来实际上与历史和传统有关。在计算机科学和编程语言的历史中,Itoa这个术语已经被广泛接受和使用。以下是一些可能的原因: 历史原因:Itoa这个名称可能起源于早期的编程语言和库,当时ASCII码(American Standard Code for Information Interchange)被广泛使用。因此,Itoa(Integer to...
【基础知识】符号整数和非符号整数
uint8 uint16和uint32是无符号整数类型,分别有16位和32位。它们能存储的数字数量由其位数决定。 unit8 : 是8位无符号整数,可以存储的数量是2^8 ; 因为包括一个0, 所以范围是0~255 **uint16**: uint16是一个16位的无符号整数。 它可以存储的数字数量是 2^16。 计算得出:216=65536216=65536。 因此,uint16能存储的数字范围是从0到65535。 **uint32**: uint32是一个32位的无符号整数。 它可以存储的数字数量是 2^32。 计算得出:232=4294967296232=4294967296。 因此,uint32能存储的数字范围是从0到4294967295。 总结: uint16能存储的数字数量是 216216,即65536个数字。 uint32能存储的数字数量是 232232,即4294967296个数字。 int32是一个32位的有符号整数,其数值范围是从 −231−231 到...
【Golang】 byte和rune 有什么区别
byte 和rune 有什么区别? 在Go语言(Golang)中,byte和rune是两种不同的数据类型,它们在处理文本数据时有不同的用途和含义: byte: byte是uint8的别名,即一个无符号的8位整数。在Go语言中,byte通常用于表示字节(byte),即数据的基本单位。byte可以存储任何0到255之间的值,因为一个字节有8位,每位可以是0或1,所以总共有256种可能的值(从0到255)。rune: rune是int32的别名,即一个有符号的32位整数。rune在Go语言中用于表示一个Unicode码点(Unicode scalar...
申请域名绑定github pages
你是否想让自己的github 个人博客拥有自己的个性域名,而不是很长的github.io 域名呢?快来看看吧! 前置需求 在Cheap Domain Names & Web Hosting Starting at $0.99! | NameSilo完成了域名的购买 完成了GitHub Pages的设置,有了可用的http://username.github.io库之后,可以访问 Github Pages 正文0. 进入我的账户 1. 无论是什么域名服务商,找到DNS Management页面如果是namesilo购买的域名,可以通过以下步骤:点击“domain manager”点击这个蓝色的小球(Manage DNS for this domain) 2. 写入 type A 的DNS记录 如果厂商提供了写入模板,这一步就很简单了。拿namesilo举例,在Manage DNS页面往下滑动可以看到namesilo支持的很多 DNS Templates。 找到GitHub的template,点击“Apply...
git stash
当尝试使用 git pull -f 强制拉取远程仓库的更新时,Git 会警告你,因为本地有未提交的更改,这些更改可能会被覆盖。确定要取消对特定文件的保存,可以按照以下步骤操作: 放弃本地更改:使用 git checkout 命令来放弃对特定文件的更改。 1git checkout -- .obsidian/workspace.json 再次尝试拉取:放弃更改后,可以再次尝试拉取远程仓库的更新。 1git pull 如果不想放弃这些更改,而是想将它们暂时保存起来,可以使用 git stash 命令: 保存更改:使用 git stash 将更改保存到一个临时区域。 1git stash 拉取远程更新: 1git pull 恢复更改:在拉取更新后,你可以使用 git stash apply 来恢复之前保存的更改。 1git stash apply git stash 是 Git 中用于临时保存工作目录和暂存区改动的工具,适用于需要切换分支或处理其他任务但不想提交未完成工作的场景。 基本命令 保存当前改动 12git stash #...
leetcode 1.两数之和
有两种思路: 使用暴力遍历, 复杂度的是 O(n ^2) 123456789101112func twoSum(nums []int, target int) []int { for i := 0; i < len(nums); i++ { for j:= i+1; j < len(nums); j++ { if nums[i] + nums[j] == target { return []int{i, j} } } } return []int{}} 使用哈希表,是O(n) 使用哈希表需要注意的是, 这里需要判断idx 和idx2 不相同,因为是要找两个位置,不能取同一个位置1234567891011121314151617func twoSum(nums []int, target int) []int...