一:补充:go run/ go install/ go build / go get的区别
- go run 运行当个.go文件
- go install 在编译源代码之后还安装到指定的目录
- go build 加上可编译的go源文件可以得到一个可执行文件
- go get = git clone + go install 从指定源上面下载或者更新指定的代码和依赖,并对他们进行编译和安装
二:单引号、双引号和反引号
而在Go中,双引号是用来表示字符串string,其实质是一个byte类型的数组,单引号表示rune类型。还有一个反引号,用来创建原生的字符串字面量,它可以由多行组成,但不支持任何转义序列
三:变量
www.studygolang.com/articles/11…
1。声明单个变量
var age int //如果没有为变量赋值,自动初始化,赋值该变量类型的零值
2。声明变量并初始化
var age int = 29
3.类型推断,如果变量有初始值,那么go自动推断变量的类型
var age = 29
4.声明多个变量
var width, height int = 100,50
声明不同类型的变量
var (
name = "bob"
age = 20
height int
)
5.简短声明 操作符左边至少有一个变量是尚未声明的
name, age := "bob", 29
go是强类型的,不允许某一类型的变量赋值为其他类型的值复制代码
四:类型
www.studygolang.com/articles/11…
1、go支持的基本类型:
bool
数字类型:
int8,int16, int32, int64, int
uint8, uint16, uint32, uint64, uint
float32, float64
complex64, complex128
byte //uint8的别名
rune //int32的别名
string
2、有符号整型
int8:8位有符号整型,-128-127
int16:16位有符号整型 -32768-32767
int:根据不同的底层平台,表示32或64位整型 在32位系统下是32位,在64位系统下是64位
在Printf方法中,%T格式说明符,可以打印出变量的类型
go的unsafe包提供一个Sizeof函数,该函数接收变量并返回它的字节大小。unsafe包应该小心使用,使用unsafe包可能带来可移植性问题
//Printf方法中,%T打印出变量的类型
var num int = 89
fmt.Printf("type num is %T,size of a is %d", num, unsafe.Sizeof(num))
3。无符号整型
uint8:表示8位无符号整型 0-255
4。浮点类型
float32:32浮点型 float64:64位浮点型
5。复数类型
complex64:实部和虚部都是float32类型的复数
complex128:实部和虚部都是float64类型的复数
c1 := complex(5,7)
c2 := 6+7i
6.string类型
在go中,字符串是字节的集合
7。类型转换
go有着严格的强类型特征,go没有自动类型提升和类型转换
把v转换为T类型的语法是T(v) i := 10 var j float64 = float64(i)复制代码
五:常量
www.studygolang.com/articles/11…
常量不能再重新赋值为其他的值,常量的值会在编译时确定。因为函数调用发生在运行时,所以不能将函数的返回值赋值给常量
1。字符串常量
a:无类型的字符串属于常量 const hello = "hello world"
b:go是强类型语言,所有的变量都必须有明确的类型,那么下面是如何将无类型的常量Sam赋值给变量name的呢?
var name = "Sam"
无类型的常量有一个与他们相关联的默认类型,并且当且仅当一行代码需要时才提供
c:创建一个带类型的常量 const typehello string = "hello world"
d:不允许将一种类型的变量赋值给另一种类型的变量
var defaultName = "Sam" //允许
type myString string
var customName myString = "Sam" //允许
customName = defaultName //不允许
2。布尔类型
3。数字常量
const a = 5
var intVar int = a
var int32var int32 = a
4。数字表达式
数字常量可以在表达式中自由混合和匹配,只有当它们被分配给变量或者在需要类型的代码中的任何地方使用时,才需要类型
var a = 5.9/8 //a是float64复制代码
六:函数
www.studygolang.com/articles/11…
1。函数的声明
func calculateBill(price int,no int) int {
var total = price * no
return total
}
2.示例函数 如果有连续若干个参数,它们的类型一致,无须一一罗列,只需最后一个参数后添加该类型
func calculateBill(price, no int) int {
var total = price * no
return total
}
3、多返回值
func rectProps(length, width float64)(float64, float64){
var area = length * width
var perimeter = (length + width) * 2
return area, perimeter
}
4、空白符
_ 在go中被用作空白符,可以用作表示任何类型的任何值复制代码
七:包
www.studygolang.com/articles/11…
1、导出名字
在go中,任何以大写字母开头的变量或者函数都是被导出的名字。
2、init函数 没有任何返回值类型和参数
包的初始化:
a:初始化包级别的变量
b:紧接着调用init函数。包可以有多个init函数
3、使用空白标识符
导入包,却不在代码中使用 是非法的 使用空白标识符复制代码
八:if-else语句
www.studygolang.com/articles/11…
if num := 10;num % 2 == 0 {
fmt.Println(num)
} else {
fmt.Println(num)
}复制代码
九:循环
www.studygolang.com/articles/11…
for是go语言唯一的循环语句
for i := 1;i <= 10;i++{
fmt.Printf(i)
}复制代码
十:switch语句
www.studygolang.com/articles/11…
finger := 4
switch finger {
case 1:
fmt.Println(4)
}
1、默认情况
switch finger := 8;finger {
case 1:
fmt.Println(4)
default:
fmt.Println(3)
}
2、多表达式判断
letter := "i"
switch letter {
case "a", "e", "i":
fmt.Println("w")
default:
fmt.Println("not")
}
3、无表达式的switch
4、Fallthrough语句
使用Fallthrough语句可以在已经执行完成的case语句之后,把控制权转移到下一个case的执行代码中复制代码