go语言学习笔记1

这篇具有很好参考价值的文章主要介绍了go语言学习笔记1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

go语言简介

​ GoLang是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言;它可以在不损失应用程序性能的情况下极大的降低代码的复杂性,还可以发挥多核处理器同步多工的优点,并可解决面向对象程序设计的麻烦,并帮助程序设计师处理琐碎但重要的内存管理问题。相比于其他编程语言,简洁、快速、安全、并行、有趣、开源、内存管理、数组安全、编译迅速是其特色。

go语言特性

Go语言作为一门全新的静态类型开发语言具有以下的几种特性:

  1. 内置并发编程支持:

    ​ 使用协程(goroutine) 做为基本的计算单元。 轻松地创建协程。

    ​ 使用通道(channel) 来实现协程间的同步和通信。

  2. 内置了映射(map) 和切片(slice) 类型 。

  3. 支持多态(polymorphism)。

  4. 使用接口(interface) 来实现装盒(value boxing) 和反射(reflection)。

  5. 支持指针。

  6. 支持函数闭包(closure) 。

  7. 支持方法。

  8. 支持延迟函数调用(defer) 。

  9. 支持类型内嵌(type embedding) 。

  10. 支持类型推断(type deduction or type inference) 。

  11. 内存安全。

  12. 自动垃圾回收。

  13. 良好的代码跨平台性。

Go程序生成的二进制可执行文件常常拥有以下优点:

  1. 内存消耗少
  2. 执行速度快
  3. 启动快

最简单的程序

package main
import "fmt"// 我们需要使用fmt包中的Println()函数

func main() {
fmt.Println("Hello, world. 你好,世界! ")
}

go语言常用的命令

Go官方工具链工具要求所有的Go源代码文件必须以.go后缀结尾,假设上面展示的最简单的Go程序存放在一个名叫simplest-go-program.go的文件中。打开一个终端(控制台) 并进入上述源文件所在的目录, 然后运行

go run simplest-go-program.go

如果代码中有语法错误, 这些错误将输出在终端中。

注意:

  1. go run子命令并不推荐在正式的大项目中使用。 go run子命令只是一种方便的方式来运行简单的Go程序。 对于正式的项目, 最好使用go build或者go install子命令构建可执行程序文件来运行Go程序。
  2. 支持Go模块特性的Go项目的根目录下需要一个go.mod文件。 此文件可以使用go mod init子命令来生成。

其他命令

  • go vet子命令可以用来检查可能的代码逻辑错误(即警告)。

  • go fmt子命令来用同一种代码风格格式化Go代码。

  • go test子命令来运行单元和基准测试用例。

  • go doc子命令来(在终端中) 查看Go代码库包的文档。

  • go mod init example.com/myproject命令可以用来在当前目录中生成一个go.mod文件。 当前目录将被视为一个名为example.com/myproject的模块(即当前项目) 的根目录。

  • go mod tidy命令用来通过扫描当前项目中的所有代码来添加未被记录的依赖至go.mod文件或从go.mod文件中删除不再被使用的依赖。

  • go get命令用拉添加、 升级、 降级或者删除单个依赖。 此命令不如go mod tidy命令常用。

指针

go语言与C语言和C++语言一样也支持指针,但是Go中的指针相比C指针有很多限制 。一个指针变量指向了一个值的内存地址。类似于变量和常量,在使用指针前你需要声明指针。指针声明格式如下:

var var_name *var-type

var-type 为指针类型,var_name 为指针变量名,* 号用于指定变量是作为一个指针。以下是有效的指针声明:

var ip *int        /* 指向整型*/
var fp *float32    /* 指向浮点型 */

指针类型和值

一个非定义指针类型的字面形式为T, 其中T为一个任意类型。 类型T称为指针类型T的基类型(base type) 。 如果一个指针类型的基类型为T, 则我们可以称此指针类型为一个T指针类型

