Golang编程基础
go语言初识和开发环境:
都说golang语言简单,但是刚写demo,就被GOPATH的环境变量难住,不知道这个是干啥的,我就写个程序,需要这么多设置吗?
作为现代的高级编程语言,都会用到他人的代码包,那么就需要有简洁高效的包管理机制和工具,比如java的maven,JavaScript的npm工具,那么Go是怎么管理程序包呢?这个GOPATH可能会被用到。推荐使用go11版本提供的module包管理,有点像maven,而不是像nodejs
然后看看go语言中,对象和接口的内容。在go语言总,总是和C/C++有着很强的相似性,比如指针,但是对象和接口定义又完全不同。在Go语言中,严格区分是类型的值,还是类型的指针,这一点上没有java简单。这个区别体现在两点:1、赋值时后,两个变量关系。2、在调用方法时,是值调用,还是指针调用,其实相当于方法中,传入了一个值。
go语言编译要把握的几个原则:
1、go编译器不会进行隐式数据类型转换,这区别于c++
2、go语言中,没有c++中的指针运算符(->),值访问方式和指针访问方式是等同的,并推广至类型方法,只取决于方法的接受类型。在值接收者方法和指针接收方法调用场景中,要考虑是否使用副本,比如,使用值调用值接收者方法,使用指针调用值接受者方法,要达到相同的效果,编译器实际上进行了指针的解引用,相应的,在指针接收方法中,对类型值进行取指针操作。
3、golang的interface和c++/java比,是有很大区别的。在Golang的语言规范中,struct的方法集主要分为值方法集和指针方法集
go语言的类型系统:
golang既然属于有类型的语言,区别于JavaScript。比如数字,布尔类型,字符串类型,数组,切片,通道,映射,函数,指针,自定义类型等。
那么怎么将这些类型归类内呢?有没有比较好的划分标准?
在《go语言实践》中,作者将类型划分成了3种,内置,引用,结构类型
在golang中,==操作并不适合所有类型,即使两个变量的类型相同,这是和java不同的。在golang中slice,map是不能相互比较的,包含该类型的
自定义类型也是不能比较的。
数组:var Name [n]<type>
,n>0 如: var a [10]int 表示,定义一个长度为10,元素类型为int性的数组,数组在golang中,是属于值类型的
go语言开发范例:
// saveVolumeData persists parameter data as json file at the provided location func saveVolumeData(dir string, fileName string, data map[string]string) error { dataFilePath := filepath.Join(dir, fileName) klog.V(4).Info(log("saving volume data file [%s]", dataFilePath)) file, err := os.Create(dataFilePath) if err != nil { return errors.New(log("failed to save volume data file %s: %v", dataFilePath, err)) } defer file.Close() if err := json.NewEncoder(file).Encode(data); err != nil { return errors.New(log("failed to save volume data file %s: %v", dataFilePath, err)) } klog.V(4).Info(log("volume data file saved successfully [%s]", dataFilePath)) return nil }
// 看下这段经典的将数据保存到文件的代码,使用了标准库,值得学习
参考博客:golang教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义