Go语言中文网 为您找到相关结果 348

k8s与网络--Flannel源码分析

前言 之前在k8s与网络--Flannel解读一文中,我们主要讲了Flannel整体的工作原理。今天主要针对Flannel v0.10.0版本进行源码分析。首先需要理解三个比较重要的概念: 网络(Network):整个集群中分配给 flannel 要管理的网络地址范围 子网(Subnet):flannel 所在的每台主机都会管理 network 中一个子网,子网的掩码和范围是可配置的 后端(Backend):使用什么样的后端网络模型,比如默认的 udp,还是 vxlan 等 源码分析 整体的代码组织如下: 除了可执行文件的入口 main.go之外,有backend,network,pkg和subnet这么几个代码相关的文件夹。 network主要是iptables相关。主要是供main函数根...阅读全文

博文 2018-09-21 16:34:46 iyacontrol

Go的函数参数总是传值

依照Go的FQA, 函数的参数传递总是传值的(pass-by-value): As in all languages in the C family, everything in Go is passed by value. That is, a function always gets a copy of the thing being passed, as if there were an assignment statement assigning the value to the parameter. For instance, passing an int value to a function makes a copy of the int, and passing a poin...阅读全文

博文 2017-02-08 12:53:43 smallnest

持续集成之理论篇

本文作者:CODING 用户 - 何健 持续集成 ?——? 大概数周前,突然有学长问我有没有接触过“持续集成”。 在我脑海中,这是一个陌生的词汇,于是百度了解了一番。实际上有开发和部署经验的小伙伴对持续集成不会非常陌生的,特别是那些喜欢自己写 webhook 的小伙伴。这篇文章来聊聊持续集成。 互联网软件从开发到上线,后续迭代更新,已经有一套近乎标准的流程。其中 持续集成(Continuous integration,简称 CI)则是核心流程。像「CODING 持续集成」也直接支持自定义配置流程。 image 概念 大师 Martin Fowler 对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次...阅读全文

博文 2019-02-20 12:34:42 CodingNet

[go]创建可执行文件

