当前位置: 首页 > 知识库问答 >
问题:

go - Go语言中,一会有有*,一会儿没有,请问我们应该如何判断合适使用*与否?

芮歌者
2024-01-13

Go语言中,一会有有*,一会儿没有,请问我们应该如何判断合适使用*与否?

cidr := make([]*router.CIDR, 0, 16)cidr := make([]router.CIDR, 0, 16)

共有2个答案

弓嘉纳
2024-01-13

根据你的需求来。指针是存储变量在内存中的地址。

  • 如果一个方法需要修改传入的参数值,则可以通过传入指针。比如简单的数据类型它们在go中是值传递的,想修改他们就只能通过指针。

    func changeValue(a *string, b *string) {  *a += *b}func main() {  a := "Hello"  b := " World"  changeValue(&a, &b)  fmt.Println(a)    // Hello World}
  • 对于大对象的类型像数组、结构体等等,传递指针可以提高性能,避免频繁的对象拷贝。
  • 如果需要通过多个函数传递一个对象,这时候要传递指针更方便。
  • 还有一些类型转换,比如字节转字符串

    func BytesToString(b []byte) string {  return *(*string)(unsafe.Pointer(&b))}
  • 如果一个值或者对象在程序的整个生命周期不需要修改,则可以直接使用对象,那么就不需要使用指针
  • 大多数场景下并不太用得到传递指针
徐昊焜
2024-01-13

你需要打好一下基础了,你所谓的* 其实是go中的 指针运算符 , 它可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 ,也就是这个地址所存储的值

 类似资料:
  • 问题内容: 我有看起来像这样的代码: 它返回一个长度为32的字符串,但我认为它不是有效的UUID。如果它是一个真正的UUID,为什么它是一个UUID,什么是代码,修改的值的目的和。 有没有更好的方法来生成UUID? 问题答案: 这些行将字节6和8的值限制在特定范围内。返回range内的随机字节,这些字节不是UUID的所有有效值。据我所知,这应该对片中的所有值进行。 如果您使用的是Linux,则可以

  • 本文向大家介绍请问如何判断一个链表是否有环?相关面试题,主要包含被问及请问如何判断一个链表是否有环?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 方法1:用一个指针数组A,存储已访问过的节点。用一个指针p,每次在链表上移动一步,然后与指针数组A比较,若数组中没有指针与p相同,说明第一次访问p,将p放入数组中;若有指针与p相同,则存在环路,且第一次相同的节点就是环的入口点。 链表长度为n,

  • 问题内容: 我想使用go http包从go lang中的url下载文件,然后将图像保存到磁盘以供以后在我的网页上显示。我该怎么做呢? 我需要这样做是因为我想从instagram下载图像并将其保存到我的公共文件夹中以便在我的网页上显示。 我在下面创建了一个答案,供其他人使用我想出的代码。 问题答案: 经过一番研究,我想到了这一点。 它运行良好,但可能需要进行一些改进才能用于生产。

  • 类型断言(Type Assertion)是一个使用在接口值上的操作,用于检查接口类型变量所持有的值是否实现了期望的接口或者具体的类型。 在Go语言中类型断言的语法格式如下: value, ok := x.(T) 其中,x 表示一个接口的类型,T 表示一个具体的类型(也可为接口类型)。 该断言表达式会返回 x 的值(也就是 value)和一个布尔值(也就是 ok),可根据该布尔值判断 x 是否为 T

  • 问题内容: 我的gopath是,跟随如下: 现在,我使用,然后变为: 这是: 那么,我应该使用什么命令?为什么没用?我的go版本是1.6.2。 问题答案: 借助Go1.6,您可以在阅读时内置供应商。这是什么意思?只有一件事要牢记: 当使用诸如或的工具时,他们首先检查依赖项是否位于中。如果是这样,请使用它。如果不是,请还原到该目录。 Go 1.6中的实际“查找路径”依次为: 话虽如此,将继续安装到您

  • 问题内容: GitLab是一种免费的开放源代码方式,用于托管私有存储库,但它似乎不适用于Go。创建项目时,它将生成以下形式的URL: 哪里: 是gitlab服务器的IP地址 是有权访问私有存储库的用户组 Golang 1.2.1似乎不了解这种语法。 结果是: 有办法让它工作吗? 问题答案: 现在,此问题已在Gitlab 8. *中解决,但仍然不直观。确实,最困难的挑战是,以下步骤将使您克服这些挑战