Why your golang sucks:每个人都会踩的GO的五十个坑 (11-20)

本文介绍了Go语言中容易遇到的10个陷阱,包括字符串不能赋值为nil、数组作为参数传递、使用Slice和Array的range、多维数组的限制、访问不存在的Map Key、字符串的不可变性及其好处、字符串与Byte Slice的转换、字符串的下标操作、非UTF8格式的字符串以及String长度的误解。通过这些解析,帮助开发者更好地理解和避免Go语言中的常见错误。
摘要由CSDN通过智能技术生成

Why your golang sucks:每个人都会踩的GO的五十个坑 (11-20)

本文翻译自 50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs

Go语言是一个简单却蕴含深意的语言。但是,即便号称是最简单的C语言,都能总结出一本《C陷阱与缺陷》,更何况Go语言呢。Go语言中的许多坑其实并不是因为Go自身的问题。一些错误你再别的语言中也会犯,例如作用域,一些错误就是对因为 Go 语言的特性不了解而导致的,例如 range。

11.字符串赋值为 nil

级别:新手入门级

go的string类型变量无法赋值为nil,也无法与nil进行比较操作。string对应的空值是”“

nil类似于C/C++中的NULL,另外,Objective C和JAVA的String是可以赋值为NULL的。

错误代码:

package main

func main() {  
    var x string = nil //error

    if x == nil { //error
        x = "default"
    }
}

错误信息:

# command-line-arguments
./50demo.go:28: cannot use nil as type string in assignment
./50demo.go:30: invalid operation: x == nil (mismatched types string and nil)

修正代码:

package main

func main() {  
    var x string //defaults to "" (zero value)

    if x == "" {
        x = "default"
    }
}

12.数组被当做函数入参进行传递

级别:新手入门级

在C/C++中,入参如果是一个数组的话,那么实际上传递的是这个数组的指针,在函数内对该指针进行修改,是可以修改到原本数组的内容。

在GO语言中,数组Array作为函数入参是传该数组的一个拷贝,在函数内对数组成员进行修改并不会影响原有数组;切片Slice作为入参则会传指针那么数组对你而言就是指针,对切片进行修改会影响原有的切片成员。

PS:

a [3]int,这是一个数组
b []int,这是一个切片  
需要明辨数组和切片的区别
package main

import "fmt"

func main() {  
    x := [3]int{1,2,3}

    func(arr [3]int) {
        arr[0] = 7
        fmt.Println(arr) //prints [7 2 3]
    }(x)

    fmt.Println(x) //prints [1 2 3] (not ok if you need [7 2 3])
}

如果需要修改原数组的数据,则需要使用数组指针。

package main

import "fmt"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值