Golang学习笔记(二)

(文章持续更新中...有志同道合的人能够一块儿探讨下。整个系列(1~8)准备重写,不过都是很基础的入门笔记,想学到很深刻的东西则不建议阅读...)bash

熟悉Go基本语法

变量(内存块)是用来存储数据。类型有:整型、浮点型、布尔型、结构体等。Go 语言的每个变量都拥有本身的类型,必须通过声明才能开始用。数据结构

变量声明基本格式:tcp

var 变量名 变量类型

var a int
var b string
var c []float64 // 切片格式
var d func() bool //  声明一个返回值为布尔类型的函数变量 
var e struct{
    x int
}

批量声明
var (
    a int
    b string
    c []float64 
    d func() bool
    e struct {
        x int
    } 
)
复制代码

变量声明会默认进行初始化函数

var 变量名 类型 = 表达式

var hp int = 100

推导式申明,编译器会尝试根据等号右边的表达式推导 hp 变量的类型
var hp = 100

短变量声明并初始化
hp := 10
conn, err := net.Dial("tcp","127.0.0.1:8080")

匿名变量  用_表示,匿名变量不占用命名空间,不会分配内存。匿名变量不会由于屡次声明而没法使用。
func GetName() (string, string) {
    return "wu", "winyh"
}
a, _ := GetData()
_, b := GetData()

// 打印浮点数时,可使用 fmt 包配合动词%f
package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Printf("%f\n", math.Pi)
    fmt.Printf("%.2f\n", math.Pi) // 按默认宽度,2 位精度输出
}
复制代码

Go语言有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有切片、结构体、函数、map、通道(channel)等ui

Go 语言的标准库支持对图片像素进行访问(好强大的样子),而且支持输出各类图片格式,如 JPEG、PNG、GIF 等。spa

Go 语言中不容许将整型强制转换为布尔型,布尔型没法参与数值运算,也没法与其余类型进行转换。 Go 使用类型前置加括号的方式进行类型转换指针

var a int32 = 1047483647
b := int16(a) // 会截断输出
复制代码

Go语言指针

  • 类型指针,容许对这个指针类型的数据进行修改。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算
  • 切片,由指向起始元素的原始指针、元素数量和容量组成。

切片比原始指针具有更强大的特性。code

计算机堆和栈概念

栈(Stack)是一种拥有特殊规则的线性表数据结构。后进先出(LIFO) 栈可用于内存分配,栈的分配和回收速度很是快。 变量生命周期生命周期

func calc(a, b int) int {
    var c int
    c = a * b
    var x int
    x = c * 10
    return x
}

以上默认状况下会将 c 和 x 分配在栈上,这两个变量在 calc() 函数退出时就再也不使用,函数结束时,保存 c 和 x 的栈内存再出栈释放内存,整个分配内存的过程经过栈的分配和回收都会很是迅速。
复制代码

堆和栈分配内存相比,堆适合不可预知大小的内存分配。可是为此付出的代价是分配速度较慢,并且会造成内存碎片。图片

常量是恒定不变的值,没法被修改

const (
    pi = 3.141592
    e = 2.718281
)
复制代码

Go语言type关键字(类型别名)

type TypeAlias = Type

package main

import (
    "fmt"
)
// 将NewInt定义为int类型
type NewInt int

func main() {
    // 将a声明为NewInt类型
    var a NewInt
    // 查看a的类型名
    fmt.Printf("a type: %T\n", a)
}

复制代码

TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类型。

相关文章
相关标签/搜索