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

9.指针

Go语言基础之指针 | Golang 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。 Go语言中的指针 任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。 比如,“永远不要高估自己”这句话是我的座右铭,我想把它写入程序中,程序一启动这句话是要加载到内存(假设内存地址0x123456),我在程序中把这段话赋值给变量A,把内存地址赋值给变量B。这时候变量B就是一个指针变量。通过变量A和变量B都能找到我的座右铭。 Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号:&(取地址)和*(根据地址取...阅读全文

博文 2020-04-05 20:33:05 雪上霜

golang学习笔记(一)——golang基础和相关数据结构

小白前端一枚,最近在研究golang,记录自己学习过程中的一些笔记,以及自己的理解。 go中包的依赖管理 go中的切片 byte 和 string go中的Map go中的struct结构体 go中的方法 go中的interface接口 interface{} 原文在我的博客中:https://github.com/forthealll... 欢迎star~ 1、go中包的依赖管理 首先要了解的是GOPATH的含义,GOPATH是go命令依赖的重要变量,可以通过: go env 来查看相应的开发环境中GOPATH的值,也可以通过export GOPATH指定: export GOPATH = /usr/local/go 指定GOPATH目录后, GOPATH目录包含了3个子目录: src存放...阅读全文

博文 2018-12-26 15:34:44 yuxiaoliang

go 学习笔记之go是不是面向对象语言是否支持面对对象编程?

面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对象的编程风格给开发者带来了极大的便利性,解放了劳动,松耦合,高内聚也成为设计的标准,从而让我们能够更加愉快地复制粘贴,做代码的搬运工,很多第三方工具开箱即用,语义明确,职责清晰,这都是面向对象编程的好处! Go 语言也是来源于 C 语言,不知道你是否也会好奇 Go 语言是否支持面向对象这种编程风格呢? 准确的说,Go 既支持面向对象编程又不是面向对象语言! 是也不是,难道像是薛定谔的猫一样具有不确定性? 其实这个答案是官方的回答,并不是我个人凭空杜撰而来的,如需了解详情可参考 Is Go an ...阅读全文

博文 2019-08-21 22:32:50 雪之梦技术驿站

《Go 语言程序设计》读书笔记(四)接口

接口概述 一个具体的类型可以准确的描述它所代表的值并且展示出对类型本身的一些操作方式就像数字类型的算术操作,切片类型的索引、附加和取范围操作。总的来说,当你拿到一个具体的类型时你就知道它的本身是什么和你可以用它来做什么。 在Go语言中还存在着另外一种类型:接口类型。接口类型是一种抽象的类型。它不会暴露出它所代表的对象的内部结构和这个对象支持的基础操作的集合;它只会展示出自己的方法。也就是说当你有看到一个接口类型的值时,你不知道它是什么,唯一知道的就是可以通过它的方法来做什么。 fmt.Printf它会把结果写到标准输出和fmt.Sprintf它会把结果以字符串的形式返回,实际上,这两个函数都使用了另一个函数fmt.Fprintf来进行封装。fmt.Fprintf这个函数对它的计算结果会被怎么...阅读全文

博文 2019-12-29 10:32:38 Kevin

【环境篇】golang环境变量二三事(二)

继续上篇文章的学习,今天来看看其他的环境变量。 GOEXE The executable file name suffix (".exe" on Windows, "" on other systems). 编译后的二进制文件后缀,在Windows平台是".exe",在其他平台是""。 GOFLAGS 这个变量看起来比较陌生,用的不多,我们看看文档里是怎么解释的: A space-separated list of -flag=value settings to applyto go commands by default, when the given flag is known bythe current command. Each entry must be a standalone ...阅读全文

博文 2020-01-17 11:33:44 wx5e1abbbb0a5e5

【Golang】通道channel

Java的并发:基于线程 Golang的并发:基于协程goroutine 并发会导致资源竞争:加锁 防止资源竞争的三种方式: 原子函数:atomic.LoadInt32,atomic.StoreInt32 互斥锁:mutex sync.Mutex, mutex.Lock(), mutex.Unlock() 通道:channel 通道Channel 声明 使用chan声明通道,并指明需要发送和接收的数据类型。例如: ch := make(chan int) 声明通道可以有第二个参数,用来指定通道大小。 ch := make(chan int) ch := make(chan int, 0) ch := make(chan int, 2) 第一种和第二种等价,都为无缓冲通道。第三种为有缓冲通道,...阅读全文

博文 2020-03-23 19:32:48 冉小妹Ran

Go for Ruby developers(译)

文 如果你是一个 Ruby 开发者, 并且想要开始使用 Go, 这篇文章可以帮助你入门. 在这篇文章里, 我们会以 Ruby 的视角一探 Go 的那些很棒的特性. Ruby is a dynamic, interpreted, reflective, object-oriented, general-purpose programming language. It was designed and developed in the mid-1990s by Yukihiro “Matz” Matsumoto in Japan. According to the creator, Ruby was influenced by Perl, Smalltalk, Eiffel, Ada, and ...阅读全文

博文 2019-03-29 02:34:40 冲云直树

go 学习笔记之go是不是面向对象语言是否支持面对对象编程?

面向对象编程风格深受广大开发者喜欢,尤其是以 C++, Java 为典型代表的编程语言大行其道,十分流行! 有意思的是这两中语言几乎毫无意外都来源于 C 语言,却不同于 C 的面向过程编程,这种面向对象的编程风格给开发者带来了极大的便利性,解放了劳动,松耦合,高内聚也成为设计的标准,从而让我们能够更加愉快地复制粘贴,做代码的搬运工,很多第三方工具开箱即用,语义明确,职责清晰,这都是面向对象编程的好处! Go 语言也是来源于 C 语言,不知道你是否也会好奇 Go 语言是否支持面向对象这种编程风格呢? 准确的说,Go 既支持面向对象编程又不是面向对象语言! 是也不是,难道像是薛定谔的猫一样具有不确定性? 其实这个答案是官方的回答,并不是我个人凭空杜撰而来的,如需了解详情可参考 Is Go an ...阅读全文

博文 2019-08-22 00:04:40 雪之梦技术驿站

DAY6 GOLANG (六) 数组与切片

数组的定义 var 数组名 [ 数组大小]数据类型 var a [5]int 数组必须定义长度,且一个数组不能动态改变长度。不要担心这个限制,切片(slice)可以弥补这个不足 四种初始化数组的方式 var numArr01 [3]int =[3]int{1, 2, 3} var numArr02 = [3]int{5, 6, 7} //这里的 [...]是规定的写法 var numArr03 = [...]int{8, 9 ,10} var numArr04 = [...]int{1: 800, 0: 900, 2:999} 数组是值类型 在 Go 中数组是值类型而不是引用类型。这意味着当数组变量被赋值时,将会获得原数组(:也就是等号右面的数组)的拷贝。新数组中元素的改变不会影响原数组中元...阅读全文

Go语言笔记:变量

变量指向一个内存地址,其中存储了某种类型的值。在静态语言中,此内存存储的变量类型不可变。 Go 中的变量如何声明? Go 变量声明可以指定哪些类型? Go 中如何实现类型的转换和断言? 1. Go 中的变量如何声明 使用 var 关键词声明变量,有以下几种可变形式: 简单的类型声明:var a int 声明并赋初值:var a int = 1 或 var a = 1 同时声明多个变量: var a, b = 1, 2 当声明初始值时,可以不用指定类型,Go 会根据赋值判断并自动定义变量的类型。 以下为变量声明的示例: package main import "fmt" func main() { var a int var b int = 2 var c = 3 var d, e = 4, ...阅读全文

理解Go标准库中的atomic.Value类型

在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地”存储(Store)和加载(Load)任意类型的值。 历史起源 我在golang-dev邮件列表中翻到了14年的这段讨论,有人报告了encoding/gob包在多核机器上(80-core)上的性能问题,认为encoding/gob之所以不能完全利用到多核的特性是因为它里面使用了大量的互斥锁(mutex),如果把这些互斥锁换成用atomic.LoadPointer/StorePointer来做并发控制,...阅读全文

博文 2019-07-08 11:51:39 喵叔没话说

4. 类型

4. 类型 下面是 Go 支持的基本类型: bool 数字类型 int8, int16, int32, int64, int uint8, uint16, uint32, uint64, uint float32, float64 complex64, complex128 byte rune string bool bool 类型表示一个布尔值,值为 true 或者 false。 package main import "fmt" func main() { a := true b := false fmt.Println("a:", a, "b:", b) c := a && b fmt.Println("c:", c) d := a || b fmt.Println("d:", d) ...阅读全文

博文 2019-08-29 11:32:56 泷汰泱

Golang中make与new有何区别?

Golang中make与new有何区别? 一、前言 本文主要给大家介绍了Go语言中函数new与make的使用和区别,关于Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用。 二、变量的声明 var i int var s string ​ 变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值是他们的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。 对于例子中的两种类型的声明,我们可以直接使用,对其进行赋值输出。但是如果我们换成指针类型呢? test1.go package m...阅读全文

博文 2020-03-09 15:36:02 刘丹冰Aceld

好程序员技术文档HTML5开发中js的创建和继承

好程序员技术文档HTML5开发中js的创建和继承,JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。 当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype对象,最后,如果还没有找到,就只能返回undefined。 例如,创建一个Array对象:var arr = [1, 2, 3]; 其原型链是:arr ----> Array.prototype ----> Object.prototype ----> nullArray.prototype定义了indexOf()、shift()等方法,因此你可以在所有的Array对象上直接调用这些方...阅读全文

博文 2019-04-03 16:13:10 hcxy

golang快速入门[2.2]-go语言开发环境配置-macOS

golang快速入门[2.2]-go语言开发环境配置-macOSmacos安装Go语言开发包配置go语言的开发环境的第一步是要在go官网下载页面下载开发包macOS需要下载pkg后缀文件macOS和iOS操作系统Apple软件包使用.pkg扩展名,在内部使用Xar格式Mac OS 的Go语言开发包是 .pkg 格式的,双击我们下载的安装包即可开始安装,一路点击“继续”即可。双击我们下载好的Go语言开发包即可启动安装程序,如下图所示,这是Go语言的用户许可协议,无需管它,直接勾选“I accept …”然后点击“Next”即可。安装包会默认安装在 /usr/local 目录下,如下所示。这个目录的结构遵守 GOPATH 规则,后面的章节会提到这个概念。目录中各个文件夹的含义如下表所示。目录名说...阅读全文

博文 2020-02-07 19:33:10 jonson_jackson

golang中接口的面向对象(一)--多态特征

最近在学习golang,虽然go并不是一个传统意义的面向对象的语言,但是发现接口interface{}这个类型却体现了一些面向对象的特点。 本人也是初学,参考了《Go 零基础编程入门教程》-- “进击的皇虫”大佬的教学。示例代码按我个人的理解稍微有所改动。有什么不妥的地方也请大家不吝赐教。 在学习golang的面向对象之前,我们先来了解一下 方法 method 和 接口 interface{}这两个类型:方法 method : 在Go 语言中,我们可以在一些接收者上定义函数,这里的接收者是 自定义类型或结构体,对应为OOP中的类,这些接收者的函数叫做方法。 方法(method)的声明和函数很相似, 只不过它必须指定接收者: func (t1 T) Func1(参数列表) 返回值类型{ ......阅读全文

博文 2020-05-29 10:33:19 roddger

duck typing

像鸭子走路,像鸭子叫,那么就是鸭子 描述事物外部行为而非内部结构 严格说go属于结构化类型系统,类似duck typing python c++ 中duck typing (只要retriever 具有get方法即可)但是编译运行才知道错误 def download(retriever r): r.get("www.baidu.com") java 中传入参数必须要实现某个接口,不是duck typing 接口定义 download (使用者) retriever(使用者) golang中接口由使用者定义 typpe assertion n, p := reader.Shape() point := p.(*shp.Point) x := point.X y := point.Y 接口变量里...阅读全文

博文 2020-06-08 01:33:14 我真是刚的不像话

Go Modules 详解

文链接:Go Modules 详解 Go 1.11 和 Go 1.12 包含了初步的 Go Modules 支持,且计划在 2019 年 8 月发布的 Go 1.13 会在所有开发过程中默认使用 Go Modules。 Go Modules 是为了提升使用其他开发者代码,即添加依赖项(模块、包)时的体验,也是为了让代码的正确性、安全性得到保障。并且 Go Modules 可以使用 GOPROXY 环境变量来解决中国大陆无法使用 go get 的问题。 所以学习跟 Go Modules 有关的知识是很有必要的。 模式 Go Modules 在 Go 1.11 及 Go 1.12 中有三个模式,根据环境变量 GO111MODULE 定义: 默认模式(未设置该环境变量或 GO111MODULE=a...阅读全文

Django模板语言-2:simple_tag和filter

标签simple_tag: 标签:在HTML中使用{% %}标记 常见的系统内自带的标签:load、for 、if、with、csrf_token、verbatim、 block-endblock\extends\comment-endcomment\cycle(silent)\自定义标签 1、with: 在html里给变量赋值{% with name=obj.group.name%} # 用于长变量赋值 {{name}} # 直接调ip,显示host.name.ip的值 2、csrf_token: 之前在使用form表单时,提示Forbidden:CSRF verification failed. Request aborted, 解决方法1、在settings里注释掉中间件CSRF 解决...阅读全文

博文 2019-10-16 16:03:33 等你的破船

通过 深入对比 Arrays 和 Slices 学习GO

通过 深入对比 Arrays 和 Slices 学习GO 数组定义 package main import ( "fmt" ) func main() { var arr [3]int //int 数组,长度为3 ,并且初始值都为0 fmt.Println(arr) // output:[0 0 0] }复制代码 因为很简单的基础知识,就不一一解释了。 数组使用 package main import ( "fmt" ) func main() { arr := [3]int{12, 78, 50} //int 数组,长度为3 ,并且初始化 fmt.Println(arr) // output:[12 78 50] }复制代码 上面通过简写的方式声明了数组,并且赋值,但并不是需要为所有元素分...阅读全文

博文 2019-11-06 22:04:25 _西门吹牛

Go语言入门(四)Map&函数

map&函数 map类型 map的申明和定义 map是一个key-value的数据结构,是引用类型的数据结构,需要初始化 初始化的时候容量可以定义,也可以不定义 map必须初始化才能使用,否则会panic var a map[key的类型]value的类型 func defineMap() { var user map[string]int = make(map[string]int) user["abc"] = 38 fmt.Printf("user:%v\n",user) a := make(map[string]int) a["jack"] = 1001 a["handsome"] = 1002 a["shark"] = 1003 //根据key获取value fmt.Printf("...阅读全文

博文 2020-03-17 21:33:15 wx5b285b48ed74e

defer ,panic,recover

defer的执行顺序 多个defer出现的时候,它是一个“栈”的关系,也就是先进后出。一个函数中,写在前面的defer会比写在后面的defer调用的晚。 package main import "fmt" func main() { defer func1() defer func2() defer func3() } func func1() { fmt.Println("A") } func func2() { fmt.Println("B") } func func3() { fmt.Println("C") } //输出结果:C B A defer和return的先后顺序 return之后的语句先执行,defer后的语句后执行。 package main import "fmt" f...阅读全文

博文 2020-04-26 13:33:11 普朗tong

23. 一篇文章 说清楚 Go语言里的函数

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。 在 Go 语言中,函数可以分为两种: 带有名字的普通函数 没有名字的匿名函数 由于 Go语言是编译型语言,所以函数编写的顺...阅读全文

博文 2020-05-30 10:32:46 Python编程时光

Go36-4,5,6-变量

上篇 Go语言中的程序实体包括变量、常量、函数、结构体和接口。Go语言是静态类型的编程语言,所以我们在声明变量或常量的时候都需要指定它们类型,或者给予足够的信息以使Go语言能够推导出它们的类型。 声明变量 声明变量的方式: var name string var name = "Adam" name := "Bob" // 短变量声明 第三种短变量声明只能在函数体内部使用。 知识点 类型推断 后两种在声明的同时还进行了赋值,没有显示的指定类型,而是利用了Go的类型推断。 代码重构 我们通常把“不改变某个程序与外界的任何交互方式和规则,而只改变其内部实现”的代码修改方式,叫做对该程序的重构。 代码块 在Go语言中,代码块一般就是一个由花括号括起来的区域,里面可以包含表达式和语句。 Go语言本身...阅读全文

博文 2019-01-04 00:35:19 骑士救兵

Go教程第四篇:数据类型

第四篇:数据类型 这篇文章是我们的《Golang系列教程》的第四篇文章。 下面是Go语言中的基本数据类型: bool Numberic Types int8, int16,int32,int64,int uint8,uint16,uint64,uint float32,float64 complex64,complex128 byte rune bool 布尔类型代表了一个布尔值,它要么是true要么是false。 package main import "fmt" func main() { a := true b := false fmt.Println("a:", a, "b:", b) c := a && b fmt.Println("c:", c) d := a || b fmt....阅读全文

学习使用 Go 的反射

什么是反射 大多数时候,Go中的变量,类型和函数非常简单直接。当需要一个类型、变量或者是函数时,可以直接定义它们: type Foo struct { A int B string } var x Foo func DoSomething(f Foo) { fmt.Println(f.A, f.B) } 复制代码但是有时你希望在运行时使用变量的在编写程序时还不存在的信息。比如你正在尝试将文件或网络请求中的数据映射到变量中。或者你想构建一个适用于不同类型的工具。在这种情况下,你需要使用反射。反射使您能够在运行时检查类型。它还允许您在运行时检查,修改和创建变量,函数和结构体。 Go中的反射是基于三个概念构建的:类型,种类和值(Types Kinds Values)。标准库中的reflect包提供...阅读全文

博文 2020-01-19 12:34:19 kevinyan

Golang之变量去哪儿?

写过C/C++的同学都知道,调用著名的malloc和new函数可以在堆上分配一块内存,这块内存的使用和销毁的责任都在程序员。一不小心,就会发生内存泄露,搞得胆战心惊。切换到Golang后,基本不会担心内存泄露了。虽然也有new函数,但是使用new函数得到的内存不一定就在堆上。堆和栈的区别对程序员“模糊化”了,当然这一切都是Go编译器在背后帮我们完成的。一个变量是在堆上分配,还是在栈上分配,是经过编译器的逃逸分析之后得出的结论。这篇文章,就将带领大家一起去探索逃逸分析——变量到底去哪儿,堆还是栈?什么是逃逸分析以前写C/C++代码时,为了提高效率,常常将pass-by-value(传值)“升级”成pass-by-reference,企图避免构造函数的运行,并且直接返回一个指针。你一定还记得,这...阅读全文

博文 2019-03-02 12:07:25 饶全成

Go开发中的十大常见陷阱[译]

文: The Top 10 Most Common Mistakes I’ve Seen in Go Projects 作者: Teiva Harsanyi 译者: Simon Ma 我在Go开发中遇到的十大常见错误。顺序无关紧要。 未知的枚举值 让我们看一个简单的例子: type Status uint32 const ( StatusOpen Status = iota StatusClosed StatusUnknown ) 复制代码在这里,我们使用iota创建了一个枚举,其结果如下: StatusOpen = 0 StatusClosed = 1 StatusUnknown = 2 复制代码现在,让我们假设这个Status类型是JSON请求的一部分,将被marshalled/unma...阅读全文

博文 2019-08-17 17:04:18 SimonMa

Go 每日一库之 flag

缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态。写博客是一种方式,但不是每天都有想写的,值得写的东西。有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏差,或者细节还没有完全掌握,要去查资料,了解了之后又继续写,如此反复。这样会导致一篇博客的耗时过长。 我在每天浏览思否、掘金和Github的过程中,发现一些比较好的想法,有JS 每日一题,NodeJS 每日一库,每天一道面试题等等等等。https://github.com/parro-it/awesome-micro-npm-packages这个仓库收集 NodeJS 小型库,一天看一个不是梦!这也是我这个系列的灵感。我计划每天学习一个 Go 语言的库,输出一篇介绍型的博文。每天一库当然是理想状态...阅读全文

博文 2020-01-12 23:32:39 darjun

1. 一文搞定Go语言开发环境的搭建

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 1. 下载安装 Go语言 下载地址:golang.google.cn/dl/ 下载完成后,直接双击 msi 文件进行安装,我习惯将软件安装在我的 E 盘下的 Program Files 目录下 后面就是一路点击 Next 即可,直到出现如下界面,安装完成。 2. 配置 Goland 环境 学习编程语言,使用一个称心的 IDE,可以帮你省去很多麻烦。 开发 Python 项目,我习惯使用 PyCharm,因为已经习惯了 JetBrains 风格的IDE,可以替我省去很多熟悉新IDE的成本,所以这里我照样使用 JetBr...阅读全文

博文 2020-03-15 10:34:24 王一白

Golang 学习笔记:函数

函数 在Go语言中,函数可以分为具名函数和匿名函数,包级函数一般是具名函数,具名函数是匿名函数的一种特例。函数也可以看成是封装好一系列语句的代码块,用以提高代码的模块度和复用率。 Go语言的函数属于“一等值,(first-class)”,满足以下特点: 函数本身可以被当成值传递 函数本身可以满足接口 支持匿名函数和闭包 函数调用 需求:定义两个函数,实现两数相加和两数相乘的功能,允许被main函数外部调用。 //定义一个小马函数实现两数相加功能 func Xiaoma(a int,b int)int{ sum := a + b fmt.Println("小马a+b:",sum) return sum //当有返回值语句时,谁调用就返回给谁 } //定义一个佳豪函数实现两数相乘功能 func ...阅读全文

博文 2020-06-03 13:32:43 sunlingbot

Golang学习之变量

学习过其他编程语言,如:Java、PHP,的人都知道,变量是程序的基本组成单位,我们编写程序代码不可能离开变量。下面对Golang中的变量做系统介绍。变量的概念变量相当于内存中一个数据存储空间的表示 ,指向一块内存地址用于存储数据,我们在程序中可以通过变量名对变量进行访问。变量的使用步骤(1)声明变量(2)给变量赋值(3)使用变量使用变量的细节:(1)指定变量类型,但不赋值,此时使用的是默认类型的0值 (2)指定变量类型之后并为变量赋值,此时变量的值为相应的字面量值 (3) 省略关键字 var ,利用 := 为变量赋值,此时变量的数据类型会根据字面量值自动推导,注意:此时声明的变量名不能在之前代码中出现过,否则会出现编译错误 正确写法 错误写法 (4)多变量声明,在代码中,我们也可以一次声明...阅读全文

博文 2019-03-26 13:34:41 又绿江南岸1990

《Go语言程序设计》 读书笔记 (八) 包

Go语言有超过100个的标准包(可以用go list std | wc -l命令查看标准包的具体数目),标准库为大多数的程序提供了必要的基础构件。在Go的社区,有很多成熟的包被设计、共享、重用和改进,目前互联网上已经发布了非常多的Go语言开源包,它们可以通过 http://godoc.org 检索。在本章,我们将演示如果使用已有的包和创建新的包。 包简介 任何包系统设计的目的都是为了简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的单元以便于理解和更新,在每个单元更新的同时保持和程序中其它单元的相对独立性。这种模块化的特性允许每个包可以被其它的不同项目共享和重用,在项目范围内、甚至全球范围统一地分发和复用。 每个包一般都定义了一个不同的命名空间用于它内部的每个标识符的访问。每个...阅读全文

博文 2020-01-13 13:32:41 Kevin

go 学习笔记之环境搭建

千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意的就是 $GOPATH 环境变量的设置问题. 不过,简单起见,目前采用默认配置,等到比较熟悉 Go 语言时候再自定义设置也不迟,因此采用喜闻乐见的傻瓜式安装方式吧! Go 下载安装 由于众所周知的原因,谷歌被墙,因此 Go 的国外官网无法访问,好在已提供 Go 的中国官网可以正常访问. 国外官网: https://golang.org/ 国内官网: https://golang.google.cn/ Go 语言中文网: https://studygolang.com/ 除了官网下载,也可以从第三...阅读全文

博文 2019-08-01 17:32:45 雪之梦技术驿站

10.Go语言基础之包

在工程化的GO语言开发项目中,GO语言的源码复用是建立在包(pakage)基础之上的。 不仅GO语言中有包的概念,别的语言中也是有包的概念的。 1.Go语言的包(package) 1.1包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt,os,io等。 1.2定义包 我们可以根据自己的需要创建自己的包。 一个包可以简单理解为一个存放.go文件的文件夹。该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明改文件归属的包。 package 包名 注意事项: 1.一个文件夹下面直接包含的文件只能归属一个package,同样一个package的文件不能再多个文件夹下。 2.包名可以不和文件夹的名字一样,包名不能包含-符号。 ...阅读全文

博文 2020-02-04 23:33:10 DevOperater

golang快速入门[2.3]-go语言开发环境配置-linux

golang快速入门[2.3]-go语言开发环境配置-linuxlinux安装Go语言开发包默认读者会使用linux的基本操作配置go语言的开发环境的第一步是要在go官网下载页面下载开发包linux需要下载tar.gz压缩文件这里我们下载的是 64 位的开发包,如果读者的电脑是 32 位系统或者有特殊的需求,则需要下载 32 位的开发包在上图所示页面中向下滚动即可找到 32 位开发包的下载地址,如下图所示注意,如果在ubuntu这样有图形化界面的linux操作系统,我们可以直接下载没有图形化界面时,我们需要在命令行中操作第一步:下载开发包>> wget https://dl.google.com/go/go1.13.7.linux-amd64.tar.gz --2020-02-06 14:1...阅读全文

博文 2020-02-07 19:33:11 jonson_jackson

老虞学GoLang笔记-常量

开发十年,就只剩下这套Java开发体系了 >>> 常量 常量和C#中的概念相同,在编译期被创建。因为在编译期必须确定其值,因此在声明常量时有一些限制。 其类型必须是:数值、字符串、布尔值 表达式必须是在编译期可计算的 声明常量的同时必须进行初始化,其值不可再次修改 Doc http://golang.org/doc/go_spec.html#Constants http://golang.org/doc/go_spec.html#Constant_expressions http://golang.org/doc/go_spec.html#Constant_declarations http://golang.org//doc/go_spec.html#Iota 语法 const关键字用于声...阅读全文

2019.01.27

内建变量类型 内置变量类型bool, string(u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptrbyte, runefloat32, float64, complex64, complex128(u)是unsigned代编有符号或无符号go与其他不同的类型1、uintptr go语言的指针类型2、rune 其实rune是char类型,而且是char32位3、complex 复数类型。Go语言类型转化func triangle() { var a ,b int = 3,4 var c int //go语言没有隐式强制类型转换,必须显示强制类型转换 c = int(math.Sqrt(float64(a*a+b*b))) fmt.Pr...阅读全文

博文 2019-01-27 18:34:42 Software泥瓦匠

Tank技术【3-6】GoLang语法实战学习(4)

九、结构体 Go语言的结构体和C语言是类似的。定义结构体如下: type books struct { sName string sAuthor string nID int64 fPrice float64 sOwner string } 使用结构体有两种办法: var myBook books myBook.sName ="Go语言实战" myBook.sAuther = "Tank" myBook.nID =139581 myBook.fPrice = 58.88 myBook.sOwner ="Tank" theBook :=books{"Go语言实战", "Tank", 139581, 58.88, "Dennis"} yourBook := books{sName:"Go语言实战...阅读全文

博文 2020-01-06 19:32:43 idontknowctt

2019-11-25

初探之 sync.Once # 描述 sync.Once 是 Golang package 中使方法只执行一次的对象实现,作用与** init **函数类似。但也有所不同。 init 函数是在文件包首次被加载的时候执行,且只执行一次 sync.Onc 是在代码运行中需要的时候执行,且只执行一次 当一个函数不希望程序在一开始的时候就被执行的时候,我们可以使用 sync.Once。 例如: package main import ( "fmt" "sync" ) func main() { var once sync.Once onceBody := func() { fmt.Println("Only once") } done := make(chan bool) for i := 0; i...阅读全文

leetcode_52

Golang: 思路:和51是一个问题 注意:这里需要注意下:因为不想使用list去存储所有出现的结果(会导致空间复杂度变高),所以我使用了一个全局变量totalRes来表示单次测试的结果,但因为平台运行测试用例的机制,是会使用一段代码一次性跑多个测试用例。所以,每次运行totalNQueens这个方法时,都需要将totalRes置零,否则会报错。 不通过示例如上图 var totalRes int func main() { fmt.Println(totalNQueens(1)) } func totalNQueens(n int) int { totalRes=0 //这里每次使用都需要置零,否则会不通过 chessboard:=make([]int,n) placeQueen(che...阅读全文

博文 2020-01-26 20:32:40 淳属虚构

Golang中defer、return、返回值之间执行顺序的坑

载自:https://studygolang.com/articles/4809 Go语言中延迟函数defer充当着 cry...catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱! 先来运行下面两段代码: A. 无名返回值的情况 package main import ( "fmt" ) func main() { fmt.Println("return:", a()) // 打印结果为 return: 0 } func a() int { var i int defer func() { i++ fmt.Println("defer2:", i) // 打印结...阅读全文

博文 2020-05-19 15:32:47 大菜狗RookieDog

golang的反射与实践(下)

上篇说了下反射该怎么用,现在我们来看一看使用反射的实际情况,深入理解一下 这篇因为是实践篇,所以有大量的代码示例来进行演示,因为只是演示反射的使用,所以对一些复杂的错误机制没做处理 反射本身并不难,看懂了上一章反射到底是干嘛用的,什么时候用,这一章其实非常好懂 说到底就是将reflect包提供给我们的方法,进行一些组合使用罢了,说土一点就是调用下API 没看上篇的可以先看看golang的反射与实践(上) 反射的实践操作 好了,咱们开始进行实践 先把我们的准备工作做好,先定义一个Struct,再给这个结构体加上一些方法 // Employee 员工 type Employee struct { Name string `json:"emp_name"` Age int `json:"emp_a...阅读全文

博文 2019-06-13 11:02:50 闹闹吃鱼

第五章 函数

函数就是一个单独的代码块,可以从其他的地方多次调用。在golang中函数可以作为一个类型声明某一变量。同时在golang中的函数时可以返回多个值的。声明和函数基本定义这里不做赘述 log包提供很多错误日志记录,不过一般log会输出错误之前输出时间信息,所以当不希望看到这些时间信息的时候可以使用log.SetPrefix()和log.SetFlags(0)来屏蔽时间前缀。直接当然log包的Fprintf函数也可以直接输出错误信息。 读取文件时,常常因为读取长度与文件结尾不能同步,导致各种错误,在go的io包中定义了io.EOF错误,标识文件结束。 匿名函数 拥有函数名的函数只能在包级语法块中被声明,通过函数字面量,可以绕开这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,...阅读全文

博文 2018-11-20 17:34:45 zhaoxi_yu

11. 数组和切片

11. 数组和切片 数组 数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型数组,可以包含任意类型) 数组的声明 一个数组的表示形式为 [n]T。n 表示数组中元素的数量,T 代表每个元素的类型。元素的数量 n 也是该类型的一部分(稍后我们将详细讨论这一点)。 可以使用不同的方式来声明数组,让我们一个一个的来看。 package main import ( "fmt" ) func main() { var a [3]int //int array with length 3 fmt.Println(a) } var a[3]int 声明了一个长...阅读全文

博文 2019-08-29 11:32:55 泷汰泱

Go笔记1--安装

下载 到这https://golang.org/doc/install下载你所需的安装文件,接下来以linux为例子说明该安装过程。 我这里选择了go1.10.2.linux-amd64.tar.gz这个安装包。 安装 将下载的安装包解压到 /usr/local,命令如下 tar -C /usr/local -xzf go1.10.2.linux-amd64.tar.gz 配置环境变量 go.png 解压后会出现一个go文件夹,go文件夹下有一bin文件夹,接下来把/usr/local/go/bin添加到PATH 环境变量中。 添加 export PATH=$PATH:/usr/local/go/bin 到 /etc/profile 或者 $HOME/.profile 文件中。 接着执行如下...阅读全文

博文 2020-04-03 20:33:00 穷人黄六

Go语言(十五) 反射

反射 变量介绍 变量的内在机制 类型信息,这部分是元信息,是预先定义好的 值类型,这部分是在程序运行过程中动态改变的 反射介绍 反射与空接口 空接口可以存储任何类型的变量 在程序运行时动态获取变量的类型信息和值信息,就叫反射 import ( "fmt" "reflect" ) func TestType(a interface{}) { //获取类型(静态信息) t := reflect.TypeOf(a) kind := t.Kind() switch kind { case reflect.Int: fmt.Printf("a is a int\n") a = 2 case reflect.String: fmt.Printf("a is a string\n") } fmt.Prin...阅读全文

博文 2020-04-23 16:33:23 wx5b285b48ed74e

《Go语言程序设计》读书笔记(六) 基于共享变量的并发

竞争条件 在一个线性(就是说只有一个goroutine的)的程序中,程序的执行顺序只由程序的逻辑来决定。在有两个或更多goroutine的程序中,每一个goroutine内的语句也是按照既定的顺序去执行的,但是一般情况下我们没法知道分别位于两个goroutine的事件x和y的执行顺序,x是在y之前?之后?还是同时发生?是没法判断的。当我们没有办法确认一个事件是在另一个事件的前面还是后面发生的话,就说明x和y这两个事件是并发的。 一个函数在线性程序中可以正确地工作。如果在并发的情况下,这个函数依然可以正确地工作的话,那么我们就说这个函数是并发安全的,并发安全的函数不需要额外的同步工作。我们可以把这个概念概括为一个特定类型的一些方法和操作函数,如果这个类型是并发安全的话,那么所有它的访问方法和操...阅读全文

博文 2020-01-04 12:32:41 Kevin

并发控制

1 c++中的锁和条件变量实现状态同步 #include #include #include #include #include #include using std::vector; using std::string; using std::queue; using std::mutex; using std::thread; class Message { public: void Put(const string& msg) { std::lock_guard guard(msgs_lock_); msgs_.push(msg); } bool Get(...阅读全文

博文 2020-06-06 18:32:46 小跑001

(转)Go blog (The Laws of Reflection)翻译

The Laws of Reflection (https://blog.golang.org/laws-of-reflection) 简介   Reflection(反射)在计算机中表示程序能够检查自身结构的能力,尤其是类型。它是元编程的一种形式,也是最容易让人迷惑的一部分。   本文中,我们将解释Go语言中反射的运行机制。每个编程语言的反射模型不大相同,很多语言索性就不支持反射(C、C++)。由于本文是介绍Go语言的,所以当我们谈到"反射"时,默认为是Go语言中的反射。 阅读建议   本文中,我们将解释Go语言中反射的运行机制。每个编程语言的反射模型不大相同,很多语言索性就不支持反射(C、C++)。   由于本文是介绍Go语言的,所以当我们谈到“反射”时,默认为是Go语言中的反射。   ...阅读全文

博文 2019-03-14 01:34:39 one_zheng