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. shiro 框架之 加密处理。

    一.shiro 加密? /* Shiro? 一.为什么要加密? 为调高数据库的安全性,需要给密码加密. 二.常见的加密算法? 1.1哈希算法 md5:加密算法 哈希函数 1.2.对称算法 1.3.非对 ...

  2. [HNOI2009]双递增序列

    不难发现本题贪心是不好做的,可以考虑 \(dp\). 首先的一个想法就是令 \(dp_{i, j, k, l}\) 表示当前选到第 \(i\) 个位置,当前第一个序列选了 \(j\) 个数,当前第一个 ...

  3. 阿里四面:你知道Spring AOP创建Proxy的过程吗?

    Spring在程序运行期,就能帮助我们把切面中的代码织入Bean的方法内,让开发者能无感知地在容器对象方法前后随心添加相应处理逻辑,所以AOP其实就是个代理模式. 但凡是代理,由于代码不可直接阅读,也 ...

  4. JVM常用命令(九)

    前面东西说完后,现在可以说一些和我们平时进行性能调优相关的东西了,那怎么看和我们JVM性能调优相关的东西呢,其实这对我们开发来说是一个比较头痛的问题,其实我们JDK官网给了一些我们相关的指令,我们可以 ...

  5. C语言非阻塞式键盘监听

    监听键盘可以使用C语言的字符输入函数,例如 getchar.getch.getche 等,使用getche函数监听键盘的例子: #include <stdio.h> #include &l ...

  6. WSL2设置局域网网访问

    标签: wsl2  局域网  docker  WSL2设置内网访问 1.先找到虚拟机的ip 2.设置端口转发(需要管理员权限运行powershell) 3.删除端口转发 4.配置入站规则. 1.先找到 ...

  7. getter/setter方法

    1.setter方法 作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值 命名规范: 必须是对象方法 返回值类型为void 方法名必须以set开头,而且后面跟上成员变量名去掉"_&q ...

  8. NSPredicate类,指定过滤器的条件---董鑫

    /* 比较和逻辑运算符 就像前面的例子中使用了==操作符,NSPredicate还支持>, >=, <, <=, !=, <>,还支持AND, OR, NOT(或写 ...

  9. MLlib学习——降维

    降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段,它可以减少计算过程中考虑到的随机变量(即特征)的个数,其被广泛应用于各种机器学习问题中,用于消除噪声.对 ...

  10. redis(三)-----redis基本数据类型

    Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串.哈希.列表.集合.有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLo ...