不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • GO基础

    • 01.GO介绍与安装
    • 02.GO基本语法
      • 01.变量定义方法
        • 1.1 var定义变量
        • 1.2 类型推导方式定义变量
        • 1.3 一次定义多个变量
        • 1.4 批量声明变量
      • 02.常量定义
      • 03.fmt包
      • 04. Init函数和main函数
        • 4.1 init函数
        • 4.2 main函数
        • 4.3 init函数和main函数的异同
        • 4.4 init()函数介绍
      • 05.命令
      • 06.golang中关键字
      • 07.编译
    • 03.内置运算符
    • 04.基本数据类型
    • 05.数字类型
    • 06.字符串类型
    • 07.数组
    • 08.切片
    • 09.map
    • 10.指针
    • 11.结构体
    • 12.interface接口
    • 13.循环
    • 14.包管理工具go mod
    • 15.单元测试
    • 16.go规范
  • 面向对象

  • 并发编程

  • 常用库

  • 数据库操作

  • Beego框架

  • Beego商城

  • GIN框架

  • GIN论坛

  • 微服务

  • 设计模式

  • Go
  • GO基础
xiaonaiqiang
2021-05-19
目录

02.GO基本语法

# 01.变量定义方法

# 1.1 var定义变量

  • var 变量名 类型 = 表达式
var name string = "zhangsan" 
var age int =21
var isOk bool bool
1
2
3

# 1.2 类型推导方式定义变量

  • a 在函数内部,可以使用更简略的 := 方式声明并初始化变量。

  • **注意:**短变量只能用于声明局部变量,不能用于全局变量的声明

// 变量名 := 表达式 
n := 10
var age = 18
1
2
3

# 1.3 一次定义多个变量

package main
import "fmt"
func main() {
	var username, sex string
	username = "张三"
	sex = "男"
	fmt.Println(username, sex)
}
1
2
3
4
5
6
7
8

# 1.4 批量声明变量

package main
import "fmt"
func main() {
	var (
		a string
		b int
		c bool
	)
	a = "张三"
	b = 10
	c = true
	fmt.Println(a,b,c)
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 02.常量定义

  • 声明了 pi 和 e 这两个常量之后,在整个程序运行期间它们的值都不能再发生变化了。
const pi = 3.1415
const e = 2.7182

// 多个常量也可以一起声明
const (
  pi = 3.1415
  e = 2.7182
)
1
2
3
4
5
6
7
8
  • const 同时声明多个常量时,如果省略了值则表示和上面一行的值相同。
const (
    n1 = 100
    n2
    n3
)
// 上面示例中,常量 n1、n2、n3 的值都是 100
1
2
3
4
5
6

# 03.fmt包

  • Println:
    • 一次输入多个值的时候 Println 中间有空格
    • Println 会自动换行,Print 不会
  • Print:
    • 一次输入多个值的时候 Print 没有 中间有空格
    • Print 不会自动换行
  • Printf
    • Printf 是格式化输出,在很多场景下比 Println 更方便
package main

import "fmt"

func main() {
	fmt.Print("zhangsan","lisi","wangwu")      // zhangsanlisiwangwu
	fmt.Println("zhangsan","lisi","wangwu")    // zhangsan lisi wangwu

	name := "zhangsan"
	age := 20
	fmt.Printf("%s 今年 %d 岁", name, age)     // zhangsan 今年 20 岁
}
1
2
3
4
5
6
7
8
9
10
11
12

# 04. Init函数和main函数

# 4.1 init函数

  • go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性。

  • 有下面的特征:

    • 1、init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
    • 2、每个包可以拥有多个init函数
    • 3、包的每个源文件也可以拥有多个init函数
    • 4、同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
    • 5、不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
    • 6、init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

# 4.2 main函数

// Go语言程序的默认入口函数(主函数):func main()
// 函数体用{}一对括号包裹

func main(){
   //函数体
}
1
2
3
4
5
6

# 4.3 init函数和main函数的异同

境不要使用。

  • 相同点:

    • 两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
  • 不同点:

    • init可以应用于任意包中,且可以重复定义多个。
    • main函数只能用于main包中,且只能定义一个。
  • 两个函数的执行顺序:

    • 对同一个go文件的init()调用顺序是从上到下的。
  • 对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数。

    • 对于不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init()
  • 如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数。

    • 如果init函数中使用了println()或者print()你会发现在执行过程中这两个不会按照你想象中的顺序执行。
    • 这两个函数官方只推荐在测试环境中使用,对于正式环

# 4.4 init()函数介绍

  • 在Go语言程序执行时导入包语句会自动触发包内部init()函数的调用。

  • 需要注意的是: init()函数没有参数也没有返回值。

  • init()函数在程序运行时自动被调用执行,不能在代码中主动调用它。

  • 包初始化执行的顺序如下图所示:

# 05.命令

  • go env用于打印Go语言的环境信息。

  • go run命令可以编译并运行命令源码文件。

  • go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。

  • go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包。

  • go install用于编译并安装指定的代码包及它们的依赖包。

  • go clean命令会删除掉执行其它命令时产生的一些文件和目录。

  • go doc命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。

  • go test命令用于对Go语言编写的程序进行测试。

  • go list命令的作用是列出指定的代码包的信息。

  • go fix会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。

  • go vet是一个用于检查Go语言源码中静态错误的简单工具。

  • go tool pprof命令来交互式的访问概要文件的内容。

# 06.golang中关键字

  • var和const :变量和常量的声明
  • package and import: 导入
  • func: 用于定义函数和方法
  • return :用于从函数返回
  • defer someCode :在函数退出之前执行
  • go : 用于并行
  • select 用于选择不同类型的通讯
  • interface 用于定义接口
  • struct用于定义抽象数据类型
  • break、case、continue、for、fallthrough、else、if、switch、goto、default 流程控制
  • chan用于channel通讯
  • type用于声明自定义类型
  • map用于声明map类型数据
  • range用于读取slice、map、channel数据

# 07.编译

# mac编译mac
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64  go build  -o atom cmd/artisan/artisan.go

# mac编译linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64  go build  -o atom   main.go

# mac编译windows
CGO_ENABLED=0 GOOS=windows GOARCH=amd64  go build  -o atom  main.go

# mac编译arm64
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o atomarm cmd/artisan/artisan.go
1
2
3
4
5
6
7
8
9
10
11
上次更新: 2024/3/13 15:35:10
01.GO介绍与安装
03.内置运算符

← 01.GO介绍与安装 03.内置运算符→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式