*int // 一个基类型为int的非定义指针类型。
**int // 一个多级非定义指针类型, 它的基类型为*int。
type Ptr *int // Ptr是一个定义的指针类型, 它的基类型为int。
type PP *Ptr // PP是一个定义的多级指针类型, 它的基类型为Ptr  

使用指针

获取一个指针值:

  • 可以使用内置函数new来为任何类型的值开辟一块内存并将此内存块的起始地址做为此值的地址返回。 假设T是任一类型, 则函数调用new(T)返回一个类型为*T的指针值。 存储在返回指针值所表示的地址处的值(可被看作是一个匿名变量) 为T的零值。
  • 我们也可以使用前置取地址操作符&来获取一个可寻址的值的地址。 对于一个类型为T的可寻址的值t, 我们可以用&t来取得它的地址。 &t的类型为*T

指针使用流程:

  • 定义指针变量。
  • 为指针变量赋值。
  • 访问指针变量中指向地址的值。

在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。

package main

import "fmt"

func main() {
   var a int= 20   /* 声明实际变量 */
   var ip *int        /* 声明指针变量 */

   ip = &a  /* 指针变量的存储地址 */

   fmt.Printf("a 变量的地址是: %x\n", &a  )

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip )

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip )
}

以上实例执行输出参考结果为(不同的电脑执行出的结果不一样,每次执行的结果也不一样):

a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20

前置解引用操作符来访问存储在一个指针所表示的地址处的值(即此指针所引用着的值) 。 比如, 对于基类型为T的指针类型的一个指针值p, 我们可以用p来表示地址p处的值。 此值的类型为T。 *p称为指针p的解引用。 解引用是取地址的逆过程。

package main

import "fmt"

func main() {
	p0 := new(int) // p0指向一个int类型的零值
	fmt.Println(p0) // (打印出一个十六进制形式的地址)
	fmt.Println(*p0) // 0
	
	x := *p0 // x是p0所引用的值的一个复制。
	p1, p2 := &x, &x // p1和p2中都存储着x的地址。
	// x、 *p1和*p2表示着同一个int值。
	fmt.Println(p1 == p2) // true
	fmt.Println(p0 == p1) // false
	p3 := &*p0 // <=> p3 := &(*p0)
	// <=> p3 := p0
	// p3和p0中存储的地址是一样的。
	fmt.Println(p0 == p3) // true
	*p0, *p1 = 123, 789
	fmt.Println(*p2, x, *p3) // 789 789 123
	
	fmt.Printf("%T, %T \n", *p0, x) // int, int
	fmt.Printf("%T, %T \n", p0, p1) // *int, *int
 }

上面的结果可以由这张图进行说明:

go语言学习笔记1,go,golang,学习,笔记

内存地址

一个内存地址表示操作系统管理的整个内存中的一个偏移量(相对于从整个内存的起始, 以字节计数)。

通常地, 一个内存地址用一个操作系统原生字(native word) 来存储。 一个原生字在32位操作系统上占4个字节, 在64位操作系统上占8个字节。 所以, 32位操作系统上的理论最大支持内存容量为4GB(1GB == 230字节) , 64位操作系统上的理论最大支持内存容量为264Byte, 即16EB(EB: 艾字节,1EB == 1024PB, 1PB == 1024TB, 1TB == 1024GB)。内存地址的字面形式常用整数的十六进制字面量来表示, 比如0x1234CDEF。

为了方便,简称内存地址为地址。文章来源地址https://www.toymoban.com/news/detail-529723.html

