GO实现Set并且可以存储string和int

Golang高效处理Parquet文件:从列式存储原理到生产实践 列式存储是一种面向数据分析的数据库存储技术,其核心原理是将数据按列而非按行组织。与传统的行式存储(如CSV)相比,列式存储能显著提升查询性能,因为它允许查询引擎仅读取查询所需的特定列数据,从而大幅减少I/O开销。这种技术通过高效的编码和压缩算法,如字典编码和Snappy压缩,进一步减小了存储体积。其技术价值在于为大规模数据分析、即席查询和数据仓库场景提供了高性能、高压缩比的解决方案。在数据工程领域,列式存储格式已成为处理海量日志分析、数据交换和归档的事实标准。本文聚焦于如何在Golang生态中应用Parqu 阅读详情

 因为Go没有Java的生态,正好自己又学过Java,想实现一个Set来。

Set的存入无序,输出是有序的,并且存储数据不重复,因此 我们可以使用map来存在:

本文章涉及到的知识点:

1.struct{}  空结构体 可以不占用内存

2.go 有自己的排序函数啦,在sort里面

3.自己实现排序也可以  只要实现了Len()  Less() 以及Swap()方法就可以了

4.intterface{} 空接口可以用来存储任何数据类型   判断具体类型的时候 我们使用go 的特性 断言

代码实现

package main

import (
	"fmt"
	"sort"
)

type Empty struct{}

var empty Empty

type Set struct {
	m map[interface{}]Empty
}

func SetFactory() *Set {
	return &Set{
		m: map[interface{}]Empty{},
	}
}

// 添加元素
func (s *Set) Add(val interface{}) {
	s.m[val] = empty // 使用一个empty 到单利作为所有键的值
}

// 删除元素
func (s *Set) Del(val interface{}) {
	delete(s.m, val)
}

//清空set
func (s *Set) Clear() {
	s.m = make(map[interface{}]Empty, 0)
}

// 查看一个元素是否存在
func (s *Set) Exist(val interface{}) bool {
	_, ok := s.m[val]
	return ok
}

//// 遍历Set
func (s *Set) Traverse() {
	intVals := make([]int, 0)
	strVals := make([]string, 0)
	var t interface{}
	fmt.Println(s)
	for v := range s.m {
		t = v
		switch t.(type) {
		case string: //  t.(string)    go intface 转成 其他数据类型  使用t.(string) 即可  t 要是intface类型
			strVals = append(strVals, t.(string))
		case int:
			intVals = append(intVals, t.(int))
		}
	}
	sort.Ints(intVals)
	sort.Strings(strVals)

	for _,v := range intVals {
		fmt.Println(v)
	}
	for _,v := range strVals {
		fmt.Println(v)
	}


}


func (s *Set) Len() int {
	return len(s.m)
}

使用:

package main

import "fmt"

func main() {
	// 因为我们要更改里面的数据 所有需要用指针去修改数据, 也就是我们
	s := SetFactory()
	//s.Traverse()
	for i := 0; i < 100; i++ {
		s.Add("hello Go Set")
		s.Add("hello Go Set111")
		s.Add("hello Go Set2222")
		s.Add("hello Go Set3333")
		s.Add("hello Go Set4444")
		s.Add(i)
	}

	s.Del("hello Go Set4444")
	s.Del("hello Go Set")
	k := s.Exist(3)
	fmt.Println(k)

	s.Traverse()

}

 

 

Go Web应用安全实战:基于golang.org/x/crypto构建用户系统API 在Web应用开发中,数据安全与用户认证是保障系统可信赖的基石。其核心原理在于通过密码学技术,确保数据的机密性、完整性与身份的真实性。现代Web开发中,这直接关系到用户隐私保护与业务合规,是构建高可用服务的技术价值所在。典型的应用场景包括用户注册登录、会话管理、敏感信息存储与API通信防护。本文聚焦于Go语言生态,深入探讨如何利用官方的golang.org/x/crypto扩展包,通过bcrypt密码哈希、Ed25519 JWT签名、ChaCha20-Poly1305加密等工业级组件,系统性地解决这些安全挑战 阅读详情

