大漠知秋的加油站

  • 首页
Golang
Docker CE

Golang Docker 部署

环境 使用语言 Go 使用镜像 golang alpine scratch Go 程序 一个简单的服务 func indexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world") } func main() { http.HandleFunc("/", indexHandler) http.ListenAndServe(":9090", nil) } Dockerfile FROM golang as golan…

2022年5月13日 0条评论 1172点热度 1人点赞 大漠知秋 阅读全文
Docker CE

Kubernetes kubeadm 证书到期,更新证书

版本 服务 版本 CentOS 7.8 Kubernetes 1.18.x 证书问题   可能很多人在一开始学习 k8s 的时候,没有注意过证书的问题,在使用 kubeadm 安装 k8s 单机/集群的过程中就是一路往下,如果是学习或者测试使用,使用完毕之后就把虚拟机或者临时云服务器删除了,那也不会发现证书问题。如果这个 k8s 环境要使用 1 年以上,就会碰到这个问题,因为默认证书有效期为 1 年,CA 根证书是 10 年: # 查看证书截止时间,该命令显示 /etc/kubernetes/pki 文件夹中的客户…

2021年8月27日 0条评论 1535点热度 0人点赞 大漠知秋 阅读全文
Golang

并发 - 同步

  之前喊过一句口号,倡导用通信来共享数据,而不是通过共享数据来进行通信,但考虑到即使成功地用 channel 来作为通信手段,还是避免不了多个 goroutine 之间共享数据的问题,Go 语言的设计者虽然对 channel 有极高的期望,但也提供了妥善的资源锁方案。 同步锁   Go 语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 sync.RWMutex。Mutex 是最简单的一种锁类型,同时也比较暴力,当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖…

2019年1月3日 0条评论 1218点热度 0人点赞 大漠知秋 阅读全文
Golang

问题 - 出让时间片

  Go 和 Java 在并发执行上的不同还在于,Java 的多线程是一种抢占式的时间片占用规则,而 Go 的 goroutine 是一种非抢占式的时间片占用规则,也就是说,如果一个 goroutine 在使用 CPU 时间片,那么其他再多的 goroutine 都得阻塞。   我们可以在每个 goroutine 中控制何时主动出让时间片给其他 goroutine,这可以使用 runtime 包中的 Gosched() 函数实现。   实际上,如果要比较精细地控制 goroutine 的行为,就必须比较深入地了解 …

2019年1月3日 0条评论 1215点热度 0人点赞 大漠知秋 阅读全文
Golang

问题 - 多核并行化

  如果你的电脑是16核心的话,可以开16个 goroutine 共同计算一列数的的综合,就会发现总的执行时间没有明显缩短。再去观察 CPU 运行状态,你会发现尽管我们有16个 CPU 核心,但在计算过程中其实只有一个 CPU 核心处于繁忙状态,这是会让很多 Go 语言初学者迷惑的问题。   官方的答案是,这是当前版本的 Go 编译器还不能很智能地去发现和利用多核的优势。虽然确实创建了个 goroutine,并且从运行状态看这些 goroutine 也都在并行运行,但实际上所有这些 goroutine 都运行在同一…

2019年1月3日 0条评论 1167点热度 0人点赞 大漠知秋 阅读全文
Golang

channel

  channel 是 Go 语言在语言级别提供的 goroutine 间的通信方式。我们可以使用 channel 在两个或多个 goroutine 之间传递消息。channel 是进程内的通信方式,因此通过 channel 传递对象的过程和调用函数时的参数传递行为比较一致,比如也可以传递指针等。如果需要跨进程通信,建议用分布式系统的方法来解决,比如使用 Socket 或者 HTTP 等通信协议。Go 语言对于网络方面也有非常完善的支持。   channel 是类型相关的。也就是说,一个 channel 只能传递一…

2019年1月3日 0条评论 545点热度 0人点赞 大漠知秋 阅读全文
Golang

goroutine

并发概念   回到在 Windows 和 Linux 出现之前的古老年代,程序员在开发程序时并没有并发的概念,因为命令式程序设计语言是以串行为基础的,程序会顺序执行每一条指令,整个程序只有一个执行上下文,即一个调用栈,一个堆。并发则意味着程序在运行时有多个执行上下文,对应着多个调用栈。我们知道每一个进程在运行时,都有自己的调用栈和堆,有一个完整的上下文,而操作系统在调度进程的时候,会保存被调度进程的上下文环境,等该进程获得时间片后,再恢复该进程的上下文到系统中。   从整个操作系统层面来说,多个进程是可以并发的,那…

2019年1月3日 0条评论 525点热度 0人点赞 大漠知秋 阅读全文
Golang

面向对象 - 接口

  Go 语言的接口并不是其他语言(C++、Java、C#等)中所提供的接口概念。   在 Go 语言出现之前,接口主要作为不同组件之间的契约存在。对契约的实现是强制的,你必须声明你的确实现了该接口。为了实现一个接口,你需要从该接口继承: interface IFoo { void Bar(); } class Foo implements IFoo { // Java文法 // ... } class Foo : public IFoo { // C++文法 // ... } IFoo* foo = new Fo…

2019年1月3日 0条评论 1201点热度 0人点赞 大漠知秋 阅读全文
Golang

面向对象 - 使用组合和定义别名

  上一节说过: public 和 private 是针对包一级的可见性,那么如果我们引入了一个其他同事或者第三方的包,有一个功能我们需要使用,但是他们并没有提供,这时候该怎么扩充呢? 使用组合   如下,有一个第三方提供的加法方法: package third_partyh type TMath struct { I int } func (math *TMath) Add(tarMath TMath) { math.I += tarMath.I }   我们可以这样使用: package main import…

2019年1月3日 0条评论 1197点热度 0人点赞 大漠知秋 阅读全文
Golang

面型对象 - 包和封装

命名规范   Go 中的命名规范 名字—般使用 CamelCase (驼峰式大小写法) 首字母大写:public 首字母小写:private   这里的 public 和 private 是针对谁来说的?针对包。每个目录一个包,但是和 Java 不一样,包名并不一定要和目录名一样,但是每个目录下只能有一个包名。main 方法比较特殊,包含了程序的执行入口,包名需要是 main,也就是说 main 方法所在目录的所有 .go 文件的包名必须为 main。   为结构体定义方法时需要注意的事项: 为结构定义的方法必须放…

2019年1月3日 0条评论 1210点热度 0人点赞 大漠知秋 阅读全文
123
分类
  • C++ / 11篇
  • Develop Software / 3篇
  • Docker CE / 24篇
  • Elasticsearch / 3篇
  • FastDFS / 1篇
  • Flutter / 1篇
  • Git / 3篇
  • GitLab / 6篇
  • Golang / 21篇
  • Http Client 4.5.2 / 2篇
  • Java / 14篇
  • Kubernetes / 19篇
  • Linux / 65篇
  • Mac / 5篇
  • Maven / 1篇
  • MyBatis / 1篇
  • MySQL / 8篇
  • Nginx / 6篇
  • Rabbit MQ / 10篇
  • Redis / 1篇
  • Spring / 1篇
  • Spring Boot / 12篇
  • Spring Cloud Finchley.RELEASE / 50篇
  • Sublime / 2篇
  • Windows / 1篇
  • 吉他 / 2篇
  • 图论 / 8篇
  • 数据结构与算法 / 11篇
  • 未分类 / 1篇

COPYRIGHT © 2023 大漠知秋的加油站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备16029200号-2