实现命令行参数 Flag flag是Go语言的一个标准包,用来处理命令行参数。 代码 package main import "flag" type CmdLine struct { Help bool Host string MASTER string ETCD_ENDPOINTS string VERSION string FLANNEL_VERSION string DNS_IP string } var cmdline CmdLine func init() { flag.BoolVar(&cmdline.Help,"help", false, "show usage") flag.StringVar(&cmdline.Host, "host", "10.100.0.1", "KUB...阅读全文

博文 2019-08-23 10:32:51 Anson

Linux服务器绑定了多个IP的时候如何获取主IP?

当Linux服务器绑定了多个IP地址的时候,在一些特殊应用场合,需要获取主IP,即向外访问的时候IP包上带的IP,一种方式是通过shell脚本获得,另一种方式是通过其它脚本获取,本程序通过golang程序实现了Linux服务器绑定多个IP地址的时候主IP的获取。1、程序源码如下: 2、执行方式如下:安装golang,yum install golang 或者 sudo apt-get install golang执行上面的golang程序,go run masterip.go,即可获取服务器的主IP地址————————————————版权声明:本文为QQ3315939349原创作品请勿转...阅读全文

博文 2020-05-04 13:32:41 服务器小羽3315939349

C++/Golang的数组类型异同

1. 本文章的必要性 C++的存在像一把瑞士军刀,继承了C语言的设计理念——“充分相信程序员”,几乎将所有的底层细节都暴露在外,程序员可以自由控制。在最近详细学习Golang的过程中,发现Golang中的常用结构的设计理念与C++截然不同,为许多常用的操作都提供了语言设计者所认为的“最佳实践”。本文章仅讨论Golang中数组和切片。 2. Golang数组 和 C++数组(Array) 例子 C++ version // const常量长度初始化 // 显然非常量无法作为初始化的长度,因为编译器在编译期无法确定要为此数组分配的内存长度 const int len = 10; int cpp_arr[len]; // 初始化赋值 int cpp_arr[] = {1, 2, 3, 4, 5};...阅读全文

RabbitMQ系列笔记广播模式和路由模式

导语 上一节介绍了简单的工作模式,即一个队列可以被多个消费者进行消费,只有一条消息被送到消费者,采用公平调度的方式,在以往的例子中似乎我们还没用到交换器进行发送消息,我们都知道,往队列里发送消息,是需要用交换器进行分发的消息的,为什么我们没有申请交换器仍然可以发送消息呢?因为在RabbitMQ服务器中,如果不申请交换器,服务器会使用默认的交换器,所以说,交换器在发送消息的时候必不可少,今天我们学习两种交换器分别为fanout(扇形交换器)和direct(直连交换器) 扇形交换器(日志记录器) 特性 分发消息到与之绑定的所有队列,发送消息到交换器时会忽略routing key(路由),我们可以称它为广播消息。 生产者 申请交换器 指定交换器的名字 指定交换器的类型 err = ch.Excha...阅读全文

博文 2019-08-10 16:32:47 陌无崖

关于go中拷贝次数进而影响性能的问题

先来看这么一个例子: ```go var aMap =map[int]int aMap[1]=1 tmp:=aMap[1] testMap1(tmp) testMap2(aMap[1]) ``` 假设testMap1和testMap2的功能都是拿到参数之后打印一下参数值,那么到在他们打印前,testMap1完成这个动作进行了两次拷贝,第一次拷贝是tmp:=aMap[1],第二次拷贝是tmp到参数值。testMap2只需要一次拷贝。那么单从代码性能来看,肯定不应该用tmp:=aMap[1]这种方式去调用testMap。 那么我们再看go1.9中的sync.Map,我需要获取map中的value需要调用其Load方法,那么这肯定会产生一次拷贝 即 tmp,_:=syn...阅读全文

go web编程——路由与http服务

本文主要讲解go语言web编程中的路由与http服务基本原理。首先,使用go语言启动一个最简单的http服务:package main import ( "log" "net/http" ) func main() { http.HandleFunc("/", sayHello) log.Println("server running...") log.Fatal(http.ListenAndServe("localhost:4000", nil)) } func sayHello(writer http.ResponseWriter, req *http.Request) { writer.Write([]byte("hello world!")) }编译,运行,浏览器访问 http://...阅读全文

博文 2019-12-19 15:17:32 JetWu

Golang语言中的interface是什么(下)

interface接口还可以作为函数参数,因为interface的变量可以持有任意实现该interface类型的对象,我们可以通过定义interface参数,让函数接受各种类型的参数。 判断interface变量存储的元素的类型,目前常用的有两种方法:Comma-ok断言和switch测试。 ``` /** * interface接口作为函数参数 * 判断interface变量存储的元素的类型 */ package main import ( "fmt" "strconv" ) // 定义Human对象 type Human struct { name string age int phone string } // 定义空接口 type Element interface{} // 定义切...阅读全文

博文 2019-05-06 19:22:39 frankphper

golang gorilla/mux设置静态目录

发现网上都是类似下面的代码 s := "/Users/golang/golang"; http.Handle("/static/",http.StripPrefix("/static/",http.FileServer(http.Dir(s)))) 经过mux设置就是如下代码 router := mux.NewRouter().StrictSlash(true) s := "/Users/golang/golang"; router.Handle("/static/",http.StripPrefix("/static/",http.FileServer(http.Dir(s)))) 其实这样并不能访问static目录下的文件,包括下载。访问/static/会返回static目录下的文件结构...阅读全文

博文 2018-12-28 12:34:43 鹅鹅鹅_

003_go启动httpServer

一、 golang中开发http服务,可以用net/http包提供的功能。net/http包提供了非常全的功能,并且启动的http服务也非常稳定和高效,完全可以用在生产环境中。 package main import ( "fmt" "log" "net/http" ) // w表示response对象,返回给客户端的内容都在对象里处理 // r表示客户端请求对象,包含了请求头,请求参数等等 func index(w http.ResponseWriter, r *http.Request) { // 往w里写入内容,就会在浏览器里输出 fmt.Fprintf(w, "Hello golang http!") } func main() { // 设置路由,如果访问/,则调用index方法 ...阅读全文

博文 2018-06-02 17:30:00 arun-python

Go中什么时候函数参数按值传递?

Go中什么时候函数参数按值传递? C语言系列的所有语言,函数的参数总是按值传递也就是说函数总能得到参数的副本,就像有一个赋值语句将值分配给参数意义。 其实指针传递也是赋值一个指针的副本,不是他指向的数据。所以你能在函数里面通过指针改变数据的值就是这个原因。因为指针是一个指向数据的地址,副本还是这个地址。 有两个比较特殊的数据结构就是 Map 和 Slice。它们的行为和指针很像,它们包含一个指向基础数据的一个指针,可以查看深入理解 Slice。所以 Map 和 Slice 作为参数的时候,不会复制他们所指向的数据,而且在函数中可以直接改变数据。 如果函数的参数是一个 interface ,interface 值包含 struct 将会复制整个 struct,如果包含的是指针,那也不会拷贝指针...阅读全文

博文 2019-10-31 21:04:26 _西门吹牛

golang模板语法简明教程(后面有福利哦)

template是go 语言web开发中必不可少的,特此记录下来: 【模板标签】 模板标签用"{{"和"}}"括起来 【注释】 {{/* a comment */}} 使用“{{/*”和“*/}}”来包含注释内容 【变量】 {{.}} 此标签输出当前对象的值 {{.Admpub}} 表示输出Struct对象中字段或方法名称为“Admpub”的值。 当“Admpub”是匿名字段时,可以访问其内部字段或方法,比如“Com”:{{.Admpub.Com}} , 如果“Com”是一个方法并返回一个Struct对象,同样也可以访问其字段或方法:{{.Admpub.Com.Field1}} {{.Method1 "参数值1" "参数值2"}} 调用方法“Method1”,将后面的参数值依次传递给此方法,...阅读全文

博文 2017-09-02 07:30:03 ldyblogs

DockOne技术分享(十八):一篇文章带你了解Flannel

【编者的话】Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。 第一部分:Flannel介绍Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。 在Kubernetes的网络模型中,假设了每个物理节点应该具备一段“属于同一个内网IP段内”的“专用的子网IP”。例如: 节点A:10.0.1.0/24 节点B:10.0.2....阅读全文

博文 2017-06-25 15:01:11 FanLin

纠结COOKIE问题

想封装个cookie 3个函数 ```go func setCookie(cookieName,cookieValue string)string{ //实现根据参数设置COOKIE } func readCookie(getCookName)string{ //实现获取制定的COOKIE的VALUE } func delCookie(delCookieName)string{ //实现根据制定cookie名字删除制定的COOKIE } ``` 没有思路!谁有代码 分享一份! 看了网上例子 需要用到 http.SetCookie(但是这里需要 w http.ResponseWriter) 但是用了这个又无法实现封装函数了 不知道思路了 ...阅读全文

记一次golang slice作为函数参数调用时的坑

场景:需要删除slice中第一个元素 stackoverflow上给出解决办法: Where a is the slice, and i is the index of the element you want to delete: a = append(a[:i], a[i+1:]...) ... is syntax for variadic arguments in Go. 经测试有效: s := []byte("helloworld") s = append(s[:0], s[1:]...) fmt.println(string(s))//输出结果为:elloworld 但是当我用函数调用的方式来删除slice中一个元素时,出现了非预期的现象: s := []byte("hellowo...阅读全文

博文 2020-02-20 19:32:51 舒小贱

golang chanel

golang 推荐通过消息来共享内存,而不是通过共享内存来通信 chanel 是一等公民可以作为函数参数,函数返回值 chanel 必须有接受者,否则会deadlock func worker(id int, c chan int) { fmt.Println(123) // for n := range c { // fmt.Printf("Worker %d received %c\n", // id, n) // } } func chanDemo() { channel := make(chan int,3) go worker(0, channel) channel <- 'a' + 0 channel <- 'a' + 1 channel <- 'a' + 2 channel <...阅读全文

参考Laravel制作基于golang的路由包

## 概述 最近在开发自己的 Web 框架 [Bingo](https://github.com/silsuer/bingo), 也查看了一些市面上的路由工具包,但是都有些无法满足我的需求, 例如,我希望获得一些 `Laravel` 框架的特性: - 快速的路由查找 - 动态路由支持 - 中间件支持 - 路由组支持 而市面上最快的就是 `httprouter` ,这里本来几个月前我改造过一次: [改造httprouter使其可以支持中间件](http://silsuer.cn/2018/04/19/bingo-httprouter/),但是那时是耦合在`bingo`框架中的,并且中间件不支持拦截,在这里我需要将其抽出来制作出一个第三方包,可以直接引用,无需依赖 `Bingo` 框架 所以我依...阅读全文

博文 2018-10-28 01:03:03 silsuer

go-graphql 自定义 Scalar

学习笔记,写这篇笔记时才刚入门golang,希望各路大神多多指点。 场景 假设有一个 Role 模型 type Role struct { Id int Name string Status RoleStatus } 其中RoleStatus类型表示角色的状态: type RoleStatus int const ( RDefault RoleStatus = iota RPublish RBlock RDeleted ) 所以数据库在存储角色状态时是Int型,而使用graphql开发接口想以string类型输出状态 的名称,此时就可以利用自定义Scalar功能。 下面这个map用于存储状态名称值和RoleStatus之间的映射: type RSMapType map[interface{}...阅读全文

博文 2019-07-13 17:32:40 SasukeBo

如下方法执行得不到想要的结果,大概是想知道不定参数表怎么传参?

``` func All(str string,t ...interface{}) { sprintf := fmt.Sprintf(str,t); fmt.Println(sprintf) } func main() { All("123456%s%d","qqq",123) fmt.Print(fmt.Sprintf("123456%s%d","qqq",123)) } ``` >先后输出如下 123456[qqq %!s(int=123)]%!d(MISSING) 123456qqq123 >不定参数方法的在参数传入的时候,应该类似传一个数组进去?大约应该是要参数压栈len([])次? >貌似Java和Go都有这样的问题(我也就会这两...阅读全文

Typescript --- 基础入门

Typescript 给 JavaScript 带来了强大的类型系统 类型语言: duck typing 所谓看起来像鸭子的就是鸭子类型;比如: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子 package main import ( "fmt" ) type ISayHello interface { SayHello() } type Person struct {} func (person Person) SayHello() { fmt.Printf("Hello!") } type Duck struct {} func (duck Duck) SayHello() { fmt.Printf("ga ga ga!") } func gree...阅读全文

博文 2019-04-19 11:34:44 Joah_l

轻松理解Go函数传参内幕

一、内置类型作为参数传递 首先要明确一点:golang语言中是没有引用传递的 先上结论: golang的所有内置类型()作为函数参数传递都是传值的方式,需要注意的是:array、slice和map作为函数参数时也是传值,但是如果对结构内元素进行的修改,修改的是原数据。如果是对其进行整体赋值,则不会修改原数据,相当于拷贝出一个新的临时变量。通过传递指针参数实现修改原数据。 Go内置基础类型如下 布尔型:bool 整型:int int64 int32 int16 int8 uint8 uint16 uint32 uint64 uint 浮点型:float32 float64 复数型:complex64 complex128 字符串:string 字符型:rune 错误型:error 未命名类型:...阅读全文

Go 语言学习笔记 -第6章

Go 语言学习笔记 -第6章 Go 语言学习笔记 -第6章 方法 方法 package main import "fmt" //结构体 type Person struct { Name string } //给A类型绑定一个方法 //小写p 表示哪个Pesrson变量调用, 就是它的副本 //小写p(最好写person) func (p Person) test() { p.Name = "jack" fmt.Println("Person() name=", p.Name) } func main() { var p Person p.Name = "tom" p.test() //调用方法 fmt.Println("main() name=", p.Name) ...阅读全文

博文 2020-01-29 14:32:37 王知晓

ECS控制台实例搜索的优化与改进

摘要: 搜索功能是控制台非常重要的功能,承载着实例管理入口的作用,应该好用,快速和准确。然而,ECS控制台实例列表的搜索功能经常被吐槽不好用,痛点主要有以下三点: 每次搜索之前需要选择搜索类型,非常繁琐。 过滤条件太多了, 搜索框,tag,表格过滤,高级搜索,搜索条件不统一 不支持模糊搜索 从已知的这些问题出发,ECS控制台将对搜索功能,以及整个实例管理的用户体验部分做长期的优化和改进。 搜索功能是控制台非常重要的功能,承载着实例管理入口的作用,应该好用,快速和准确。然而,ECS控制台实例列表的搜索功能经常被吐槽不好用,痛点主要有以下三点: 1.每次搜索之前需要选择搜索类型,非常繁琐。 2.过滤条件太多了, 搜索框,tag,表格过滤,高级搜索,搜索条件不统一 3.不支持模糊搜...阅读全文

glang 多种http请求

func HttpGet(url string) ([]byte, error) { resp, err := http.Get(url) if err != nil { // handle error return nil, err } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // handle error return nil, err } return body, err } func HttpPostForm(queryUrl string, queryData map[string]string) ([]byte, error) { // ) if len(quer...阅读全文

博文 2019-12-23 11:32:42 Cazy

golang项目中对以前方法新增参数

问题:对于golang项目中,随着项目的迭代,对于某个方法,如果原有的参数不够用,需要添加新的参数,又不想修改所有调用的敌法。如何做才能更好的扩展?这里提供一种方法:注:如果能不新增参数最好不要新增1、原有方法,例如:func Mytest(arg1 string, arg2 int64){ fmt.Println(arg1, arg2) }2、添加参数 args ...interface{} , 注:添加使用三个点的参数,以前的方法是不需要修改的,不会报错,相当于三个点参数args默认值是interface{}的切片。func Mytest(arg1 string, arg2 int64, args ...interface{}){ fmt.Println(arg1, arg2, args...阅读全文

博文 2019-11-13 17:30:12 lobo

golang slice递归反转遇到的坑

需求:对字符串用递归的方式进行反转,比如helloworld反转结果为dlrowolleh。代码为: s := []byte("helloworld") reverseString(s) fmt.Println(string(s)) func reverseString(s []byte) { l := len(s) if l <= 1 { return } else { last := s[l-1] s = s[:l-1] reverseString(s) s = append([]byte{last}, s...) fmt.Println(string(s)) fmt.Println("<<<<<<<<<") } } 但是结果不符合预期: eh <<<<<<<<< lhe <<<<<<<...阅读全文

博文 2020-02-20 19:32:50 舒小贱

golang flag 命令行参数解析

基础例子 // 注册参数 port := flag.Int("p", 8080, "server Port") // 解析参数, 模块方法将使用 os.Args[1:] 做参数解析 flag.Parse() fmt.Printf("server port:%d", port) 基础类型 Flag 单条flag信息 type Flag struct { Name string // flag在命令行中的名字 Usage string // 帮助信息 Value Value // 要设置的值 DefValue string // 默认值(文本格式),用于使用信息 } FlagSet flag 设置对象 type FlagSet struct { // Usage函数在解析flag出现错误时会被调...阅读全文

博文 2019-07-30 03:32:40 直立猿

go语言:函数参数传递详解

参数传递是指在程序的传递过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程。比较常见的参数传递有:值传递,按地址传递参数或者按数组传递参数。 1、常规传递 使用普通变量作为函数参数的时候,在传递参数时只是对变量值得拷贝,即将实参的值复制给变参,当函数对变参进行处理时,并不会影响原来实参的值。 例如: package main import ( "fmt" ) func swap(a int, b int) { var temp int temp = a a = b b = temp } func main() { x := 5 y := 10 swap(x, y) fmt.Print(x, y) } 输出结果:5 10 传递给swap的是x,y的值得拷贝...阅读全文

博文 2019-04-17 21:34:40 QFdongdong

003_go启动httpServer

一、 golang中开发http服务,可以用net/http包提供的功能。net/http包提供了非常全的功能,并且启动的http服务也非常稳定和高效,完全可以用在生产环境中。 package main import ( "fmt" "log" "net/http" ) // w表示response对象,返回给客户端的内容都在对象里处理 // r表示客户端请求对象,包含了请求头,请求参数等等 func index(w http.ResponseWriter, r *http.Request) { // 往w里写入内容,就会在浏览器里输出 fmt.Fprintf(w, "Hello golang http!") } func main() { // 设置路由,如果访问/,则调用index方法 ...阅读全文

博文 2018-06-02 16:30:00 arun-python

Go36-40,41-io包中的接口和工具

字符操作和字节操作类型的接口 首先,了解一下strings.Builder、strings.Reader和bytes.Buffer这三个数据类型中实现的接口。 strings.Builder类型 strings.Builder类型主要用于构建字符串,它的指针类型实现的接口有: io.Writer io.ByteWriter fmt.Stringer io.stringWriter,io包的包级私有接口 strings.Reader类型 strings.Reader类型主要用于读取字符串,它的指针类型实现的接口有: io.Reader io.ReaderAt io.ByteReader io.RuneReader io.Seeker io.ByteScanner,这个是io.ByteReade...阅读全文

博文 2019-02-05 00:35:13 骑士救兵

golang 命令行开发基础

os.Args获取命令行参数 os.Args参数列表 0 :程序路径(go run 运行 0 为临时工作目录的路径,编译后运行,0 二进制文件名) 1 第一个参数 2 第二个参数... ... len(os.Args) 参数数量 示例 /** * @Author : jinchunguang * @Date : 19-11-4 上午10:37 * @Project : tcp-chat */ package main import ( "fmt" "os" ) func main() { // 获取命令行参数 fmt.Println("命令行参数数量:", len(os.Args)) for k, v := range os.Args { fmt.Printf("args[%v]=[%v]\...阅读全文

博文 2019-11-04 15:33:23 aside section._1OhGeD

golang project exp02

谷歌SRE那本书中所讲到一点,就是搞业务运维或说SRE,最头疼的就是工作量随着服务规模的增长线性增加。其实个人觉得这一点放到开发中也是一样的,随着需求的增加,services、views目录下的文件越来越多,编写它们的时候都是copy&paste,维护它们的时候也是一样的任务量复制。 就其根源,个人觉得就是我们所谓“开发”对工程规范的漠视,导致维护过程中问题的累积。这里也记录一点过去积累的好的编码习惯(针对golang而言) 1,创建一个较为复杂的对象时,把New函数参数可选 比如说 type MyOperation struct { keyone string valone int someConfig bool someConfig2 bool storage *db.Connectio...阅读全文

博文 2019-10-25 20:32:45 aside section._1OhGeD

gin 源码阅读(二)-- 路由和路由组

上次我们说到 [gin 的启动过程及实现](),今天来细讲 gin 的路由。 用法 还是老样子,先从使用方式开始: func main() { r := gin.Default() r.GET("/hello", func(context *gin.Context) { fmt.Fprint(context.Writer, "hello world") }) r.POST("/somePost", func(context *gin.Context) { context.String(http.StatusOK, "some post") }) r.Run() // 监听并在 0.0.0.0:8080 上启动服务 } 平时开发中,用得比较多的就是 Get 和 Post 的方法,上面简单的写了...阅读全文

博文 2020-04-25 19:32:40 若鱼治水

golang常用库:gorilla/mux,http路由库使用

一:golang自带路由介绍 golang自带路由库 http.ServerMux ,实际上是一个 map[string]Handler,是请求的url路径和该url路径对于的一个处理函数的映射关系。这个实现比较简单,有一些缺点: 不支持参数设定,例如/user/:uid 这种泛型类型匹配 无法很友好的支持REST模式,无法限制访问方法(POST,GET等) 也不支持正则 二:gorilla/mux路由 github地址:github.com/gorilla/mux www.gorillatoolkit.org/pkg/mux github.com/gorilla/mux… 上面所指出来的glang自带路由的缺点,gorilla/mux 都具备,而且还兼容 http.ServerMux。除了...阅读全文

博文 2020-06-07 12:34:23 九卷

Golang从入门到精通(四):Golang变量定义和初始化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangxianghehe/article/details/78781914 变量命名原则 Go语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。 但是字母不限于英文字母,所有UTF-8字符都可以。 声明和初始化方式 1.使用var关键字 声明和初始化变量的一般形式是使用 var 关键字,例如: var a int = 9 注意,Go语言变量类型放在变量名之后! 如果上面的代码段没有初始化值,那么变量就会被初始化为对应类型的零值。 var a int 这个代码片段声明了一个int类型变量a,并把a初始化为int零值,即0。 2.忽略类型 这种声明和初始化变量的方式相比于第一种,就是省...阅读全文

博文 2019-02-01 11:31:36 xiangxianghehe

Golang slice(切片) 和 array 区别

Autor: PalappleDate: 2020-03-06tag: Array,slice,Golang 最近在学习Golang,发现有两个定义数组的数据结构,有点儿困惑,自己做个对比,也希望给大家一点启示 数据结构 array类型 值引用类型 var variable_name [SIZE] variable_type slice类型 slice是一个引用类型,是一个动态的指向数组切片的指针 slice是可以动态增长的数组 var identifier []type 创建方法 var slice1 []type = make([]type, len) 也可以简写为 slice1 := make([]type, len) 也可以指定容量,其中capacity为可选参数。 make([]T...阅读全文

博文 2020-03-20 14:33:05 palapple

Go 每日一库之 validator

简介 今天我们来介绍一个非常实用的库——validator。validator用于对数据进行校验。在 Web 开发中,对用户传过来的数据我们都需要进行严格校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。 快速使用 先安装: $ go get gopkg.in/go-playground/validator.v10 复制代码后使用: package main import ( "fmt" "gopkg.in/go-playground/validator.v10" ) type User struct { Name string `validate:"min=6,max=10"` Age int `validate:"min=1,max=100"` } f...阅读全文

博文 2020-04-06 00:34:22 darjun

golang defer

The arguments to the deferred function (which include the receiver if the function is a method) are evaluated when the defer executes, not when the call executes 原文 被defer的方法的参数,是在defer声明的时候就准备好的。如果方法带receiver,则receiver也是在defer声明的时候就准备好的。 例1: for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } output: 4 3 2 1 0 例2: func trace(s string) string { f...阅读全文

博文 2020-03-24 22:32:44 舒小贱

Golang之旅2-变量定义

Go语言中变量定义 var关键字定义 初始值默认是类型的初始值 同时定义不同类型的变量,集中定义 var声明的变量可以放在函数体内或者包内 var关键字可以省略 短变量定义 短变量声明是通过:=实现的,只能放在函数体内 短变量声明和var关键字不能同时使用 package main import "fmt" // 变量定义 // 使用var定义:同时定义多个不同的变量;可以放在函数体内或者包内; // 通过var集中定义(放在括号内);var有时候能够省略,编译器自动识别类型; // 使用短变量声明 := 只能使用在函数体内部;短变量声明和var不能同时使用 //var aa = 3 //var bb = "kkk" //var ss = true var ( aa = 3 bb = "kk...阅读全文

博文 2019-10-09 00:32:44 aside section ._1OhGeD

golang启动一个简单的http服务

golang中开发http服务,可以用net/http包提供的功能。net/http包提供了非常全的功能,并且启动的http服务也非常稳定和高效,完全可以用在生产环境中。 package main import ( "fmt" "log" "net/http" ) // w表示response对象,返回给客户端的内容都在对象里处理 // r表示客户端请求对象,包含了请求头,请求参数等等 func index(w http.ResponseWriter, r *http.Request) { // 往w里写入内容,就会在浏览器里输出 fmt.Fprintf(w, "Hello golang http!") } func main() { // 设置路由,如果访问/,则调用index方法 htt...阅读全文

博文 2020-01-04 09:32:41 灰侠_bf44

使用 gorilla/mux 增强 Go HTTP 服务器的路由能力

今天这篇文章我们将会为我们之前编写的HTTP服务器加上复杂路由的功能以及对路由进行分组管理。在之前的文章《深入学习用 Go 编写HTTP服务器》中详细地讲了使用net/http进行路由注册、监听网络连接、处理请求、安全关停服务的实现方法,使用起来非常方便。但是net/http有一点做的不是非常好的是,它没有提供类似URL片段解析、路由参数绑定这样的复杂路由功能。好在在Go社区中有一个非常流行的gorilla/mux包,它提供了对复杂路由功能的支持。在今天这篇文章中我们将探究如何用gorilla/mux包来创建具有命名参数、GET/POST处理、分组前缀、限制访问域名的路由。 安装gorilla/mux包 我们在之前写的HTTP服务的代码根目录,使用go get命令从GitHub安装软件包,如...阅读全文

博文 2020-02-06 10:34:19 kevinyan

leetcode_30

Golang: 思路:这题应该用map做会简单一些,但效率不会特别理想,这里补充个前缀树做法,当然,我使用前缀树其实是希望把它写成AC自动机的,这个留到下次吧。 代码如下: type Trie struct { ending bool next [26]*Trie } /** Initialize your data structure here. */ func Constructor() Trie { return Trie{} } /** Inserts a word into the trie. */ func (this *Trie) Insert(word string) { temp:=this for _,v:=range word { nxt:=v-'a' if temp....阅读全文

博文 2020-03-17 09:32:47 淳属虚构

golang结构体

定义 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 结构体的定义 结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下: type struct_variable_type struct { member definition member definition ... member definition } 结构体声明格式: variable_name := structure_variable_type {value1, value2...valuen} 或 variable_name := structure_variable_type { key1: v...阅读全文

博文 2020-01-01 02:32:54 程序小白菜