Go Study Day01 - 基本数据类型

2019/6/30 go学习提升

# Go 基本命令

# go build

使用go build

  1. 在项目目录下执行go build

  2. 在其他路径下执行go build, 需要在后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存在当前目录下)

  3. go build -o hello.exe

# go run

像执行脚本文件一样执行Go代码:go run main.go

# go install

go install分为两步:

  1. 先编译得到一个可执行文件

  2. 将可执行文件拷贝到GOPATH/bin

# 交叉编译

Go支持跨平台编译

例如:在windows平台编译一个能在linux平台执行的可执行文件

SET CGO_ENABLED=0  // 禁用CGO
SET GOOS=linux  // 目标平台是linux
SET GOARCH=amd64  // 目标处理器架构是amd64
1
2
3

执行go build

Mac平台交叉编译:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
1
2

# Go语言文件的基本结构

import "fmt"

// 函数外只能防止标识符(变量\常量\函数\类型)的声明
// fmt.Println("Hello") // 非法

// 程序的入口函数
func main() {
	fmt.Println("Hello world!")
}

1
2
3
4
5
6
7
8
9
10

# 变量和常量

# 变量

Go语言中的变量必须先声明再使用,格式:

var 变量名 变量类型
1

声明变量

var s1 string:声明一个保存字符串类型数据的s1变量

声明并赋值

var 变量名 类型 = 表达式
var age int = 18
//函数内部专属:
name3:="zhangsan"
1
2
3
4

类型推导

有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化。

var name = "Q1mi"
var age = 18
1
2

短变量声明

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

package main

import (
	"fmt"
)
// 全局变量m
var m = 100

func main() {
	n := 10
	m := 200 // 此处声明局部变量m
	fmt.Println(m, n)
}
1
2
3
4
5
6
7
8
9
10
11
12
13

匿名变量

匿名变量用一个下划线_表示,例如:

func foo() (int, string) {
	return 10, "Q1mi"
}
func main() {
	x, _ := foo()
	_, y := foo()
	fmt.Println("x=", x)
	fmt.Println("y=", y)
}
1
2
3
4
5
6
7
8
9

# 常量

相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var换成了const,常量在定义的时候必须赋值。

const pi = 3.1415
const e = 2.7182
1
2
# iota

iota是go语言的常量计数器,只能在常量的表达式中使用。

iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。

举个例子:

const (
		n1 = iota //0
		n2        //1
		n3        //2
		n4        //3
	)
1
2
3
4
5
6

两个要点:

  1. iota在const关键字出现时将被重置为0
  2. const中每新增一行常量声明,iota累加1

# 注意事项

  • 变量名推荐使用驼峰式

  • 变量必须先声明再使用

  • 变量声明且赋值后必须使用

# 基本数据类型

  • 整型

    ​ 无符号整型:uint8uint16uint32uint64

    ​ 带符号整型:int8int16int32int64

    uintint:具体是32位还是64位看操作系统

    uintptr:表示指针

  • 浮点型

    float64float32

    Go语言中浮点数默认是float64

  • 复数

    complex128complex64

  • 布尔值

    truefalse

    不能和其他的类型做转换

  • 字符串

    "字符串"

字符串、字符、字节 都是什么?

  • 字符串:双引号包裹的是字符串

  • 字符:单引号包裹的是字符,单个字母、单个符号、单个文字

  • 字节:1byte=8bit

go语言中字符串都是UTF8编码,UTF8编码中一个常用汉字一般占用3个字节。

// 字符串
s := "Hello 沙河"
// 单独的字母、汉字、符号表示一个字符
c1 := 'h'
c2 := '1'
c3 := '沙'
// 字节: 1字节=8Bit(8个二进制位)
// 1个字符‘A’=1个字节
// 1个utf8编码的汉字'沙'= 一般占3个字节
1
2
3
4
5
6
7
8
9

# byte和rune

Go 语言的字符有以下两种:

  1. uint8类型,或者叫 byte 型,代表一个ASCII码字符。
  2. rune类型,代表一个 UTF-8字符

# 运算符

# 算术运算符

+-*/

# 逻辑运算符

&& || !

# 位运算符

>> << | ^ &

# 赋值运算符

= += 。。。

++-- 是独立的语句,不属于赋值运算符

# 比较运算符

< <= != 。。。

# 参考

Last Updated: 2023/3/15
只爱西经
林一