美文网首页Go语言常知常会
Go语言常知常会-基础篇

Go语言常知常会-基础篇

作者: 要厉害的 | 来源:发表于2020-07-26 15:07 被阅读0次

知识点var,for循环、while循环、死循环、空标示符、if语句、多行注释、包管理等

1、var变量声明

var是用来声明变量的关键字,一般格式是

var  关键字  变量类型

比如

// 声明一个string类型的变量,名称为name。常用的变量声明方式之一

var  name string 

完整格式

var  关键字  变量类型 = 赋值表达式

比如

var name string = "Jack"

变量在声明的时候可以初始化,如果没有显式的初始化,则会根据变量类型隐式地初始化为0或空字符等等。这是Go语言中的zero-value 机制,保证每个变量都有一个合适的类型。

其它的声明和初始化的方式有

//使用:=,也叫短变量声明,常用的变量声明方式之一。

name := ""

//显式初始化,隐式的类型

var name = ""

//显式初始化,显式的类型

var s string = ""

2、支持循环的语句for

结构如下

for 初始化语句; 条件语句;执行后的语句{

       //一些操作语句

初始化语句在for循环开始之前执行。

Go里面的while循环通过将for循环中的初始化语句和执行后的语句删除来表达,结构如下

for  条件语句 {

Go里面的死循环直接将for循环的初始化语句、条件语句、执行后语句删除表达,结构如下

for {

Go里面也使用continue的关键字允许跳过一些执行语句,直接进入下一次循环。

3、空标示符

也就是下划线标示"_"。它的出现是由于Go语言不允许出现未使用的局部变量。它在语法上需要一个临时变量,但是代码逻辑不需要的时候使用。比如,和range配合起来,range返回的是键值对。空标示符可以作为索引值(key)使用,也可以代替值使用。如果真的需要使用这个变量,还是最好起个名字:)

//代替键使用

for  _, name := range os.Args[1:] {

}

空标示符是没有办法使用的。

4、 条件语句if

跟其它语言语法无区别,格式如下

if 条件语句 {

}else {

5、多行注释

跟C和C++一样,GO使用/* ... */作为多行注释。

6、格式化输出

使用fmt里的Printf函数,可以达到和C语言中printf同样的效果

fmt.Printf("%d, %s\n", id,  name)

7、指针

Go语言也提供指针,通过&来获取指针地址,*来获得指针所指向地址的值。空的指针是nil。

8、常用包

Go语言有着100余个标准包,提供大量的基础函数。提供包管理工具是基于模块化管理的思想,让相似的功能聚合到一起,达到高类聚的设计理念,这为大型工程的设计和维护提供了基础。包只需要对外暴露接口和帮助文档,而实现的细节则封装到每个包的具体实现内。通过包的封装,程序的变动将只会影响局部,而不是全局。

试了一下大概有143个包。

Go 语言的导入使用import。如果打算对外提供包,则最好在包前加上域名。

import path

在每个文件的开通使用package来声明该包的名称。只有路径+包才能定义具体使用的包,即Apath/ApackageBpath/Apackage虽然名称相同,但是不同的包。面对这样的情况引入包的程序,可以选择使用一个别名来替代其中一个重名的包(别名只在导入的文件中有作用),如下:

import (

       "Apath/Apackage"

       xpackage "Bpath/Apackage"    //使用别名,避免冲突

)

例举一些常用的包和其中的函数功能。

net 和网络相关http.Get, http.HandleFunc,http.ListenAndServe

io 和输入输出相关 ioutil.ReadAll,io.Copy, ioutil.Discard

math 提供数学计算

image 和图像处理相关

os 和系统相关Stdout Stderr等

fmt 和格式化输出相关Printf,Println等fmt.Sprintf

time 和时间相关time.Now

log 和日志相关,log.Fatal

syn 和同步相关sync.Mutex(互斥锁)

flag 提供命令行传递参数的功能,如flag.Parse(),flag.Args()

使用go doc工具提供查看每个包或者函数的支持文档,也可以通过https://golong.org/pkg获取相关信息。

9、管道

Go语言中Gorutine之间通信的方式为Channel。

//管道的创建

ch := make(chan 类型)

//从管道中获取

fmt.Println(<-ch)

//输出到管道

ch <- fmt.Sprintf("")

10、变量名称

Go语言中包名一般为小写,外部可见的函数、变量一般大写。使用驼峰命名法。

11、文件结构

每个文件需要写上属于哪个package,文件属于哪个package。文件结构如下组织

package XXXX

import XXXX

包级别的类型、变量、常量、函数声明

函数定义

12、函数结构

Go当中的函数结构如下定义

func 函数名称 (参数名称 参数类型)返回值类型 {

13、作用域

Go语言的变量是有作用域的,分为4种:

universal 全局的比如内置函数、类型等,float64、new

package level 任何函数外的变量

file level 导入的变量、函数等

local 本地变量

可以在不同的范围内声明相同名称的变量,但是存在一种shadow的机制,shadow是指声明的变量有着相同的名字,但是作用域不同,则更靠近执行语句内部的声明会让更外部的失去效果(inaccessible)。比如new在Go中用来创建一个变量。但是,一不小心重定义该名称,则new就失去了本来的作用,变成一个普通的变量。如下代码段所示

func delta(old, new int) int { return new - old}

14、垃圾回收机制

Go语言提供垃圾回收机制,使用者不需要显式地分配和释放内存,但使用者仍然需要考虑如何利用好内存。比如,避免长生命周期的对象中出现指针指向一个短生命周期的对象,长生命周期对象不回收的情况,会让垃圾回收机制也无法回收分配的短生命周期的对象,造成内存浪费。

15、声明新的类型

使用基本的类型来声明新的类型

type 新的类型名称 低层类型

比如,Age类型都是int型的

type  Age int

不同的类型都有转换操作T(x),即将x转换成T类型。低层类型相同的两个新类型不能直接比较。

16、元组赋值

Go语言中赋值的一种方式,让赋值“=”的右边和左边一一对应。在等式两边同时需要出现相同变量的场景(比如交换值),该机制非常非常好用。该机制基于更新左边变量前,右边的值都已经确定下来(evaluted),因此,不用担心在赋值的时候有负面效果。

x, y = y, x

相关文章

  • Go语言常知常会-基础篇

    知识点var,for循环、while循环、死循环、空标示符、if语句、多行注释、包管理等 1、var变量声明 va...

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • go语言基础

    go语言基础 go 语言接口

  • Go语言探索 - 3(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,我们主要学习了Go语言的编程基础。这些基础内容包括注释、分...

  • Go语言基础篇

    := 赋值操作 在函数体内,系统可以自动推断类型,所有可以使用 := 简化变量的出事话 简写形式仅限函数体内,而全...

  • Go语言探索 - 11(原创)

    Go语言基础系列博客用到的所有示例代码 上一篇文章主要学习了Go语言的切片以及Map。本篇文章主要学习的是Go语言...

  • Go语言基础语法--注释、基础结构2

    章节 GO语言基础语法--注释、基础结构(重要) 1.GO语言基础语法---注释、基础结构 基础结构注意事项 源文...

  • Go语言入坑

    GO语言基础 认识并安装GO语言开发环境 Go语言简介 Go语言是谷歌2009年发布的第二款开源编程语言 go语言...

  • Go语言探索 - 4(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,主要学习了Go语言的变量、指针、指针变量、常量以及类型转换...

  • Go语言探索 - 2(原创)

    Go语言基础系列博客用到的所有示例代码 在上一篇文章中,我们主要学习了Go语言环境的安装、IDE的基本安装和使用,...

网友评论

    本文标题:Go语言常知常会-基础篇

    本文链接:https://www.haomeiwen.com/subject/vjpsfktx.html