返回顶部
首页 > 资讯 > 后端开发 > GO >Golang三个常见的编程问题是什么
  • 842
分享到

Golang三个常见的编程问题是什么

2023-06-16 10:06:55 842人浏览 独家记忆
摘要

这篇文章主要讲解了“golang三个常见的编程问题是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang三个常见的编程问题是什么”吧!问题1:我需要维护一组"物品&quo

这篇文章主要讲解了“golang三个常见的编程问题是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang三个常见的编程问题是什么”吧!

问题1:我需要维护一组"物品"。 但是,哦,不,Golang没有" Set"数据结构。

解决方案之一:Golang没有"Set",但有"Map"。 映射的键集是一组唯一的项目

您可以执行以下操作(https://play.golang.com/p/tayo3H5mi56):

package main import "fmt" type Set struct {    m map[string]bool } func NewSet() Set {    m := make(map[string]bool)    return Set{m: m} }  func (s *Set) Contains(val string) bool {    _, ok := s.m[val]    return ok }  func (s *Set) Add(val string) {    s.m[val] = true }  func (s *Set) Remove(val string) {    delete(s.m, val) }  func main() {    s := NewSet()    s.Add("foo")    fmt.Printf("s has foo: %t. s has bar: %t\n", s.Contains("foo"), s.Contains("bar"))    s.Remove("foo")    fmt.Printf("s has foo: %t. s has bar: %t\n", s.Contains("foo"), s.Contains("bar"))  }

将映射用作集合的基础数据结构的优点是,您仍然受益于超快速的映射键查找,基础哈希优化,并且最终编写的代码更少。

问题2:我需要比较两个值,但" =="并不总是有效。

解决方案之一:让我们了解" =="在哪里起作用,在哪里不起作用。

包含地图或切片的结构

type ABC struct {    a int    b string    c []int } Error: invalid operation: a == b (struct containing []int cannot be compared)

带指针的结构。

好吧,实际上指针是可以比较的,但是它们并不总是能为您提供理想的结果。

a, b := 1, 1 fmt.Println(&a == &b) // False

输入reflect.DeepEqual

现在,这将可以按需工作(大多数情况下):

//ABC - A simple type type ABC struct {    a int    b string    c []int } var a = ABC{a: 1, b: "10", c: []int{1, 2}} var b = ABC{a: 1, b: "10", c: []int{1, 2}} reflect.DeepEqual(a, b) Example #2 a, b := 1, 1 fmt.Println(&a == &b) // False fmt.Println(reflect.DeepEqual(&a, &b)) // True

它将为您带来更好的结果-但是,如果您的结构中有浮点数或时间字段,则需要忽略。 您将需要编写自定义的equals方法

//ABC - A simple type type ABC struct {    a int    b string    t time.Time // Ignore time while comparing to structs } var a = ABC{a: 1, b: "10", t: time.Now()} var b = ABC{a: 1, b: "10", t: time.Now()} fmt.Println(a == b, equals(a, b)) func equals(val1, val2 ABC) bool {     return val1.a == val2.a && val1.b == val2.b }

除非您别无选择,否则您将不希望编写自定义的equals函数-但是,与==运算符相比,您应该更喜欢reflect.DeepEqual吗?  本质上,如果==将为true,则保证reflect.DeepEqual为true,反之则不为true。  因此,默认情况下可以使用reflect.DeepEqual。 除非您有性能限制,否则:

func BenchmarkOperator(t *testing.B) {    for i := 0; i < t.N; i++ {       if a == b {       }    } } func BenchmarkReflectDeep(t *testing.B) {    for i := 0; i < t.N; i++ {       if reflect.DeepEqual(a, b) {       }    } } BenchmarkOperator-8         44614131            24.8 ns/op         0 B/op          0 allocs/op BenchmarkReflectDeep-8        823174          1558 ns/op          96 B/op          2 allocs/op

" =="比reflect.DeepEqual快。 更快。

问题#3:我需要使用结构作为映射的键-但我的结构包含要忽略的切片,指针或字段。

解决方案之一:Golang中的映射键评估使用==运算符,而不使用reflect.DeepEqual。

解决此问题的一种方法是使用自定义密钥创建逻辑。

//Obvious solution that will not work type A struct {     i *int } i, j := 1, 1 a, b := A{i: &i}, A{i: &j} m := map[A]bool{} m[a] = true _, ok := m[b] fmt.Println(ok) // False key b doesn't exist in map m //Custom keys- solution func customKey(a A) int {  return *a.i } i, j := 1, 1 a, b := A{i: &i}, A{i: &j}  m := map[int]bool{}  m[customKey(a)] = true  _, ok := m[customKey(b)]  fmt.Println(ok)// This will return true

奖励问题:如何比较两个地图? [问题2和问题3的推论]

Https://play.golang.com/p/0ac2HIyiJ9g

key, val := "key", "val" key1, val1 := "key", "val" abc := map[*string]string{&key: val} abc2 := map[*string]string{&key1: val1} def := map[string]*string{key: &val} def2 := map[string]*string{key1: &val1} fmt.Println(reflect.DeepEqual(abc, abc2)) //false  fmt.Println(reflect.DeepEqual(def, def2)) //true

首先要注意的是,您不能通过==运算符比较地图。 您可以通过reflect.DeepEqual比较两个地图。  按照reflect.DeepEqual规则,将映射键与==运算符进行比较,并将值与reflect.DeepEqual进行递归比较。

感谢各位的阅读,以上就是“Golang三个常见的编程问题是什么”的内容了,经过本文的学习后,相信大家对Golang三个常见的编程问题是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: Golang三个常见的编程问题是什么

本文链接: https://lsjlt.com/news/283165.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang三个常见的编程问题是什么
    这篇文章主要讲解了“Golang三个常见的编程问题是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang三个常见的编程问题是什么”吧!问题1:我需要维护一组"物品&quo...
    99+
    2023-06-16
  • C++ 多线程编程带来的常见问题是什么?
    多线程编程中常见问题包括:数据竞争(共享数据同时被访问和修改)、死锁(线程相互等待)、代码抽象(管理同步细节的复杂性)、调试难度(非确定性导致问题难以查明)。解决这些问题的方法包括使用同...
    99+
    2024-05-13
    c++ 多线程 同步机制
  • 网站常见的四个问题是什么
    这篇文章主要介绍了网站常见的四个问题是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  一、网站定位  1、网站设计定位站在了自己角度而非游览者(潜在客户)角度,如下图导...
    99+
    2023-06-10
  • 总结Golang编程时常见的错误和问题
    Golang(又称 Go)是一种相对较新的编程语言,逐渐受到了越来越多人的欢迎。尽管 Golang 与早期的编程语言有许多不同之处,但其出现的初衷一直都是为了方便程序员进行编写和管理高效的代码。在使用 Golang 进行编程时,有一些常见的...
    99+
    2023-05-14
  • Python列表最常见的问题是什么
    Python列表最常见的问题是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,本文总结了...
    99+
    2023-06-02
  • 虚拟主机常见的问题是什么
    虚拟主机常见的问题包括: 稳定性问题:虚拟主机在资源共享的情况下可能会受到其他用户的影响,导致稳定性下降或者性能不稳定。 安全性问...
    99+
    2024-04-18
    虚拟主机
  • 微信小程序开发常见问题是什么
    这篇文章主要介绍微信小程序开发常见问题是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  Q:navigateTo 没有返回按钮。  A:Android 设计如此,需要点击物理返回键返回。  Q:关于微信小程序地...
    99+
    2023-06-26
  • Android APP测试流程和常见问题是什么
    本篇内容介绍了“Android APP测试流程和常见问题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!自动化测试自动化测试主要包括几个...
    99+
    2023-06-04
  • mysql事务中常见问题是什么
    这篇文章给大家分享的是有关mysql事务中常见问题是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、更新丢失原因:当多个事务选择同一行操作,并且都是基于最初选定的值,由于每个事务都不知道其他事务的存在,就会...
    99+
    2023-06-15
  • Java编程中常见的问题有哪些
    本篇内容介绍了“Java编程中常见的问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!字符串连接误用错误的写法:String ...
    99+
    2023-06-17
  • JAVA编程中的常见问题有哪些
    本篇内容主要讲解“JAVA编程中的常见问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA编程中的常见问题有哪些”吧!问题一:编译器找不到类。解决方法:确保你已经导入了类或者它的包。...
    99+
    2023-06-17
  • golang函数相关的常见问题
    以下是 golang 函数常见问题的答案:函数不属于任何类型,而方法属于特定类型。函数指针是存储函数地址的变量,可像其他指针一样使用。函数可返回多个值,作为元组返回。函数可使用 ... ...
    99+
    2024-04-26
    函数 golang
  • Pythonasyncio异步编程常见问题小结
    目录一、asyncio编程简单示例二、asyncio编程常见问题三、报错原因及解决方案今天继续给大家介绍Python相关知识,本文主要内容是Python asyncio异步编程常见问...
    99+
    2023-01-18
    Python asyncio 异步 Python asyncio
  • C++图形编程常见问题解答
    c++++ 图形编程常见挑战及解决方案:内存管理:使用 raii 原则和智能指针管理内存生命周期。渲染效率:批处理绘制调用、使用索引缓冲区和剔除不可见几何图形。多线程并发:使用同步机制控...
    99+
    2024-05-15
    c++ 图形编程 同步机制
  • 台湾服务器常见的问题是什么
    网络速度慢:由于台湾服务器的带宽资源有限,可能会导致网络速度较慢,影响用户的使用体验。 网络连接不稳定:台湾地区的网络环境受到地理...
    99+
    2024-04-24
    服务器
  • Ajax有什么常见问题
    这篇文章给大家分享的是有关Ajax有什么常见问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 一,js脚本缓存问题 答:这个问题是大家遇到最常见问题...
    99+
    2024-04-02
  • NET常见问题有什么
    本篇文章为大家展示了NET常见问题有什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面总结了一些关于.NET的常见问题与解答。一 什么是.Net它主要包括什么.Net是为简化在第三代因特网的高分...
    99+
    2023-06-17
  • 整理Golang常见问题:你能列举几个吗?
    Golang问题汇总:你知道几个? Golang(Go语言)作为一种新兴的编程语言,受到了广泛的关注和使用。然而,就像其他编程语言一样,Golang也有一些常见的问题和容易造成困扰的地...
    99+
    2024-02-27
    问题 golang 汇总 go语言 内存占用 垃圾回收器
  • Vim的三种常见模式是什么
    这篇文章主要介绍了Vim的三种常见模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vim的三种常见模式是什么文章都会有所收获,下面我们一起来看看吧。安装VIM# yum instal...
    99+
    2023-06-28
  • 常见的unix网络编程问题有哪些
    常见的UNIX网络编程问题包括:1. 连接问题:如何建立和维护连接,如何处理中断的连接等。2. 并发问题:如何处理多个客户端同时连接...
    99+
    2023-09-21
    unix
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作