本文讲讲Ubuntu18及以上版本配置IP的方法,为什么它值得一讲,因为以Ubuntu16为首的版本的配置方法已经不适用了,如果你还不知道,那本文正好get一个新技能。Ubuntu18之后版本配置方法需要使用netplan工具。对应配置文件:/etc/netplan/50-cloud-init.yaml,有的不一定是50-cloud-init.yaml这个文件,但都大同小异。修改如下:#vim/etc/netplan/50-cloud-init.yamlnetwork:version:2renderer:networkdethernets:enp10s0:dhcp4:noaddresses:[
开篇明义,Golang中从来就不存在所谓的“引用传递”,从来就只有一种变量传递方式,那就是值传递。因为引用传递的前提是存在“引用变量”,但是Golang中从来就没有出现过所谓的“引用变量”,所以也就不可能存在引用传递这种变量传递的方式。引用类型首先,Golang的基本数据类型是值类型,比如整数、浮点、字符串、布尔、数组及错误类型,它们本质上是原始类型,也就是不可改变的,所以对它们进行操作,一般都会返回一个新创建的值,所以把这些值传递给函数时,其实传递的是一个值的拷贝副本,这一点,基本没啥争议。而引用类型指的是它的修改动作可以影响到任何引用到它的变量。在Go语言中,引用类型有切片(slice)、
开篇明义,Golang中从来就不存在所谓的“引用传递”,从来就只有一种变量传递方式,那就是值传递。因为引用传递的前提是存在“引用变量”,但是Golang中从来就没有出现过所谓的“引用变量”,所以也就不可能存在引用传递这种变量传递的方式。引用类型首先,Golang的基本数据类型是值类型,比如整数、浮点、字符串、布尔、数组及错误类型,它们本质上是原始类型,也就是不可改变的,所以对它们进行操作,一般都会返回一个新创建的值,所以把这些值传递给函数时,其实传递的是一个值的拷贝副本,这一点,基本没啥争议。而引用类型指的是它的修改动作可以影响到任何引用到它的变量。在Go语言中,引用类型有切片(slice)、
1. 编程语言1.1. 仍然是一门语言1.1.1. 以最清晰、最容易理解的方式传递信息1.2. 代码的易读性和易理解性在软件中的重要性甚至更胜一筹2. 领域特定语言DSL2.1. 为了解决某个特定业务领域问题的一种自定义语言2.1.1. 一种小型语言2.1.2. 大多都不通用2.1.3. 为某个特定领域定制化而生2.2. 流畅式(fluentstyle)2.2.1. 链接(chaining)方法2.3. 别的底层实现细节都应该被隐藏2.3.1. 以这种方式设计的DSL才是一个用户友好的DSL2.4. 产生原因2.4.1. 沟通为王2.4.1.1. 代码应该能清晰地表达它的意图2.4.1.2.
1. 编程语言1.1. 仍然是一门语言1.1.1. 以最清晰、最容易理解的方式传递信息1.2. 代码的易读性和易理解性在软件中的重要性甚至更胜一筹2. 领域特定语言DSL2.1. 为了解决某个特定业务领域问题的一种自定义语言2.1.1. 一种小型语言2.1.2. 大多都不通用2.1.3. 为某个特定领域定制化而生2.2. 流畅式(fluentstyle)2.2.1. 链接(chaining)方法2.3. 别的底层实现细节都应该被隐藏2.3.1. 以这种方式设计的DSL才是一个用户友好的DSL2.4. 产生原因2.4.1. 沟通为王2.4.1.1. 代码应该能清晰地表达它的意图2.4.1.2.
如果说Golang是静态语言中的皇冠,那么,Goroutine就是并发编程方式中的钻石。Goroutine是Go语言设计体系中最核心的精华,它非常轻量,一个Goroutine只占几KB,并且这几KB就足够Goroutine运行完,这就能在有限的内存空间内支持大量Goroutine协程任务,方寸之间,运筹帷幄,用极少的成本获取最高的效率,支持了更多的并发,毫无疑问,Goroutine是比Python的协程原理事件循环更高级的并发异步编程方式。GMP调度模型(Goroutine-Machine-Processor)为什么Goroutine比Python的事件循环高级?是因为Golang的调度模型G
如果说Golang是静态语言中的皇冠,那么,Goroutine就是并发编程方式中的钻石。Goroutine是Go语言设计体系中最核心的精华,它非常轻量,一个Goroutine只占几KB,并且这几KB就足够Goroutine运行完,这就能在有限的内存空间内支持大量Goroutine协程任务,方寸之间,运筹帷幄,用极少的成本获取最高的效率,支持了更多的并发,毫无疑问,Goroutine是比Python的协程原理事件循环更高级的并发异步编程方式。GMP调度模型(Goroutine-Machine-Processor)为什么Goroutine比Python的事件循环高级?是因为Golang的调度模型G
事实上,泛型才是Golang1.18最具特色的所在,但为什么我们一定要拖到后面才去探讨泛型?类比的话,我们可以想象一下给小学一年级的学生讲王勃的千古名篇《滕王阁序》,小学生有多大的概率可以理解作者的青云之志以及壮志难酬的愤懑心情?恐怕很难罢,是的,如果对Golang的强类型语法没有一段时间的体验期,就很难理解泛型这种“反”静态语言概念。基本概念什么是泛型?泛型泛型,顾名思义,泛用的类型,说白了,就是在静态类型语言环境使用动态类型语言的特性:packagemainimport( "fmt")funcsum(astring,bstring)string{ s:=a+b returns}funcma
事实上,泛型才是Golang1.18最具特色的所在,但为什么我们一定要拖到后面才去探讨泛型?类比的话,我们可以想象一下给小学一年级的学生讲王勃的千古名篇《滕王阁序》,小学生有多大的概率可以理解作者的青云之志以及壮志难酬的愤懑心情?恐怕很难罢,是的,如果对Golang的强类型语法没有一段时间的体验期,就很难理解泛型这种“反”静态语言概念。基本概念什么是泛型?泛型泛型,顾名思义,泛用的类型,说白了,就是在静态类型语言环境使用动态类型语言的特性:packagemainimport( "fmt")funcsum(astring,bstring)string{ s:=a+b returns}funcma
众所周知,Golang的作用域相对严格,数据之间的通信往往要依靠参数的传递,但如果想在多个协程任务中间做数据通信,就需要通道(channel)的参与,我们可以把数据封装成一个对象,然后把这个对象的指针传入某个通道变量中,另外一个协程从这个通道中读出变量的指针,并处理其指向的内存对象。通道的声明与创建packagemainimport"fmt"funcmain(){ varachanint ifa==nil{ fmt.Println("通道是空的,不能使用,需要先创建通道") a=make(chanint) fmt.Printf("数据类型是:%T",a) }}这里注意,通道声明之后还需要