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教程 

     golang中的数组

     golang中new和make的区别

      golang刷leetcode

  

posted @   懂得了才能做一些改变  阅读(165)  评论(0编辑  收藏  举报
编辑推荐:
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示