Golang学习笔记1——基础

1. 初识GO

1.1 Go语言优势

  • 可直接编译成机器码,不依赖其他库,glibc 的版本有一定要求,部署就是扔一个文件 上去就完成了。
  • 静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出 来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
  • 语言层面支持并发,这个就是 Go 最大的特色,天生的支持并发。Go 就是基因里面支 持的并发,可以充分的利用多核,很容易的使用并发。
  • 内置 runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说 GC(内存 垃圾回收机制)不算完美,但是足以应付我们所能遇到的大多数情况,特别是 Go1.1 之 后的 GC。
  • 简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go 关键字是 25 个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继 承、重载、对象等。
  • 丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大。
  • 内置强大的工具,Go 语言里面内置了很多工具链,最好的应该是 gofmt 工具,自动化 格式化代码,能够让团队 review 变得如此的简单,代码格式一模一样,想不一样都很
    困难。
  • 跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux
    的应用,如何做到的呢?Go 引用了 plan9 的代码,这就是不依赖系统的信息。
  • 内嵌C支持,Go里面也可以直接包含C代码,利用现有的丰富的C库。

1.2 Go适合做什么?

  • 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理 日志、数据打包、虚拟机处理、文件系统等。
  • 分布式系统,数据库代理器等。
  • 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用。
  • 内存数据库,如google开发的groupcache,couchbase的部分组建。
  • 云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的 apcera 云平台。

1.3 Go标准命令概述

Go 语言中包含了大量用于处理 Go 语言代码的命令和工具。其中,go 命令就是最常用的一 个,它有许多子命令。这些子命令都拥有不同的功能,如下所示。

  • build:用于编译给定的代码包或Go语言源码文件及其依赖包。
  • clean:用于清除执行其他go命令后遗留的目录和文件。
  • doc:用于执行godoc命令以打印指定代码包。
  • env:用于打印Go语言环境信息。
  • fix:用于执行gotoolfix命令以修正给定代码包的源码文件中包含的过时语法和代码调用。
  • fmt:用于执行gofmt命令以格式化给定代码包中的源码文件。
  • get:用于下载和安装给定代码包及其依赖包(提前安装git或hg)。 l list:用于显示给定代码包的信息。
  • run:用于编译并运行给定的命令源码文件。
  • install:编译包文件并编译整个程序。
  • test:用于测试给定的代码包。
  • tool:用于运行Go语言的特殊工具。
  • version:用于显示当前安装的Go语言的版本信息。

1.4 HelloWorld

代码:

package main // 必须包含一个main 包

import "fmt" // 导入包含,导入后必须要使用,否则编译器会自动优化掉这一行

func main() { // 花括号必须这种格式
	// main函数不支持参数
	// 不需要用分号换行
	fmt.Println("hello world!")
}

运行:

zhou@zhoudeMacBook-Air helloworld % go run main.go 
hello world!
zhou@zhoudeMacBook-Air helloworld % 

2. 基础类型

2.1 变量

2.1.1 变量声明

//1、单变量声明,类型放在变量名之后,可以为任意类型
var 变量名 类型
var v1,v2,v3 string //多变量同类型声明
//2、多变量声明
var {
    v1 int
    v2 []int
}

2.1.2 变量初始化

//1、使用关键字var,声明变量类型并赋值
var v1 int=10
//2、使用关键字var,直接对变量赋值,go可以自动推导出变量类型
var v2=10
//3、直接使用“:=”对变量赋值,不使用var,两者同时使用会语法冲突,推荐使用
v3:=10

2.1.3 变量赋值

//1、声明后再变量赋值
var v int
v=10
//2、多重赋值,经常使用在函数的多返回值中,err,v=func(arg)
i,j=j,i  //两者互换,并不需要引入中间变量

2.1.4 匿名变量

//Go中所有声明后的变量都需要调用到,当出现函数多返回值,并且部分返回值不需要使用时,可以使用匿名变量丢弃该返回值
func GetName()(firstName,lastName,nickName string){
  return "May","Chan","Make"
}
_,_,nickName:=GetName()  //使用匿名变量丢弃部分返回值

2.2 常量

Go语言中,常量是编译时期就已知且不可变的值,常量可以是数值类型(整型、浮点型、复数类型)、布尔类型、字符串类型。

2.2.1 常量定义

//1、可以限定常量类型,但非必需
const Pi float64 = 3.14
//2、无类型常量和字面常量一样
const zero=0.0
//3、多常量赋值,可以声明类型,也可以自动推导
const(
  size int64=1024
  eof=-1
)
//4、常量的多重赋值,类似变量的多重赋值
const u,v float32=0,3
const a,b,c=3,4,"foo"    //无类型常量的多重赋值
//5、常量赋值是编译期行为,可以赋值为一个编译期运算的常量表达式
const mask=1<<3

2.2.2 预定义常量,枚举类型

//预定义常量:true、false、iota
//iota:可修改常量,在每次const出现时被重置为0,在下一个const出现前,每出现一次iota,其代表的值自动增1。
const(          //iota重置为0
  c0=iota       //c0==0
  c1=iota       //c1==1
  c2=iota       //c2==2
)
//两个const赋值语句一样可以省略后一个
const(          //iota重置为0
  c0=iota       //c0==0
  c1            //c1==1
  c2            //c2==2
)
// 枚举类型
const(
  Sunday=iota    //Sunday==0,以此类推
  Monday
  Tuesday
  Wednesday
  Thursday
  Friday
  Saturday       //大写字母开头表示包外可见
  numberOfDays   //小写字母开头表示包内私有
)

2.3 基础数据类型

在这里插入图片描述

package main
import "fmt"
func main() {
	// 1. bool 类型
	// 默认为false
	var a bool
	fmt.Println("a =", a)
	a = true

	// 自动推导类型
	var a1 = false
	fmt.Println("a1 =", a1)
	a2 := true
	fmt.Println("a2 =", a2)

	// 2. 浮点型
	fmt.Println("------浮点型------")

	var b float32
	b = 3.14
	fmt.Println("b =", b)

	b1 := 3.14
	fmt.Printf("b1 type is %T\n", b1)
	fmt.Println("b1 =", b1)

	// 3. 字符类型
	fmt.Println("------字符类型-------")

	var ch byte // 声明字符类型
	ch = 97
	fmt.Println("ch =", ch)
	// 格式化输出,%c 以字符方式打印, %d 以整型方式打印
	fmt.Printf("ch = %c, ch = %d\n", ch, ch)

	// 用单引号赋值
	ch = 'b'
	fmt.Printf("ch = %c, ch = %d\n", ch, ch)

	// 4. 字符串类型
	fmt.Println("------字符串类型-------")

	var str1 string
	str1 = "abc"
	fmt.Println("str1 =", str1)

	str2 := "def"
	str3 := str1 + str2
	fmt.Println("str3 =", str3)
	fmt.Println("str3.len =", len(str3))

	// 字符串最后有个隐藏的 '\0'
	// 支持下标操作
	fmt.Println("str3[2] =", str3[2])

	// 5. 复数类型
	fmt.Println("------复数类型-------")

	var c complex64
	c = 3 + 4i
	fmt.Println("c =", c)

	// 取实部、虚部
	fmt.Println("real(c) =", real(c), ", imag(c) =", imag(c))

}

2.4 输入输入

输入输出类似于C语言的风格,有类似的格式
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值