Golang
文章平均质量分 63
Golang
大漠知秋
为了不显得懒,我还是写点东西吧
展开
-
Golang Docker 部署
环境使用语言Go使用镜像golangalpinescratchGo 程序一个简单的服务func indexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world")}func main() { http.HandleFunc("/", indexHandler) http.ListenAndServe(":9090", nil)}[外链图片转存失败,源站可能有防盗链原创 2022-05-13 23:22:22 · 3073 阅读 · 0 评论 -
面型对象 - 包和封装
命名规范命名规范 Go 中的命名规范名字—般使用 CamelCase (驼峰式大小写法)首字母大写:public首字母小写:private 这里的 public 和 private 是针对谁来说的?针对包。每个目录一个包,但是和 Java 不一样,包名并不一定要和目录名一样,但是每个目录下只能有一个包名。main 方法比较特殊,包含了程序的执行入口,包名...原创 2018-08-17 15:58:44 · 121 阅读 · 0 评论 -
面向对象 - 使用组合和定义别名
使用组合定义别名 上一节说过: public 和 private 是针对包一级的可见性,那么如果我们引入了一个其他同事或者第三方的包,有一个功能我们需要使用,但是他们并没有提供,这时候该怎么扩充呢?使用组合 如下,有一个第三方提供的加法方法:package third_partyhtype TMath struct { I int}func ...原创 2018-08-20 17:50:00 · 293 阅读 · 0 评论 -
channel
基本语法select缓冲机制 channel 是 Go 语言在语言级别提供的 goroutine 间的通信方式。我们可以使用 channel 在两个或多个 goroutine 之间传递消息。channel 是进程内的通信方式,因此通过 channel 传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,建议用分布式系统的方法来解决,比如...原创 2018-08-23 11:00:32 · 18271 阅读 · 0 评论 -
问题 - 多核并行化
如果你的电脑是16核心的话,可以开16个 goroutine 共同计算一列数的的综合,就会发现总的执行时间没有明显缩短。再去观察 CPU 运行状态,你会发现尽管我们有16个 CPU 核心,但在计算过程中其实只有一个 CPU 核心处于繁忙状态,这是会让很多 Go 语言初学者迷惑的问题。 官方的答案是,这是当前版本的 Go 编译器还不能很智能地去发现和利用多核的优势。虽然确实创建了个 gor...原创 2018-08-23 11:13:57 · 547 阅读 · 0 评论 -
问题 - 出让时间片
Go 和 Java 在并发执行上的不同还在于,Java 的多线程是一种抢占式的时间片占用规则,而 Go 的 goroutine 是一种非抢占式的时间片占用规则,也就是说,如果一个 goroutine 在使用 CPU 时间片,那么其他再多的 goroutine 都得阻塞。 我们可以在每个 goroutine 中控制何时主动出让时间片给其他 goroutine,这可以使用 runtime 包...原创 2018-08-23 13:06:53 · 586 阅读 · 0 评论 -
并发 - 同步
同步锁全局唯一性操作 之前喊过一句口号,倡导用通信来共享数据,而不是通过共享数据来进行通信,但考虑到即使成功地用 channel 来作为通信手段,还是避免不了多个 goroutine 之间共享数据的问题,Go 语言的设计者虽然对 channel 有极高的期望,但也提供了妥善的资源锁方案。同步锁 Go 语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 ...原创 2018-08-23 13:34:21 · 623 阅读 · 0 评论 -
面向对象 - 接口
非侵入式接口接口赋值实例赋值给接口接口赋值给接口接口查询类型查询接口组合Any 类型 Go 语言的接口并不是其他语言(C++、Java、C#等)中所提供的接口概念。 在 Go 语言出现之前,接口主要作为不同组件之间的契约存在。对契约的实现是强制的,你必须声明你的确实现了该接口。为了实现一个接口,你需要从该接口继承:interface IFoo { ...原创 2018-08-21 15:52:38 · 367 阅读 · 0 评论 -
goroutine
并发概念协程goroutine并发通信并发概念 回到在 Windows 和 Linux 出现之前的古老年代,程序员在开发程序时并没有并发的概念,因为命令式程序设计语言是以串行为基础的,程序会顺序执行每一条指令,整个程序只有一个执行上下文,即一个调用栈,一个堆。并发则意味着程序在运行时有多个执行上下文,对应着多个调用栈。我们知道每一个进程在运行时,都有自己的调用栈和堆,有...原创 2018-08-21 16:51:50 · 3181 阅读 · 1 评论 -
面向对象 - 结构体
初始化结构创建在堆上还是桟上? 首先说一个概念性问题:Go 语言仅支持封装,不支持继承和多态;GO 语言没有 class ,只有 struct; Go 语言的结构体(struct)和其他语言的类(class)有同等的地位,但 Go 语言放弃了包括继承在内的大量面向对象特性,只保留了组合(composition)这个最基础的特性。 组合甚至不能算面向对象特性...原创 2018-08-17 15:49:32 · 590 阅读 · 0 评论 -
面向对象 - 类型系统
为类型添加方法值语义和引用语义 顾名思义,类型系统是指一个语言的类型体系结构。一个典型的类型系统通常包含如下基本内容:基础类型,如 byte、int、bool、float 等;复合类型,如数组、结构体、指针等;可以指向任意对象的类型(Any 类型);值语义和引用语义;面向对象,即所有具备面向对象特征(比如成员方法)的类型;接口。 类型系统描述的是这些内容...原创 2018-08-17 15:21:43 · 739 阅读 · 0 评论 -
基础环境安装
Golang 安装环境下载地址安装检查安装开发工具GOROOT 和 GOPATHGOPATHHello World代码解读Golang 安装环境下载地址官方下载地址:https://golang.org/dl/可能由于”某些原因”,官方地址下载不了,可以使用国内的一个地址:https://studygolang.com/dl ...原创 2018-08-16 20:28:18 · 212 阅读 · 0 评论 -
变量
声明变量变量初始化变量赋值匿名变量 变量是几乎所有编程语言中最基本的组成元素。从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。声明变量 Go 语言的变量声明方式与 C 和 C++ 语言有明显的不同。对于纯粹的变量声明,Go语 言引入了 关键字 var,而类型信息放在变...原创 2018-08-17 09:54:23 · 190 阅读 · 0 评论 -
常量
字面常量常量定义预定义常量枚举字面常量 所谓字面常量(literal),是指程序中硬编码的常量,如:-123.14159265358979323846 // 浮点类型的常量3.2+12i // 复数类型的常量true // 布尔类型的常量"foo" ...原创 2018-08-17 10:07:30 · 200 阅读 · 0 评论 -
数据类型
基本数据类型复合数据类型基本数据类型 关键字 说明 bool 布尔类型 (u)int、(u)int8、(u)int16、(u)int32、(u)int64、uintptr 整数,带u:无符号整数,不带u:有符号整数。有符号整数分为两类:1、规定长度,如:int8、int16。2、不规定长度,根据操作系统来,32为就是int32,64位就是...原创 2018-08-17 11:34:12 · 457 阅读 · 0 评论 -
流程控制
条件语句选择语句循环语句跳转语句 程序设计语言的流程控制语句,用于设定计算执行的次序,建立程序的逻辑结构。可以说,流程控制语句是整个程序的骨架。 从根本上讲,流程控制只是为了控制程序语句的执行顺序,一般需要与各种条件配合,因此,在各种流程中,会加入条件判断语句。流程控制语句一般起以下3个作用:选择,即根据条件跳转到不同的执行序列;循环,即根据条件反复执行某个序...原创 2018-08-17 13:33:01 · 103 阅读 · 0 评论 -
函数
函数的定义函数调用不定参数不定参数类型不定参数的传递任意类型的不定参数多返回值 函数构成代码执行的逻辑结构。在 Go 语言中,函数的基本组成为:关键字 func、函数名、参数列表、返回值、函数体和返回语句。函数的定义 这里生命一个最简单的加法函数来说明一下:package mymathimport "errors"func Add(a int...原创 2018-08-17 13:55:27 · 173 阅读 · 0 评论 -
匿名函数与闭包
匿名函数闭包 匿名函数是指不需要定义函数名的一种函数实现方式,它并不是一个新概念,最早可以回溯到1958年的 Lisp 语言。但是由于各种原因,C 和 C++ 一直都没有对匿名函数给以支持,其他的各种语言,比如 JavaScript、C# 和 Objective-C 等语言都提供了匿名函数特性,当然也包含 Go 语言。匿名函数 在 Go 里面,函数可以像普通变量一样被...原创 2018-08-17 14:06:38 · 485 阅读 · 0 评论 -
错误处理
error 接口defer 关键字panic() 和 recover() 错误处理是学习任何编程语言都需要考虑的一个重要话题。在早期的语言中,错误处理不是语言规范的一部分,通常只作为一种编程范式存在,比如 C 语言中的 errno。但自 C++ 语言以来,语言层面上会增加错误处理的支持,比如异常(exception)的概念和 try-catch 关键字的引入。Go 语言在此功...原创 2018-08-17 14:40:34 · 271 阅读 · 0 评论 -
语言特性
自动垃圾回收更丰富的内置类型函数多返回值错误处理匿名函数和闭包类型和接口并发编程反射语言交互性 学习一门语言,首先要去了解下这个语言的特性,它有哪些优势、特点,相对于其他成熟语言有什么独到之处。当然,如果你是单纯的冲着这个语言名字来的也可以。先来看看 Golang 的语言特性自动垃圾回收 没有自动垃圾回收机制的语言会存在各种非预期的原...原创 2018-08-16 19:56:52 · 1136 阅读 · 0 评论