[日常] Go语言圣经--复合数据类型,数组习题
go语言圣经-复合数据类型
1.以不同的方式组合基本类型可以构造出来的复合数据类型
2.四种类型——数组、slice、map和结构体
3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结构体则是由异构的元素组成的
4.slice和map则是动态的数据结构,它们将根据需要动态增长
go语言圣经-数组
1.因为数组的长度是固定的,因此在Go语言中很少直接使用数组
2.数组字面值语法用一组值来初始化数组
3.数组的长度是数组类型的一个组成部分
4.Printf函数的%x副词参数,它用于指定以十六进制的格式打印数组或slice全部的元素,%t副词参数是用于打印布尔型数据,%T副词参数是用于显示一个值对应的数据类型
5.函数传参可以显式地传入一个数组指针,那样的话函数通过指针对数组的任何修改都可以直接反馈到调用者
练习 4.1: 编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数。)
练习 4.2: 编写一个程序,默认情况下打印标准输入的SHA256编码,并支持通过命令行flag定制,输出SHA384或SHA512哈希算法。
1. 查看下文档 godoc crypto/sha256
func Sum256(data []byte) [Size]byte
2. godoc crypto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package main import ( "fmt" "crypto/sha256" "crypto/sha512" "flag" "strings" ) //命令行标志 var hashMethod=flag.String( "s" , "sha256" , "请输入哈希算法" ) func main(){ flag.Parse() num := compareSha256( "x" , "X" ) fmt.Println(num) //接收命令行flag,进行判断 printHash(strings.ToUpper(*hashMethod), "x" ) } /* 练习 4.1: 编写一个函数,计算两个SHA256哈希码中不同bit的数目。(参考2.6.2节的PopCount函数。) */ func compareSha256(str1 string,str2 string)int{ a := sha256.Sum256([]byte(str1)) b := sha256.Sum256([]byte(str2)) num := 0 //循环字节数组 for i:=0;i<len(a);i++{ //1个字节8个bit,移位运算,获取每个bit for m:=1;m<=8;m++{ //比较每个bit是否相同 if (a[i] >> uint(m))!=(b[i] >>uint(m)){ num++ } } } return num } /* 练习 4.2: 编写一个程序,默认情况下打印标准输入的SHA256编码,并支持通过命令行flag定制,输出SHA384或SHA512哈希算法。 */ func printHash(flag string,str string){ if flag== "SHA256" { fmt.Printf( "%x\n" ,sha256.Sum256([]byte(str))) return } if flag== "SHA512" { fmt.Printf( "%x\n" ,sha512.Sum512([]byte(str))) return } if flag== "SHA384" { fmt.Printf( "%x\n" ,sha512.Sum384([]byte(str))) return } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2017-04-11 [Linux] PHP程序员玩转Linux系列-使用supervisor实现守护进程
2016-04-11 [android] 手机卫士手势滑动切换屏幕
2016-04-11 [android] 手机卫士界面切换动画