golang语法速记
2022-08-21 22:28 youxin 阅读(60) 评论(0) 编辑 收藏 举报Golang语言中存在一个关键字type,type又有两种使用方式,一种是类型别名,一种是类型定义。
GoLang1.9后对內建定义类型使用了新的写法:
type NewName = Type
这个NewName只是Type的别名。NewName和Type是一致的类型。
而类型定义,则是会产生新的类型。虽然新类型和旧类型是一样的类型。但会被认为是不同的类型名字。
type NewName Type
type Student struct {
name String
age int
}
type Teacher Student
相当于定义了一个新的Teacher类型,和下面的代码是等价的。虽然两个类型内存布局完全一样,但是从概念上来说,他们是完全不同的两个类型,不能相互兼容。
type Teacher struct {
name String
age int
}
类型别名这个功能非常有用,鉴于go中有些类型写起来非常繁琐,比如json相关的操作中,经常用到map[string]interface {}这种类型,写起来是不是很繁琐,没关系,给它起个简单的别名!这样用起来爽多了。
type strMap2Any = map[string]interface {}
下面的程序,你可能注意到了一个问题:未使用的变量 n 编译会报错。
func main() {
var n int // “n 已声明且未使用”
n = 5 // 这也没用,还是会编译报错
}
../main.go:2:6: n 已声明且未使用
这是 Go 语言的一个特性
存在未使用的变量可能表明存在错误 […] 为了项目的构建速度和便利性以及程序的可读性,Go 语言拒绝使用未使用的变量和包。Go FAQ:我可以停止对未使用的变量 / 导入的投诉吗?](golang.org/doc/faq#unused_variable...)
但是 Go 语言,允许使用未使用的全局变量和函数参数。
解决方案:
如果你不想删除或注释掉一个未使用的变量或者包,则可以添加一个虚拟分配。
func main() {
var n int
n = 5
_ = n // n 现在被使用了
}
————————————————
golang中数组作函数参数,默认值传递,修改的数据不会影响原始数组,如要实现,可以
将数组以指针接受
使用slice
package main import "fmt" func arrayChange(a [3]int) { a[2] =3 fmt.Println(a) } func main() { var a = [...]int{3,4,5} arrayChange(a) fmt.Println(a) } //输出 [3 4 3] [3 4 5] 并不会改变原数组, 可使用指针 func arrayChange(a *[3]int) { a[2] =3 fmt.Println(a) } func main() { var a = [...]int{3,4,5} arrayChange(&a) fmt.Println(a) } 或slice func arrayChange(a []int) { a[2] =3 fmt.Println(a) } func main() { var a = []int{3,4,5} arrayChange(a) fmt.Println(a) }
https://www.bbsmax.com/A/x9J2QOMKz6/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2013-08-21 冒泡排序和直接选择排序详解
2013-08-21 回溯法求解哈密顿回路问题
2012-08-21 css position
2012-08-21 little box:three column
2012-08-21 little box: two box
2012-08-21 eric书:text属性
2012-08-21 eric书:css继承