相关推荐

基于Claude Code速通Redis Set的设计与实现

明确上述ACL对应权限判定test具备读写权限后,最后在进行cgroup即硬件访问权限校验,和selinux(Security-Enhanced Linux一个限定服务进程最大限度减小系统服务进程可访问的资源)校验,只有着一切权限、安全规则校验都成功,自此,进程用户才能打开文件。ACL是针对文件一些更细粒度的访问权限控制,例如本例我们的info.log就给test用户配置的特殊的读写权限,对此我们可通过。这期间会经过重重函数调用,这里就不做展开,本质上就是携带文件名和需要的权限准备好,最终走到。

禅与计算机程序设计的艺术 1187

golang——struct

go struct

一个憨憨写的胡言乱语 328

go-string-set:一种在GoLang中创建字符串集的方法

概述 通过字符串设置方法。 用法 go get github.com/wojnosystems/go-string-set package main import ( "github.com/wojnosystems/go-string-set/string_set" "strings" ) func main () { myPeople := string_set . New () myPeople . Add ( "Bob" ) myPeople . Add ( "Jane" ) myPeople . Add ( "Gary" ) myPeople . Add ( "Bob" ) if myPeople . Exists ( "Bob" ) { // Bob exists in myPeople, so this code block execute

Go语言基础之结构体

类型别名和自定义类型 自定义类型 Go语言使用type来自定义类型,自定义类型是定义了一个全新的类型 type NewInt int 类型别名 使用type和=来进行类型别名定义 type TypeAlisa = Type 自定义类型和类型别名区别 //NewInt 基于int的自定义类型 type NewInt int //MyInt 为类型别名 typ...

CrazyDemo的博客 484

别再手动改文献了!手把手教你定制Mendeley的GB/T 7714-2005引用格式(附常见问题修复)

本文详细指导如何定制Mendeley的GB/T 7714-2005引用格式,解决科研文献管理中的常见问题。通过深度解析Mendeley样式编辑器,精准控制作者显示规则、出版社信息精简及期刊页码处理,实现参考文献一键合规。附常见问题修复和实战调试方法,大幅提升学术写作效率。

weixin_26833503的博客 374

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令)

本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。

l6m7n8的博客 714

Java中的set分析

1、常用实现类 /----Collection接口:单列集合,用来存储一个一个的对象 ​ /----Set接口:存储无序的、不可重复的数据 ​ /----HashSet:作为Set接口的主要实现类;线程不安全的;可以存储null值 ​ /----LinkedHashSet:作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历;在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个数据和后一个数据;对于频繁的遍历操作,LinkedHashSet效率高于HashSet ​ /

qq_43458650的博客 585

LVDS系列11:Xilinx Ultrascale系可编程输入延迟(一)

按照IDELAYCTRL的参考时钟频率可以准确计算获取到,如200M参考时钟抽头分辨率为78ps,Ultrascale系列相对于7系列架构大改,体现便是U/U+系列的抽头增加到512个,同时每个抽头的分辨率就无法像7系列那样能得到一个准确的值,是一个波动的范围值,抽头分辨率随着工艺温度电压的变化而变化。EN_VTC:电压温度补偿开启的使用信号,COUNT模式下不能使用,必须保持为0,TIME模式下需要使用,在延迟工作时要启用温度电压补偿,在修改抽头值时需要关闭温度电压补偿,修改完后启用;

weixin_38828382的博客 1940

Set集合和数组转换

public void setToArray() { Set<String> set = new HashSet<>(); //错误!!!!! String[] strsFalse = (String[]) set.toArray(); for (String str : strsFalse) { System.out.println(str); } //正确 String[] strsTrue = s...

旷野历程 4235

RDMA性能调优实战:如何用ib_*命令榨干你的Mellanox网卡带宽?

本文深入探讨了如何利用ib_*命令工具集对RDMA网络进行深度性能调优,以充分释放Mellanox网卡的带宽潜力。文章从理解Send/Write/Read三种核心通信原语的差异入手,逐步指导读者通过调整消息大小、队列深度、内联数据等关键参数,并结合系统级的NUMA绑定、中断亲和性等优化策略,实现从基准测试到逼近硬件极限的性能提升。

weixin_29306011的博客 88

002、搭建你的第一个Agent开发环境:Python与核心库安装

在上一篇《Agent智能体开发入门:概念、应用与前景》中,我们描绘了Agent智能体的宏伟蓝图,理解了其作为“数字员工”的巨大潜力。然而,许多开发者在迈出第一步时,常常被复杂的依赖、版本冲突和晦涩的配置所劝退,空有想法却无从下手。这种感觉就像拿到了一张藏宝图,却找不到出发的港口。本文正是你的“启航指南”。我们将彻底解决这个痛点,通过一个清晰、可复现的流程,为你搭建一个专为Agent开发量身定制的Python环境。一个纯净、隔离的Python虚拟环境,避免项目间的“依赖地狱”。一套经过验证的核心工具链。

G_RE_RE的博客 111

Go语言学习笔记—golang操作Redis

Redis时NoSQL数据库,不是传统的关系型数据库。

qq_39280718的博客 2666

AMBA-CHI协议详解(十五)

Write transactions事务描述以及请求属性,cache line状态转换。

Crazzy_M的博客 650

Vorssaint 菜单栏系统监控:一条 brew 命令装好,5 分钟用上核心功能

Vorssaint 菜单栏系统监控是一款免费且开源的 Mac 菜单栏工具集:按应用调音量、CPU 温度曲线、带缩略图的窗口切换、剪贴板历史都收在同一个图标下,不用注册账号,全部在你自己的电脑上运行。适合不想为音量和剪贴板各装一个付费应用的 Mac 用户。 [![Vorssaint 每应用音量混音器面板,每个应用一条独立滑杆](https://raw.gitcode.com/GitHub_Tren

gitblog_00709的博客 384

SAP会计凭证导入ABAP开发模板+注意点—附带源码

开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。使用bapi校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。正式创建会计凭证。隐藏的坑。

小九啥也不会 1232

华为OD机试双机位C卷-MVP争夺战 (C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【MVP争夺战】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - MVP争夺战,

qq_45776114的博客 1170

flybrainlabs node 社区生态实现:GitHub绑定、X认证与每日签到积分系统深度拆解

flybrainlabs node 社区积分系统把真实的社交行为——GitHub 绑定、X(Twitter)身份认证、每日签到——换算成可审计的社区积分(FBW 积分)。本文完整拆解它在 node 仓库中的实现思路:一个独立服务如何复用钱包会话、挑战码如何防伪造、积分账本为什么改不了,以及新手如何快速在本地体验。 > 📌 先说结论:这里的**积分不是代币**。配置中 `tokenExecuti

gitblog_00221的博客 749

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Google Cloud Go SDK实战指南:深入解析golang-samples的架构设计与最佳实践

Google Cloud Go SDK官方示例库golang-samples为开发者提供了丰富的云原生应用开发实践参考。本文将从架构设计、性能优化、安全防护等多个维度,深入分析如何基于这个项目构建高效可靠的云服务应用。 ## 问题:云原生应用开发的复杂性挑战 现代云原生应用开发面临诸多挑战:复杂的认证流程、分布式系统设计、数据安全处理、性能调优等。许多开发者在集成Google Cloud服务时

gitblog_00009的博客 1052

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

CloverDB文档存储实战:从零构建一个Go语言Todo应用

CloverDB是一个轻量级面向文档的NoSQL数据库,专为Go语言开发者设计。它提供了简单直观的API,让您能够快速构建数据驱动的应用程序。本文将带您从零开始,使用CloverDB构建一个完整的Todo应用,展示如何在实际项目中使用这个强大的文档数据库。🚀 [![CloverDB轻量级文档数据库Logo](https://raw.gitcode.com/gh_mirrors/clover2/

gitblog_01417的博客 791

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Bilibili-Evolved 动态反折叠 unfoldFeeds 原理拆解:自动展开 B 站折叠动态完整指南

刷动态页面时,满屏都是「展开」按钮,还得一条条手动点击。Bilibili-Evolved 的动态反折叠组件(unfoldFeeds)替你做了这件事:折叠动态一出现就自动点开,全程不用动手。读完能带走三点:动态被折叠的三种真实原因,以及组件为何无需区分;动态反折叠在哪些页面生效、又为何刻意排除详情页;组件如何走完「组件元数据(defineComponentMetadata)→ 卡片监测 → DOM

gitblog_00577的博客 393

cpper 转 Golang

Go语言是一种现代编程语言,由Google于2009年发布,特别适合云原生、微服务和高并发场景。与C++相比,Go拥有更简单的语法,内置协程调度器、GC和跨平台编译能力。其核心特性包括轻量级协程(Goroutine)、高效的M:N调度器(GPM模型)和通道(Channel)通信机制。Go的runtime系统自动处理系统调用和任务调度,使开发者无需关注底层细节。此外,Go支持结构体、继承、接口多态等面向对象特性,并通过空接口实现万能类型。这些特点使Go成为构建高性能分布式系统的理想选择。

JK01WYX的博客 1322

Ventoy 隐藏分区完全指南:你的启动U盘里为什么藏着一个 32MB 的分区?

给同事装完 Ventoy 的U盘插回电脑,资源管理器里只看见一个盘符,可 `lsblk` 一查却是好几个分区。多出来的那块"隐身"分区就是本文的主角:Ventoy 的隐藏分区。围绕它,我们聊聊安全启动机制的原理和实际用法。 ## 一、先说人话:这块"藏起来"的分区里到底有什么 你可以把 Ventoy 的U盘想象成一栋三层的楼。 - **一楼(引导区)**:磁盘最前面的一小片空间,放着 MBR

gitblog_00099的博客 1088

Go语言学习Day3

写在前面,昨天鸽了一天没有学习,是因为新入项目组分配了需求,有几点感受记录一下: 项目做的是python后台,本以为自己框架已经掌握的足够好,可是到了实战中一个api就把自己难的要死,实战还是检验实力的唯一标准。 纵观项目中代码,大多数是用Python27集成,相对于Python3,代码更加冗杂,格式不甚清晰,需要下手复写方能感受到期中逻辑与方法。 于框架中的逻辑错误,本以为框架设计好的同时是让人们按照框架的方法写程序获得更高的稳定性以及易用性,在纵观项目中则需要依据业务实际情况重写许多框架本身自己的

MarkusJean的博客 228

【Go 1.26.4】Golang Map 深度解析

Golang Map 深度解析

zhonglinzhang 454

Go 夜读 · Golang 面试题深度解析(一):defer、闭包、组合与 interface 底层原理

本文源自 Go 夜读(night)仓库 [面试专题](https://link.gitcode.com/i/a2a2cd094b5b361aee3179d6c7857f35) 下的《Golang 面试题解析(一)》([原文](https://link.gitcode.com/i/a7c7b24940921a366ece4343dadddc8b)),围绕 11 道经典 Golang 面试题展开,覆盖

gitblog_00599的博客 595

Go Web 安全与加密实战指南:CSRF、XSS、SQL 注入防御与密码存储方案(build-web-application-with-golang 第 9 章总结)

安全是 Web 应用开发中不可忽视的基石。本指南围绕开源仓库 build-web-application-with-golang(《Go Web 编程》)第 9 章的核心内容展开,系统梳理 CSRF、XSS、SQL 注入三类经典攻击的原理与防御方案,并深入讲解输入过滤、密码安全存储(单向哈希、加盐、scrypt)以及 Base64 / AES / DES 加解密实战。读者读完本文,将掌握一套可直接

gitblog_00392的博客 871
下一篇: 955.WLB
houLang_Code
博客等级 码龄7年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值