07.Golang容器之切片功能操作

[TOC]前言一、切片不能直接比较切片之间是不能比较的,我们不能使用==操作符来判断两个切片是否含有全部相等元素。 切片唯一合法的比较操作是和nil比较。 一个nil值的切片并没有底层数组,一个nil值的切片的长度和容量都是0。但是我们不能说一个长度和容量都是0的切片一定是nil,例如下面的示例:var s1 []int //len(s1)=0;cap(s1)=0;s1==nil s2 := []int{} //len(s2)=0;cap(s2)=0;s2!=nil s3 := make([]int, 0) //len(s3)=0;cap(s3)=0;s3!...

GO 2022-06-30 PM 755℃ 0条

06.Golang容器之切片

[TOC]前言一、概述切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。二、切片2.1 切片的定义声明切片类型的基本语法如下:var name []T说明name:表示变量名T:表示切片中的元素类型示例func main() { // 声明切片类型 var a []string //声明一个字符串切片 var b = []int{} //声明一个整型切片并初始化 ...

GO 2022-06-30 PM 647℃ 0条

05.Golang容器之数组

[TOC]前言一、概述数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。和数组对应的类型是 Slice(切片),Slice 是可以增长和收缩的动态序列,功能也更灵活,但是想要理解 slice 工作原理的话需要先理解数组,所以本节主要为大家讲解数组的使用。二、数组2.1 声明数组数组的声明语法如下:var 数组变量名 [元素数量]Type说明数组变量名:数组声明及使用时的变量名。元素数量:数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量不能含有到运行时才能确认大小的数...

GO 2022-06-29 PM 721℃ 0条

04.Golang基本数据类型

[TOC]前言在静态类型语言(C++/Java/Golang 等)中规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存。一、整形整型分两大类有符号整型:int8、int16、int32、int64、int。无符号整型:uint8、uint16、uint32、uint64、uint。注意: 在使用int和 uint类型时,不能假定它是32位或64位的整型,而是考虑int和uint可能在不同平台上的差异。表示范围:在 32 位系统下是 -2147483648 ~ 2147483647 ,而在 64 位系统是 -9223372036854775808 ~ 9223...

GO 2022-06-28 PM 903℃ 0条

03.Golang基础之变量与常量

[TOC]前言一、变量1.1 概述程序在运行过程中,数据保存在内存当中。在代码中,可以通过以下两种方式到内容中访问具体的数据:直接引用该数据的内存地址访问数据通过创建变量将数据的内存地址保存起来,然后通过引用变量名去访问数据和后者相比前者的可读性差,并且容易出错,所以在程序中通常会通过定义一个简短有意义的名称来用于对数据的访问。简言之,变量就是一块存放(可变)数据的内存空间,引用变量名就可以到该内存空间上访问(查找or修改)数据。组成变量由内存地址,数据类型和值组成:内存地址:给出了变量在内存中存储的起始地址,一般占用4或8字节(32位、64位机器)。数据类型:定义了变量占用内存的大小。...

GO 2022-06-28 PM 664℃ 0条

02.Golang入门程序

[TOC]前言在执行GO语言时需要先安装一个SDKGo 安装包下载Windows系统只需要下载对应版本的以.msi后缀结尾的文件即可。安装完成后自动加入环境变量,不需要手动配置。安装过程很简单本文就不在赘述。安装完成后打开cmd查看是否安装成功go version一、第一个GO程序需求:在控制台输出"Hello World!"package main // 声明 main 包 import "fmt" // 导入 fmt 包,打印字符串时需要用到 func main() { // 声明 main 主函数 fmt.Println("...

GO 2022-06-27 PM 948℃ 0条

01.Golang介绍

[TOC]前言在开始本篇之前先上一张表情包:GO语言的吉祥物是一只地鼠(gopher)。一、简介Go语言又称为Golang是Google于2009年正式发布的一款开源的静态编译型编程语言,Go拥有构建简单、可靠和高效的特性。主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”,旨在不损失应用程序性能的情况下降低代码的复杂性。很多公司,特别是中国的互联网公司,即将或者已经完成了使用 Go 语言改造旧系统的过程。经过 Go 语言重构的系统能使用更少的硬件资源获得更高的并发和I/O吞吐表现。充分挖掘硬件设备的潜力也满足当前精细化运营的市场大环境。Go语言的...

GO 2022-06-26 PM 1602℃ 2条

04.Netty源码分析之启动流程分析

[TOC]一、NIO启动流程Netty底层是NIO,从对NIO的组件封装开始进行分析。本次对Netty的分析主要是在源码中找到下方NIO的方法,来看看netty中对下面的代码是怎样进行处理的//1 netty 中使用 NioEventLoopGroup (简称 nio boss 线程)来封装线程和 selector //可以同时监听多个channel上的读和写事件 Selector selector = Selector.open(); //2 创建 NioServerSocketChannel,同时会初始化它关联的 handler,以及为原生 ssc 存储 config NioSe...

Java 2022-06-24 PM 891℃ 0条

03.Netty搭建RPC框架

[TOC]一、概述RPC的目的,让分布式或者微服务系统中不同服务之间的调用(远程调用)像本地调用一样简单,调用者感知不到远程调用的逻辑。二、目的客户端向服务端发送请求,调用HelloService接口中的sayHello方法,最后服务端将结果返回给客户端HelloService接口public interface HelloService { String sayHello(String name); }HelloServiceImpl接口实现类public class HelloServiceImpl implements HelloService { @Overrid...

Java 2022-06-23 PM 886℃ 0条

02.Netty优化之参数调优

[TOC](1) CONNECT_TIMEOUT_MILLIS属于 SocketChannal 的参数用在客户端建立连接时,如果在指定毫秒内无法连接,会抛出 timeout 异常注意:Netty 中不要用成了SO_TIMEOUT 主要用在阻塞 IO,而 Netty 是非阻塞 IO示例import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOpti...

Java 2022-06-22 PM 1075℃ 0条