【Golang】Golang学习day01:初识Golang

 8420b26844034fab91b6df661ae68671.png

个人简介: 

> 个人主页:赵四司机
> 学习方向:JAVA后端开发 
> 种一棵树最好的时间是十年前,其次是现在!
> ⏰往期文章:SpringBoot项目整合微信支付
> 喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。

前言:

最近发现Golang很火,而且他还是一款编译型语言,速度快,处理高并发能力强。抱着一颗好奇的心,我打算学一下Golang的一些基础知识拓宽一下自己的知识面,领会一下Go语言的神奇之处,假如后面需要用到Go语言也能更容易上手。俗话说好记性不如烂笔头,而且我本来就记性不怎么好,所以我学习喜欢做上笔记记录,这里我就将我的学习成果记录到Golang专栏里,自己以后复习也好翻阅,要是你也有兴趣学习Golang也可以查看我这个专栏的文章。

目录

一:走进Golang

1.Go语言简介

2.Go语言特点

3.Go语言应用领域

二:入门实操

1.Go代码组织

2.Go项目管理工具

3.入门案例

三:Golang变量

1.变量声明

2.变量赋值

3.匿名变量

四:Golang常量

1.常量定义

 2.iota

 五:Golang数据类型

1.布尔类型

2.数字类型

(1)不同进制格式定义数字

(2)浮点型

3.字符串类型


一:走进Golang

1.Go语言简介

        Go(又称Golang)是Google的Robert Griesemer,Pop Pike及Ken Thompson开发的一种静态强类型、编译型语言。Go语言语法与C相近,但是其功能更完备,具有内存安全、GC(垃圾回收)、结构形态及CSP-style并发计算等功能。

2.Go语言特点

  • 背靠大厂,由Google推出,可靠性强
  • 天生支持并发(最显著特点)
  • 语法简单,容易上手
  • 内置runtime,支持垃圾回收
  • 可直接编译成机器码,不依赖其他库
  • 丰富的标准库
  • 跨平台编译

        我们都知道Java得益于它的虚拟机可以实现一次编译到处运行,而Go也是支持跨平台运行的,经过了解原来是Go语言得益于它的模块化设计和模块化,针对不同平台都可以生成对应的二进制可执行机器码,他不需要依赖性,它的代码可以在任何服务器和应用程序上面运行。此外,Go语言拥有自己的链接器,不依赖任何系统提供的编译器和链接器。因此编译出的二进制可执行文件几乎可以运行在任何系统环境中。

3.Go语言应用领域

  • 服务器编程
  • 开发云平台
  • 区块链
  • 分布式系统
  • 网络编程

二:入门实操

1.Go代码组织

Go语言使用包和模块来组织代码,包对应到文件系统里面就是文件夹,模块就是.go文件,一个包中会有多个模块,或者多个子包。

2.Go项目管理工具

早期的Go项目使用gopath来管理项目,不方便使用而且易出错,从Golang 1.11开始使用gomod管理项目,当然还有第三方模块例如govendor,一般都是采用gomod较多。

3.入门案例

①创建项目

在文件夹中新建一个文件夹作为项目根目录 

【Golang】Golang学习day01:初识Golang_第1张图片

②初始化项目

在项目根文件夹下打开终端执行go mod init xxx,xxx一般用你项目名称表示,比如我这里是go mod init gopro1,然后就会自动创建一个.mod文件。

③创建包及相应模块

在项目根目录下创建user包及user.go模块,模块内容见下图:

【Golang】Golang学习day01:初识Golang_第2张图片

④相互调用

在项目根目录下创建main.go模块并编写下面代码进行调用:

【Golang】Golang学习day01:初识Golang_第3张图片

⑤运行测试

在终端执行go run main.go

三:Golang变量

Go语言的变量声明和c或者java都不太一样,在java中我们声明变量是 数据类型 变量名,但是在Go语言中是这样声明的 var 变量名 数据类型。声明方式主要有以下几种:

1.变量声明

逐个声明:

func test() {
	var name string
	var age int
	var m bool
}

 批量声明:

func test() {
	var (
		name string
		age  int
		m    bool
	)
}

2.变量赋值

	//1.
	var name = "zhangsan"
	var age = 20
	var m = true

	//2.
	var name string
	var age int
	var m bool

	name = "zhangsan"
	age = 20
	m = true

	//3.
	name := "zhangsan"
	age := 20
	m := true

	//4.
	name, age, m := "zhangsan", 20, true

