Go基础知识梳理(一)

Go中package的用法及作用

package hello

用于分包,Go通过包来管理命名空间

import (
"hello" //通过import关键字来使用包
)

Go中的25个关键字

break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var

用法说明

package //定义包名的关键字
import //引入包名的关键字
const //常量声明关键字
var //变量声明关键字
func //函数定义关键字
defer //延迟执行关键字
go //新起协程关键字
return //函数返回关键字
struct //结构体定义关键字
interface //接口定义关键字
map //声明或创建map类型关键字,key->value类型
chan //声明或创建通道关键字
if else //条件关键字
for range break continue //循环使用的关键字
switch select case default fallthrough
package person 

//interface 用于定义接口
type Person interface {
Say()
} //type就是声明的意思,struct是用于定义结构体
type Man struct {
Name string
} //const 用于定义常量, var同理, var还可以用来定义变量
const (
SEX_MAN = itoa
SEX_WOMAN
)

内置类型

整型
byte int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintprt 浮点型
float32 float64
注意:b := 12.00 会自动被推断为float64类型 复数型
complex64 complex128 字符串型
string rune 布尔型
bool 常量值标识符
true false //bool返回的值
iota //用于连续的枚举类型自动递增
nil //引用类型的默认值

变量以及常量的定义

var name string = ""
var sex int //会默认赋值为int的初始值0 func main() {
name := "" //简短声明,仅函数内可用
} 在ubr的开发规范中, 在函数内最好都使用简短声明 type Day int const (
Mon Day = iota
Tue //自动为1
Wes //自动为2
)

指针

* 用于获取指针的值
& 用于获取值的存放地址 func sum(a, b int) *int {
sum := a + b
return &sum //sum值将会逃逸到堆上
}

数组

a := [3]int{1,2,3} //指定长度的数组定义
a := [...]int{1,2} //让初始化列表来指定数组长度
//数组定义后不能改变长度,切片可以 数组的访问
num := a[0]
for idx, item := range a {
fmt.Println(index, item)
}

切片

切片的底层结构
type slice struct {
array unsafe.Pinter //指向底层数组的指针
len int //当前元素数量
cap int //最大容量
}
//切片的创建,推荐用make内置函数
sli := make([]int, 10, 15) //初始化10个为0的值,最大容量为15
fmt.Printf("%v\n", sli) //输出的值为[0 0 0 0 0 0 0 0 0 0] a := []int{0, 1, 2, 3, 4, 5}
fmt.Println(len(a)) //6
fmt.Println(cap(a)) //6 b := make([]int, 2, 4) //指定初始化长度为2,容量为4
fmt.Println(len(b)) //2
fmt.Println(cap(b)) //4
c := a[0:3] //获取a切片的前三个数据
fmt.Println(len(c)) //3
fmt.Println(cap(c)) //6 底层还是a切片,所以容量是a的容量6
b = append(b, c...)
fmt.Println(len(b)) //5
fmt.Println(cap(b)) //8 当前长度小于容量,不进行扩容
b = append(b, a...)
fmt.Println(len(b)) //11
fmt.Println(cap(b)) //16 当前长度大于8,所以进行扩容 d := make([]int, 2)
copy(d, c) //复制切片数据
fmt.Println(d)
fmt.Println(len(d))
fmt.Println(cap(d))

Map

//第一种定义方法
ma := map[int]string{}
for i := 0; i < 5; i++ {
ma[i] = strconv.Itoa(i)
}
for k, v := range ma { //无序遍历,遍历顺序不固定
fmt.Println("key", k, "value", v)
}
//第二种定义方法
m2 := make(map[int]Man, 10)
man1 := Man{
Name: "man1",
}
m2[0] = man1
for k, v := range m2 {
fmt.Println("key", k, "value", v)
}

if语句

写法介绍 条件语句不用加()
bo := true
if bo {
return true
}
return false

switch语句

写法介绍
var i uint32 = 0
switch i {
case 0:
fmt.Println("0")
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
default:
fmt.Println(">2")
}

Go基础知识梳理(一)的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. Anliven - 基础知识梳理汇总 - 软件测试

    基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...

  7. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  8. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  9. C#基础知识梳理索引

    C#基础知识梳理索引 一 引子 之前曾写了一篇随笔<.NET平台技术体系梳理+初学者学习路径推荐+我们的愿景与目标> 三个月过去了,目标使更多的编程初学者,轻松高效地掌握C#开发的基础,重 ...

  10. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

随机推荐

  1. Redis内存满了怎么办(新年快乐)

    Redis内存满了怎么办(新年快乐) 入我相思门,知我相思苦. 长相思兮长相忆,短相思兮无穷极. 一.配置文件 Redis长期使用或者不设置过期时间,导致内存爆满或不足,可以到Redis的配置文件re ...

  2. HBuilderX频繁关闭,导致启动不了?

    根据官方给出的指南(http://ask.dcloud.net.cn/article/35583),在我的电脑打开%appdata%下面的会有HBuilderX目录,把这个目录删除或改名就可以启动了:

  3. JoJoGAN 实践

    JoJoGAN: One Shot Face Stylization. 只用一张人脸图片,就能学习其风格,然后迁移到其他图片.训练时长只用 1~2 min 即可. code paper 效果: 主流程 ...

  4. html重点标签总结

    一. iframe 的学习 iframe通俗的的理解就是,可以在页面里面嵌套新的页面 它的使用会使页面变卡,一般会有一个固定的尺寸,默认的.他也属于可替换元素行列.我们可以通过CSS来改变尺寸 fra ...

  5. 获取公网ip,获取用户城市地址

    <?php class GetIp { public static $api = 'http://ip.taobao.com/service/getIpInfo.php?ip='; public ...

  6. docker基础——4.网络待补

    docker network ls bridge:NAT桥 host:共用宿主机namespace的UTS.IPC.Network none:只有lo,没有网卡 其他待补

  7. springCloud项目解决跨域问题

    通过 spring cloud gateway 实现, 方式一:选择在主启动类中注册 CorsWebFilter 类: /** * 1.允许cookies跨域 * 2.允许向该服务器提交请求的URI, ...

  8. Postman_JavaScript

    使用语法:JavaScript 结构: 测试工具主要包括三部分 在发起请求之前运行的Pre-request,预处理数据,作用:在发送请求前编辑请求数据,比如用户名或时间戳 对响应后的数据运行的Test ...

  9. Linux实现MySQL数据库凌晨自动备份

    Linux实现MySQL数据库凌晨自动备份 备份多数据库,每天凌晨两点执行,使用当前年月日作为文件夹,不存在该文件夹就创建,删除七天前备份过的文件. 定时调度使用crontab 1 login_use ...

  10. suse 12 二进制部署 Kubernetets 1.19.7 - 番外篇 - 增加node节点

    文章目录 0.前景提要 1.准备node节点环境 1.0.修改配置脚本参数 1.1.配置免密 1.2.添加hosts解析 1.3.修改主机名 1.4.更新PATH变量 1.5.安装依赖包 1.6.关闭 ...