对Go语言初学笔记| 青训营

108 阅读5分钟

GO语言基础语法

Go 语言的基础组成有以下几个部分:

  • 包声明

  • 引入包

  • 函数

  • 变量

  • 语句 & 表达式

  • 注释

  • package main

    import "fmt"

    func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!") }

首先,应该导入fmt包, fmt 包实现了格式化 IO(输入/输出)的函数。func main()

s是程序开始执行接口 /* */表示注解 这点和c++一样

基本变量和常量

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

声明变量的一般形式是使用 var 关键字。

第一种,指定变量类型,如果没有初始化,则变量默认为零值

var b int
var c bool
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口

第二种,根据值自行判定变量类型。

var d = true

第三种,如果变量已经使用 var 声明过了,再使用 *:=* 声明变量,就产生编译错误,格式:

intVal := 1  ==>var intVal int            intVal =1 

常量是一个简单值的标识符,在程序运行时,不会被修改的量。

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

  • 显式类型定义: const b string = "abc"
  • 隐式类型定义: const b = "abc"

基本数据类型

1布尔型
值只能为true 或 falsevar a bool = true
var b = true
c := true
2数字类型
浮点型float32 IEEE-754 32位浮点型数
float64IEEE-754 64位浮点型数
complex64 32 位实数和虚数
**complex128 ** 64 位实数和虚数
整型int8 有符号 8 位整型 (-128 到 127) uint8无符号 8 位整型 (0 到 255)
int16有符号 16 位整型 (-32768 到 32767) uint16无符号 16 位整型 (0 到 65535)
int32有符号 32 位整型 (-2147483648 到 2147483647)
uint32无符号 32 位整型 (0 到 4294967295)
int64有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
uint64无符号 64 位整型 (0 到 18446744073709551615)
3字符串类型
一串固定长度的字符连接起来的字符序列。
Go 的字符串是由单个字节连接起来的。
Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
var d = "hello"
e := "hello"
4派生类型:
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
后面列举

声明数组

var array[size] datatype

array为数组名 size为大小 datatype 为数据类型

初始化数组

var numbers [5] int 默认值都为0

var numbers=[5]int{1,2,3,4,5}

numbers :=[5]int {1,2,3,4,5}这是Go语言特别的初始化方式

如果数组长度不确定,可以用...代替数组长度

numbers :=[...]int {1,2,3,4,5}

指针

一个指针变量指向了一个值的内存地址

var p *int var p *float32

这点和c++很像

指针使用

var a int=20

var p*int

p=&a p是指向a的地址,*p是a的值

空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil,也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值

结构体

格式:type structname struct{...

member defination

} 和其他语言一样定义使用

Map(集合)

Map 是一种无序的键值对的集合。和java中hashmap一样

Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是引用类型,如果将一个 Map 传递给一个函数或赋值给另一个变量,它们都指向同一个底层数据结构,因此对 Map 的修改会影响到所有引用它的变量。若不存在,则返回零值

创建map

m := map[string]int{ "apple": 1, "banana": 2, "orange": 3, }

获取元素

v1 := m["apple"] v2, ok := m["pear"] 如果键不存在,ok 的值为 false,v2 的值为该类型的零值

获取 Map 的长度:len := len(m)

删除元素:delete(m, "banana")

遍历 Map:for k, v := range m { fmt.Printf("key=%s, value=%d\n", k, v) }

切片

make([]T, length, capacity) 创建切片

len() 和 cap() 函数 len获取长度 cap获取切片最大长度
append() 和 copy() 函数 append追加 copy复制

var numbers []int

numbers = append(numbers, 1)追加

numbers1 := make([]int, len(numbers), (cap(numbers))*2)

copy(numbers1,numbers) 拷贝

函数

func name(){

函数体...

}

Range关键字

可以对数组,集合,切片等进行遍历 作为简单操作

for key, value := range oldMap { newMap[key] = value }

其中value是oldmap中的值

key初始值为0

类型转换

Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

强制类型转换的基本语法如下:

    T(表达式)

其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等.

比如计算直角三角形的斜边长时使用math包的Sqrt()函数,该函数接收的是float64类型的参数,而变量a和b都是int类型的,这个时候就需要将a和b强制类型转换为float64类型。

    func sqrtDemo() {
        var a, b = 3, 4
        var c int
        // math.Sqrt()接收的参数是float64类型,需要强制转换
        c = int(math.Sqrt(float64(a*a + b*b)))
        fmt.Println(c)
    }

大致写了一点基础语法,后面的到时候会写。