文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的确定。能够微信搜索公众号「 后端技术学堂 」第一时间阅读(通常比博客早更新一到两篇)ios
对于通常的语言使用者来讲 ,20% 的语言特性就可以知足 80% 的使用需求,剩下在使用中掌握。程序员
基于这一理论,Go 基础系列的文章不会刻意追求面面俱到,但该有知识点都会覆盖,目的是带你快跑遇上 Golang 这趟新车。golang
Hurry up , Let's go !编程
Go 的语法相似 C 语言,你是从 C/C++ 语言过来的话学习成本很低,其余语言过来甚至没有编程基础也不要紧,这门语言入门很轻松。后端
好消息是你的键盘得救了,在 Go 的世界里不用在每一个语句后面加分号了,C 和C++ 程序员听了喜大普奔,键盘不那么容易磨损了。bash
坏消息带给习惯花括号换行的朋友,在 Go 中第一个花括号 {
不能换行写,必须写在同一行,不然编译不过!微信
潜规则是任何在 Go 中定义的变量必须使用,若是定义了变量不使用,编译不过!函数
怎么样?是否是感受到满满的霸道总裁味道?学习
其实约束多了,程序员自由发挥的空间变少,出错的几率也会大大下降,Google 的大佬们怕你犯错,操碎了心。ui
Go 语言程序都由包构成,相似其余语言中的模块概念,主程序都从 main 包开始运行。
因此一个程序开头是下面的语句:
package main
复制代码
在程序中也能够导入其余包,这样就可使用其余包定义的函数或变量。
导入包语法有多种姿式。
import os // 导入 os 包
import fmt /* 导入 fmt 包*/
复制代码
fmt 包:包内有格式化 IO 函数,相似 C 中的 stdio.h
和 C++ 中的 iostream
,初学者必备,导它!
os 包 :中实现了一些 操做系统函数,不依赖平台的接口
另外,关于注释,如你所见,彻底就是 C 语言里的注释形式,//
或 /**/
都是容许的。
import (
"fmt"
"os"
)
复制代码
能够把须要的包,用括号放在一块儿导入。
能够在导入的时候指定导入包的别名,这样在调用包函数的时候,能够直接使用包别名。
import f "fmt" // 用别名f 代替 fmt
f.Println("go go go") // 用 f 代替了 fmt 调用 Println 函数
复制代码
包中定义的函数或变量,若是是大写字母开头,那么它就是能够导出的,外部使用包的用户能够访问到,相似 C++ 中的 public
标识。相反,小写字母开头的名字外部没法使用,使用会报错。
// 以下,Println 和 Getenv 都是大写的名字
fmt.Println(os.Getenv("GOPATH"))
复制代码
Go 语言内建的数据类型有下面这些,其实基本上看类型名字,就差很少能知道是什么类型了。
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
复制代码
日常用的最多的类型:
int
表明整型,在 32 位系统上一般为 32 位,在 64 位系统上则为 64 位。
string
字符串类型
bool
布尔类型,分 true
和 false
两种值。
下面的语法建立一个新的类型,相似C++中的typedef语法。
type 新类型名字 底层类型
type ProgramType string // 定义新类型 ProgramType
var t1 ProgramType = "Golang"
var t2 ProgramType = "C++"
复制代码
不过Go中建立的新类型即便底层类型是一致的也不能相互操做,这样起到很好的类型隔离做用。
好比下面的代码,虽然ProgramType
和 CompanyType
都是string
类型,可是不能相互操做,下面举例说明:
type ProgramType string // 定义新类型 ProgramType
type CompanyType string // 定义新类型 ProgramType
var t2, t2 ProgramType = "Golang", "C++"
var c1, c2 CompanyType = "Google", "Tencent"
fmt.Println(t1+t2) // 同类型相加合法
fmt.Println(t1+c1) // 不一样类型相加非法
复制代码
不像 C 中有隐式类型转换,在 Go 中 不一样类型的项之间赋值时须要显式转换,不然编译会报错!语法上,相对于 C 语言的强制转换语法换了下括号的位置,Go 语法以下。
T(v) // 把值 v 转换为类型 T
复制代码
举例:
var varint int = 66
var varf float32 = float32(varint) // int 转换 float32
fmt.Printf("%T %v %T %v \n", varint, varint, varf, varf) // %T输出值的类型 %v输出值
复制代码
Go 里面的变量声明其实和 C 语言差很少,惟一的区别是把变量类型放在在变量名字后面,另外多了一个 var
关键字标识。
var imVar int // 声明了一个 int 类型的 imVar 变量
复制代码
固然也能够多个同类型变量一块儿声明
var imVar1, imVar2, imVar3 int // 一口气声明了三个 int 类型的变量
复制代码
或者,多个不一样类型的变量声明分组一块儿声明
var (
i int
b bool
s string
)
复制代码
未初始化的对象会被赋予零值,也就是默认值。
0
false
""
(空字符串)能够声明以后单个初始化
var imVar int
imVar = 6
复制代码
也能够声明和初始化一步到位
var imVar0 int = 7
复制代码
还能够批量声明加初始化一步到位
var imVar4, imVar5 int = 4, 5
复制代码
多个不一样类型的变量声明和初始化能够分组同时进行,像下面这样。
var (
i int = 1
b bool = false
s string = "golang"
)
复制代码
若是初始化式右边的值是已存在肯定类型的值,能够偷懒省略变量类型,聪明的 Go 会自动推导类型。
var imVar4, imVar5 = 4, 5 // 省略了左边的 int 类型,自动推导imVar4, imVar5是int类型
复制代码
在函数内部,可使用简短赋值语句:=
来代替 var
关键字声明并初始化变量。
imVar6, imVar7 := 8, 9 // 声明并初始化了 imVar6, imVar7
复制代码
常量用 const
关键字声明,而且声明以后必须紧接着赋值,常量能够是字符、字符串、布尔值或数值 ,注意:常量不能用 :=
语法声明 。
const imCnt int = 1 // 带类型的常量定义
const imCnt1 = 1 // 省略类型的常量定义,自动推导类型
复制代码
Go 语言内建下面几种常量
true false iota nil // 内建常量
复制代码
函数用关键字 func
来声明,带参数列表,把返回值类型放在最后,下面定义了一个简单的乘法函数,带两个整型参数,返回值也是整型。
func mult(i int, j int) int {
return i * j
}
复制代码
当函数参数类型相同时,能够只写最后一个参数的类型,下面这样简写也是能够的。
func mult(i, j int) int {
return i * j
}
复制代码
函数返回值能够是一个,也能够是多个,下面的函数就返回了 i
的平凡和 j
的平方两个返回值。
func more(i, j int) (int, int) {
return i * i, j * j
}
复制代码
前面例子只指定了返回值类型,能够指定返回值名称,这样更加便于理解,同时,指定的名称可在函数内使用。
func retName(i, j int) (x, y int) {
x = i * i
y = j * j
return x, y // 可用 return 代替,表示返回全部已命名的返回值。
}
复制代码
经过本文的学习,咱们掌握了 Golang 中的几个基础概念和用法:包、基本数据类型、变量、常量、函数。这些语法基础是Golang 的下层建筑,万丈高楼平地起,本节为后续学习打下了基础。
感谢各位的阅读,文章的目的是分享对知识的理解,技术类文章我都会反复求证以求最大程度保证准确性,若文中出现明显纰漏也欢迎指出,咱们一块儿在探讨中学习.
今天的技术分享就到这里,咱们下期再见。
原创不易,不想被白票,若是在我这有收获,动动手指「点赞」和「转发」是对我持续创做的最大支持。
能够微信搜索公众号「 后端技术学堂 」回复「资料」「1024」有我给你准备的各类编程学习资料。文章每周持续更新,咱们下期见!