到了这里,关于go语言学习笔记1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【go语言学习笔记】04 Go 语言工程管理

    1. 单元测试 单元测试是保证代码质量的好方法,但单元测试也不是万能的,使用它可以降低 Bug 率,但也不要完全依赖。除了单元测试外,还可以辅以 Code Review、人工测试等手段更好地保证代码质量。 1.1 定义 顾名思义,单元测试强调的是对单元进行测试。在开发中,一个单

    2024年02月13日
    浏览(31)
  • Go语言学习笔记

    注:安装教程 注:上一篇笔记 注:下一篇笔记 2.6、流程控制 2.6.1、条件语句 2.6.2、选择语句 2.6.3、循环语句 2.6.4、跳转语句 goto语句跳转到本函数内的某个标签 2.7、函数 2.7.1、函数定义 函数构成代码执行的逻辑结构。函数的基本组成为:func、函数名、参数列表、返回值

    2024年02月06日
    浏览(33)
  • Go语言学习笔记(二)

    以下是一些推荐的Go语言学习资源的链接: Go语言教程:https://golang.org/doc/ Go by Example:Go by Example Golang Tutorials:https://golangtutorials.com/ Go语言第一课(慕课网):PHP模糊查询技术案例视频教程-慕课网 Go语言进阶教程(实验楼):极客企业版 Go语言高级编程(GitBook):谁是凶手

    2024年01月20日
    浏览(34)
  • go语言学习笔记1

    ​ GoLang是一种静态强类型、编译型、并发型,并具有 垃圾回收 功能的编程语言;它可以在不损失应用程序性能的情况下极大的降低代码的复杂性,还可以发挥多核处理器同步多工的优点,并可解决面向对象程序设计的麻烦,并帮助程序设计师处理琐碎但重要的内存管理问题

    2024年02月12日
    浏览(34)
  • Go语言学习笔记(三)

    教程:文档 - Go 编程语言 (studygolang.com) 在call-module-code需要注意,需要在hello目录下操作 这是一个在Go项目的模块管理中的命令。在Go的模块管理工具( go mod )中,这个命令用于修改模块依赖关系。 具体来说, go mod edit -replace example.com/greetings=../greetings  这个命令的作用是:

    2024年02月02日
    浏览(33)
  • Go语言学习笔记(狂神说)

    视频地址:https://www.bilibili.com/video/BV1ae41157o9 聊聊Go语言的历史-KuangStudy-文章 下面列举的是原生使用Go语言进行开发的部分项目。 Docker Docker 是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker 可以在一台物理服务器上快速

    2024年02月15日
    浏览(30)
  • 《Go 语言第一课》课程学习笔记(五)

    Go 语言中有一个特殊的函数:main 包中的 main 函数,也就是 main.main,它是所有 Go 可执行程序的用户层执行逻辑的入口函数。 Go 程序在用户层面的执行逻辑,会在这个函数内按照它的调用顺序展开。 main 函数的函数原型非常简单,没有参数也没有返回值。 Go 语言要求:可执行

    2024年02月12日
    浏览(32)
  • 《Go 语言第一课》课程学习笔记(十三)

    Go 语言从设计伊始,就不支持经典的面向对象语法元素,比如类、对象、继承,等等,但 Go 语言仍保留了名为“方法(method)”的语法元素。当然,Go 语言中的方法和面向对象中的方法并不是一样的。Go 引入方法这一元素,并不是要支持面向对象编程范式,而是 Go 践行组合

    2024年02月10日
    浏览(28)
  • 《Go 语言第一课》课程学习笔记(二)

    在 Go 语言中编写一个可以打印出“hello,world”的示例程序,我们只需要简单两步,一是创建文件夹,二是开始编写和运行。 通常来说,Go 不会限制我们存储代码的位置,建议创建一个可以集合所有项目的根文件夹(比如:~/goprojects),然后将所有的项目都放在里面。 对于

    2024年02月12日
    浏览(31)
  • 《Go 语言第一课》课程学习笔记(八)

    Go 语言的类型大体可分为基本数据类型、复合数据类型和接口类型这三种。 其中,我们日常 Go 编码中使用最多的就是基本数据类型,而基本数据类型中使用占比最大的又是数值类型。 Go 语言的整型,主要用来表示现实世界中整型数量等。它可以分为平台无关整型和平台相关

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包