3.匿名变量

package main

import "fmt"

func getNameAndAge() (string, int) {
	return "zhaosi", 20
}

func main() {
	name, age := getNameAndAge()
	fmt.Printf("name: %v\n", name)
	fmt.Printf("age: %v\n", age)
}

四:Golang常量

1.常量定义

package main

func main() {
	//常量定义
	const PI float64 = 3.14
	const PI2 = 3.15

	const (
		width  = 100
		height = 200
	)

	const i, j = 1, 2
	const a, b, c = 1, "zhaosi", true
}

 2.iota

iota是一个可被编译器修改的常量,它的默认值是0,没调用一次加1,遇到const关键字时候被重置为0

func main() {
	const (
		a1 = iota
		a2 = iota
		a3 = iota
	)

	fmt.Printf("a1: %v\n", a1)
	fmt.Printf("a2: %v\n", a2)
	fmt.Printf("a3: %v\n", a3)
}

func main() {
	const (
		a1 = iota
		_  //表示跳过
		a3 = iota
	)

	fmt.Printf("a1: %v\n", a1)
	fmt.Printf("a3: %v\n", a3)
}

 

func main() {
	const (
		a1 = iota
		a2 = 100
		a3 = iota
	)

	fmt.Printf("a1: %v\n", a1)
	fmt.Printf("a2: %v\n", a2)
	fmt.Printf("a3: %v\n", a3)
}

 

 五:Golang数据类型

1.布尔类型

package main

import "fmt"

func main() {
	//定义
	var flag bool
	flag = true

	flag1 := false 

	//使用
	age := 18
	isAdult := age >= 18
	fmt.Printf("isAdult: %v\n", isAdult)
	if isAdult {
		fmt.Printf("你已经成年了")
	} else {
		fmt.Printf("你还未成年")
	}
}

需要注意的是,在c语言中我们可以使用0和1来代替false和true,但是在Go语言中是不行的。

2.数字类型

Go语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。

Go也有基于架构的类型,例如:int、uint(无符号整数)、uintptr(整数类型)

这些类型的长度都是根据运行程序所在操作系统类型决定的:

  •  int和uint在32位操作系统上,它们均使用32位(4字节),在64位操作系统上,它们均采用64位(8个字节)
  • uintptr的长度被设定为足够存放一个指针即可

Go语言中没有float类型(只有float32和float64)没有double类型

(1)不同进制格式定义数字

func main() {
	//十进制
	a := 10
	fmt.Printf("十进制:%d\n", a) //%d
	fmt.Printf("二进制:%b\n", a) //%b
}

  

// 八进制 以0开头
	b := 077
	fmt.Printf("%o \n", b)

	//十六进制 以0x开头
	c := 0xff
	fmt.Printf("%x \n", c) //ff
	fmt.Printf("%X \n", c) //FF

   

(2)浮点型

fmt.Printf("%f \n", math.Pi)   
fmt.Printf("%.2f \n", math.Pi)   //保留两位小数

 

3.字符串类型

内置的len函数可以返回一个字符串中的字节数目(不是rune字符数目),索引操作s[i]返回第i个字节的字节值,i必须满足0 ≤ i< len(s)条件约束。 

func main() {
	s := "hello, world"
	fmt.Println(len(s))     // "12"
	fmt.Println(s[0], s[7]) // "104 119" ('h' and 'w')
}

子字符串操作s[i:j]基于原始的s字符串的第i个字节开始到第j个字节(并不包含j本身)生成一个新字符串。生成的新字符串将包含j-i个字节。

fmt.Printf(s[0:5]) //hello

不管i还是j都可能被忽略,当它们被忽略时将采用0作为开始位置,采用len(s)作为结束的位置。

fmt.Println(s[:5]) // "hello"
fmt.Println(s[7:]) // "world"
fmt.Println(s[:])  // "hello, world"

 其中+操作符将两个字符串连接构造一个新字符串:

fmt.Println("goodbye" + s[5:]) // "goodbye, world"

当然还可以使用`......`来表示多行字符串

s := `
    hello
	,
	world
	!
`
fmt.Printf("s: %v\n", s)

 【Golang】Golang学习day01:初识Golang_第4张图片 

你可能感兴趣的:(Golang,golang,开发语言,后端)