• 最新文章
  • linux
  • php
  • sql
  • 服务端
  • tool
  • cocos

Go语言 字典(map)

字典(map) 哈希表,key=>value,存储的key是经过哈希运算的 定义字典 定义一个学生信息字典。 示例如下: package main import "fmt" func main() { // 定义一个学生信息字典 // key是学生id =》 学生姓名 var idNames mapstring // 定义一个map,此时的map不能直接赋值的,它是空的 } 分配空间 使用map之前,一定要对map手动进行分配空间 若不分配空间直接使用,程序会抛出异常。 未分配空间直接赋值 示例如下: // 赋值 idNames = "张三" idNames = "李四" 抛出异常: panic: assignment to entry in nil map goroutine 1 : main.main() E:/gowork/src/字典.go:11 +0x2a 分配空间及赋值 对学生信息字典赋值前,增加分配空间操作。 示例如下: // 分配空间 idNames = make(mapstring, 10) // 赋值 idNames = "张三" idNames = "李四" 运行不在抛出异常。 分配空间但不指定长度 分配空间使用make,可以不指定长度,但是建议直接指定长度,性能会更好。 示例如下: idNames = make(mapstring) 定义时分配空间 也可以在定义时直接分配空间,防止定义后忘记分配空间导致抛出异常。 这种方式在日常使用中比较常见。 示例如下: idName1 := make(mapstring, 10) 遍历 对map进行遍历 示例如下: for key, val := range idNames { fmt.Println(key, "=>", val) } 判断key是否存在 访问不存在的key 如果判断一个key是否存在map中。 在map中不存在访问越界的问题,它认为所有的key都是有效的。 所以如果访问一个不存在的key并不会崩溃或者抛出异常, 只会返回这个类型的零值。 零值:bool => false, 数字 => 0,字符串 => 空 通过ok判断key是否存在 无法通过获取value来判断一个key是否存在, 因此我们需要一个能够校验key是否存在的方式 我们可以通过ok方式来进行判断。 如果key存在,那么value就是key对应的值,ok返回true;反之返回零值,ok返回false。 示例如下: value, ok := idNames if ok { fmt.Println("id=12这个key存在,value为:", value) } else { fmt.Println("id=12这个key不存在") } 删除元素 使用自由函数delete来删除map中指定key 删除存在和不存在的key 示例如下: fmt.Println("idNames删除前:", idNames) delete(idNames, 1) delete(idNames, 15) fmt.Println("idNames删除后:", idNames) 运行结果: idNames删除前: map idNames删除后: map 转自:https://blog.csdn.net/json_ligege/article/details/140488531

Cocos Creator 之 Label的实际宽高改变文本背景大小及常用方法

有些情况下,我们需要根据文本的宽、高动态设置文本背景的大小。 这里汇总了几种一些案例,以及一些文本转换的常用方法,希望对您有用。 下面是3.0以后的,主要用到的是强制刷新label,然后可以获取实际的宽高 label.updateRenderData(true) const desc = "这是一段文本内容这是一段文本内容"; const label = this.labelNode.getComponent(Label); label.string = desc; // 立即更新渲染数据,用于获取文本的实际宽高 label.updateRenderData(true); // 检测文本宽度是否超过限定宽度,倘若超过则设置溢出模式 const labelWidth = this.labelNode.getComponent(UITransform).width; if (labelWidth > 450) { label.overflow = Overflow.RESIZE_HEIGHT; this.labelNode.getComponent(UITransform).width = 450; label.updateRenderData(true); } // 根据文本的宽高设置修改背景宽高 const labelSize = this.labelNode.getComponent(UITransform).contentSize; const bgTransform = this.bgNode.getComponent(UITransform); bgTransform.setContentSize(labelSize.width, labelSize.height); 2.x的版本里强制刷新label的方法是:_forceUpdateRenderData(); label.getComponent(cc.Label).string = msg; label.getComponent(cc.Label)._forceUpdateRenderData(); 转自:https://blog.csdn.net/qq_24726043/article/details/148216548

Creator3打包WebMobile 报错 Access to script at ‘chunks:///_virtual/xxxxx.ts‘ from origin ‘http://localhost:7456’ has been blocked by CORS

发布web版本后老是报这个错误: Access to script at 'chunks:///_virtual/xxxxxxx.ts' from origin 'http://xxxxx:7456' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted. 解决方案是: 勾选“擦除模块结构”就正常了

魔方速成教学大全,高级玩法CFOP合集

资源名称 魔方高级玩法CFOP合集 资源链接 百度网盘:https://pan.baidu.com/s/12woQC4RXN7ZY-iMYcqLJxQ#list/path=%2F 提取码: 45cy 魔方速成教学大全,带娃必备神技 百度云盘:https://pan.baidu.com/s/14biOyNbKxp0iroO54at1wg 提取码:c475

祁连山 太极英语 漫画万词

太极英语8.0全程班开创英语学习新模式,通过独创的”听说读写生态链”教学法帮助学习者构建完整知识体系。课程涵盖入门指导、考级通关、口语突破三大板块,配以全场景互动练习,特别推出”生活情境脱口秀”模块,有效解决传统学习中的”哑巴英语”难题。 课程模块深度解读 零基础筑基模块通过”语法密码破译”与”发音肌肉训练”,运用九宫格记忆法帮助学员快速建立英语思维框架。每日15分钟碎片化学习设计,配合AI发音评测系统,确保入门阶段的精准纠音。 考试突击方案 四六级真题大数据分析 考研英语长难句解码器 雅思口语话题预判训练 创新教学特色 课程独创”口语反应堆”训练系统,将脱口秀即兴技巧与商务场景结合,通过影视台词重构和新闻热点转述等实践环节,培养真实的语言运用能力。每周直播课采用”双师互动模式”,实现个性化学习反馈。 附赠学习装备 独家研发的词根词缀学习工具包包含便携式记忆卡片和双语对照贴纸,其中PDF版《词根词缀猫咪图鉴》通过萌宠插画解析500+核心词素,将枯燥的词汇学习转化为趣味游戏。 需要的回贴,或联系微信:gameFish230

XCloud音乐:多源在线播放器,畅享高品质音乐

XCloud音乐是一款集成多家主流音源的在线音乐播放器,为用户提供一站式音乐播放、搜索、收藏与歌单管理体验。平台覆盖网易云音乐、酷我音乐与JOOX等资源,支持网页端与移动设备访问,无需安装客户端即可畅听百万曲库,提供“省流”“标准”“极高”与“无损”四档码率,根据网络与设备灵活切换,支持各种音质下载。 XCloud音乐核心功能 多音源整合:兼容网易云、酷我与JOOX等主流平台,自动切换备用音源,保证播放稳定。 丰富音质选择:提供“省流”“标准”“极高”与“无损”四档码率,根据网络与设备灵活切换。 歌单与收藏管理:支持歌曲收藏、导入外部歌单及按榜单排名一键收藏,轻松整理音乐列表。 下载与离线:右键或播放后点击下载,即可获取歌曲文件;安卓用户也可通过网页端下载。 用户体验优化 XCloud音乐不断通过更新迭代提升稳定性与兼容性,让使用流程更贴合多终端需求。 动态更新与榜单 新增官方日更榜单,包括网易云“飙升”“新歌”“原创”“热歌”多种榜单,另增说唱、电音、欧美热歌、Billboard、Beatport、韩语与UK榜等多元排行。 歌手名及多人合作项可一键点击,直接查看该艺术家或单人合作作品搜索结果。 兼容性与稳定性 iOS端:解决后台播放跳曲、进度条与显示不同步等问题,优化系统播放器表现。 随机播放与循环逻辑稳定,避免重复当前曲目。 移动端音量控件调整为使用实体键,简化页面视觉干扰。 XCloud音乐官网地址 地址:https://music.xcloudv.top/

寻道大千,合成龙珠模拟器

寻道大千,合成龙珠模拟器,可以试着尝试合成一下,小程序如果有问题,或是有什么建议修改的,可以跟贴。 如果有需要关闭广告的,可以留言微信名称。

Go语言Http调用之Get、Post请求详解

HTTP 调用需要通过 http 包里的 Client 结构体里的 Do 方法去实现,因此需要先声明一个 Client 结构体变量,该结构体可以设置超时时间等配置。 对于一个请求里的 URL,查询参数,请求 method 等参数,需要 http 包里的 Request 结构体去封装。我们可以通过 NewRequestWithContext 或 NewRequest 函数获取一个基础的 Request 结构体指针变量。 NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error) 参数 ctx 为 Context 的接口类型,任意实现 Context 接口的自定义类型都可以作为此参数传递。 参数 method 为 HTTP 方法参数,可选值有 GET、POST、DELETE、PUT等。 参数 url 为接口的请求路径。 参数 body,为请求体参数。 通过 client.Do(req) 方法调用之后,返回值有 (*Response, error),第一个是响应结构体参数,第二个是错误参数。通过读取 Response 的 body 的值,可以获取接口的响应体。 一、GET import ( "context" "fmt" "io" "net/http" ) func main() { client := http.Client{} request, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://localhost:8080/user?name=tom", nil) if err != nil { return } request.Header.Set("headerParam", "header") resp, err := client.Do(request) if err != nil { fmt.Println(err) return } bytes, err := io.ReadAll(resp.Body) if err != nil { return } defer resp.Body.Close() fmt.Println(string(bytes)) // {"code":0,"data":{"list":},"message":"success"} } 需要携带查询参数时,可以直接拼接在 url 字符串上面。 header 参数可以通过 request 结构体的 Header 字段的 set 方法或 add 方法进行设置。 HTTP 请求响应码可以通过 Response 的 StatusCode 字段进行查看。 接口请求成功之后,通过 io.ReadAll 方法,读取 resp.Body 响应体信息。 除了直接在 url 上拼接 query 参数的方式,我们还可以通过以下方式进行添加 query 参数: params := url.Values{} rawUrl, err := url.Parse("http://localhost:8080/user") if err != nil { return } params.Set("name", "tom") rawUrl.RawQuery = params.Encode() u := rawUrl.String() 通过 url.Values 结构体的 set 方法设置 query参数,url 通过 url.Parse 函数生成一个 URL 结构体指针变量,rawUrl.RawQuery = params.Encode() 通过这行代码将 query 参数和 url 进行绑定,最后通过 String() 方法将 url 转换成 string 类型。 二、POST 发起 HTTP POST

Go 的时间格式化为什么是 2006-01-02 15:04:05?

go语言中有个很特别的时间格式format,在我们使用 Format格式化时间的时候, format的参数格式字符串必须是 2006-01-02 15:04:05 才能格式出正确的时间来, 这是个很特别的字符串, 通过分析拆分后可以得出的每个代表时间和日期的数字都不重复。 这里的 2006-01-02 15:04:05 这里的数字可以对年月日时分秒分别拆分为一个独立的数字格式, 可以看出拆分后的数字都是独立的 都分别代表对应位置的日期,如 2006表示4位年份, 06表示2位年份, 01表示2位月份,1表示不带0的月份, 02表示2位日期,2表示不带0的日期, 15表示小时, 04表示分钟,4表示不带0的分钟, 05表示秒, 5表示不带0的秒等 go time日期时间格式实例: package main import ( "fmt" "time" ) func main() { // 获取当前时间 now := time.Now() // time.Now()返回的类型是 time.Time 详情参考 ~/.gvm/go/src/time/time.go fmt.Printf("%d-%d-%d %d:%d:%d\n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second()) // 2024-5-5 10:41:37 // 注意这里的Format() // func (t time.Time) Format(layout string) string // 这里的layout必须是这个时间 2006-01-02 15:04:05 其组合格式可以修改,但是数字不可修改 fmt.Printf("%v\n", now.Format("2006-01-02 15:04:05")) // 为什么是这个时间(2006-01-02 15:04:05),据说这个时间是go语言想法诞生的时间 // 2024-05-05 10:45:39 fmt.Printf("%v\n", now.Format("06")) // 年份: 06表示2位年份 如:24, 2006表示4位年份,如 2024 fmt.Printf("%v\n", now.Format("1")) // 当前月份: 1表示 1-12, 如果是01表示 01-12 fmt.Printf("%v\n", now.Format("05")) // 当前秒: 05表示 01-59 , 如果是5则表示秒 1-59 } 为什么这样设计? 实际上 2006-01-02 15:04:05 是一个参考时间的格式,也就是其它语言中 Y-m-d H:i:s 格式,在功能上用于时间的格式化处理和规范。 那为什么是 2006-01-02 15:04:05 呢?其实这些 ”数字“ 是有意义的,每个布局字符串都是一个时间戳的表示,并非随便写的时间点。 Jan 2 15:04:05 2006 MST 1 2 3 4 5 6 -7 我们也可以将其记忆为 2006 年 1 月 2 日 3 点 4 分 5 秒。 不方便记,go将会在 Go1.20 增加如下三个常量: DateTime = "2006-01-02 15:04:05" DateOnly = "2006-01-02" TimeOnly = "15:04:05"