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

【Go语言踩坑系列(一)】基本数据类型

声明 本系列文章并不会停留在Go语言的语法层面,更关注语言特性、学习和使用中出现的问题以及引起的一些思考。 要点 本文只关注Go语言的基本类型:如整型、浮点型、常量相关的内容。字符串、数组和切片等高级类型会在下一篇文章中讲述。 包 初始化顺序:当前包级别变量 -> 导入外部包的init() -> 当前包内的init() -> main()。通常可将一个包导入但是不使用的方式,初始化某些配置数据。 下面这段代码会运行config包和model包下的init()方法: import ( "cmdb-bg/cmd" _ "cmdb-bg/config" _ "cmdb-bg/model" ) 零值 我们都知道,当我们仅仅声明一个变量、但未对其进行初始化的时候,Go会给每种变量类型赋一个零值: 整型...阅读全文

(建议收藏)原生JS灵魂之问, 请问你能接得住几个?(上)

笔者最近在对原生JS的知识做系统梳理,因为我觉得JS作为前端工程师的根本技术,学再多遍都不为过。打算来做一个系列,一共分三次发,以一系列的问题为驱动,当然也会有追问和扩展,内容系统且完整,对初中级选手会有很好的提升,高级选手也会得到复习和巩固。敬请大家关注! 第一篇: JS数据类型之问——概念篇 1.JS原始数据类型有哪些?引用数据类型有哪些? 在 JS 中,存在着 7 种原始值,分别是: boolean null undefined number string symbol bigint 引用数据类型: 对象Object(包含普通对象-Object,数组对象-Array,正则对象-RegExp,日期对象-Date,数学函数-Math,函数对象-Function) 2.说出下面运行的结果,解...阅读全文

博文 2019-10-31 12:32:45 aside section._1OhGeD

Golang须知

变量的包作用域 在Golang中,同个package中的非局部变量,可以认为是package作用域,可在package中(可能有多个文件)直接访问。 包变量导出 包内变量可以导出(即其他包可通过import调用)的标志,是变量的首字母是否大写。 首字母大写的包作用域变量,可以导出。 这是Golang中比较不方便的一点:如果要更改一个变量的可导出性,就需要更改其变量名。 值传递和地址传递 Golang中所有函数参数传递都是值传递。 无论是数字、字符串,还是slice、结构体,都会在传递值复制。 如果希望进行引用传递,则可以传递变量的地址。 示例: package main import "fmt" // 测试结构体的地址传递 type A struct { val int64 } func t...阅读全文

博文 2018-10-10 19:34:45 平仄_pingze

Golang——变量和常量

关键字(25个) break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 保留字(37个) append bool byte cap close complex complex64 complex128 uint16 copy false float32 float64 imag int int8 int16 uint32 int32 int64 iota len make new nil panic uint64 print println ...阅读全文

博文 2020-05-10 19:33:10 Cici冬雪

GO的第三天,包和作用域

今天的内容看起来简单,其实深入了解的话还是蛮难的!不过,我们也是GO的初学者的一个身份,我们先从简单的理解开始吧。 包 什么是包?Go语言中的包和其他语言的库或模块的概念类似,目的都是为了支持模块化、封装、单独编译和代码重用。 import "fmt" 上面的代码中,fmt 就是一个包,是通过关键词import导入的。那么,我们怎么制作自己的包呢?一个包的源代码保存在 一个或多个 以.go为文件后缀名的源文件中,通常一个包所在 目录路径 的后缀是包的导入路径。每个源文件都是以包的 声明语句 开始,用来指明 包的名字 。如果你写了一个自己的包,使用 相对路径 来引用,那么这个包一般放在GO的工作目录下的 src 文件夹下,才可以被引入使用。 每个包都对应一个独立的名字空间。例如,在image包...阅读全文

博文 2020-03-09 00:32:48 Mr_J

Golang 基础(三)

变量 声明变量的一般形式是使用关键字 var,例如: var indentifier type 例如: var a int var b bool var str string 或者 var ( a int b bool str string ) 当一个变量被声明后,系统自动对它进行赋值: int 为 0 float 为 0.0 bool 为 false string 为 空字符串 指针 为 nil 所有的内存在Go中都是经过初始化的,比如: 定义一个int类型的变量power,如果我们不给变量power指定值,Go会为变量power分配默认值0。 var power int // 定义power为0 var power int = 9000 // 赋值power为9000 对于变量的赋值而言...阅读全文

Go基础系列:常量和变量

常量(Constants)和iota 常量包含不会发生更改的数据。常量的数据类型只能是boolean、number(int/float/complex)或string。 定义方式: const NAME [TYPE] = VALUE TYPE基本可以省略,因为常量都是简单数据类型,编译器可以根据值推断出它的数据类型。 例如: const Pi = 3.14159 常量在编译期间被评估,因此定义的常量必须是在编译期间就能计算出来的结果。例如调用一些运行期间的函数来生成常量的值就是错误的,因为在编译期间无法调用这些运行期间的函数。常量的值定义好后,无法在运行期间更改,否则会报错。 const c = 3+2 // 正确 const d = getNumber() // 错误 常量的精度可以随意长...阅读全文

博文 2018-11-23 09:09:56 f-ck-need-u

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

Golang :=操作 和 =操作

= 操作符从局部作用域起一直找到函数第一级作用域 找到则覆写该 := 操作符只找局部作用域内存在与否该变量,存在即覆盖不存在即声明该变量再赋值 package main import "fmt" func sample() (int, int) { return 1, 2 } func main() { a := 3 { a = 6 // = 操作符从局部作用域起一直找到函数第一级作用域 找到则覆写该值 //var a int a, b := sample() // := 操作符只找局部作用域内存在与否该变量,存在即覆盖不存在即声明该变量再赋值 fmt.Println(a, b) a = 9 fmt.Println(a, b) } fmt.Println(a) } //输出 //1 2 //...阅读全文

博文 2020-01-09 01:32:43 _Henry_

GoLang - 变量作用域

作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函数定义中的变量称为形式参数 局部变量   在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。   以下实例中 main() 函数使用了局部变量 a, b, c: package main import "fmt" func main() { /* 声明局部变量 */ var a, b, c int /* 初始化参数 */ a = 10 b = 20 c = a + b fmt.Printf ("结果: a = %d, b = %d and c = %d\n", a, b, c)...阅读全文

博文 2019-07-22 20:32:40 凉丶心园

2017-12-04

Golang,Panic,Defer,Recover 在golang中,recover在defer里发挥作用。 一些C++的小Tips 在另外一个小哥的BLOG上看到大佬的一些建议: 引用保护最好带上路径,避免多模块的冲突。 .h尽量避免包含.h,因为会发生依赖传递。可能向并不需要某些.h的源文件中,传递不必要的依赖进去。 using namespace,一样不要放在头文件里。理由同2,会带来不必要的依赖传递。 内部成员有指针的类,拷贝构造函数设置为私有,让编译器去发现问题。 Golang的Vendor vendor目录最重要的作用在于:vendor目录允许不同的代码库拥有它自己的依赖包,并且不同于其他代码库的版本,这就很好的做到了工程的隔离...阅读全文

博文 2018-10-22 23:34:39 11bansakana

Go语言学习笔记03--流程控制循环语句与函数

1.三目运算符 特别注意!在go语言中不存在三目运算符这个东西! 不是不推荐使用,就是完全不存在! 2.循环结构 go语言中有且仅有一种循环结构,就是for循环结构。不存在while或者dowhile这样的循环结构。 for 表达式1;表达式2;表达式3{ 循环体 } 循环的结构与标识符含义几乎与传统c语言相同。 (1)表达式1:循环变量赋初值 (2)表达式2:循环能够继续的循环条件 (3)表达式3:循环变量向着循环结束的方向变化 eg: for num:=0; num<10; num++{ fmt.Println(num); } 注意:go语言中的变量作用域为块级作用域,而不是函数级作用域! 因此定义在for循环内部的变量,其作用域仅能够在for循环内部生效, 因此它们在for循环之外是不...阅读全文

博文 2018-11-30 17:02:11 FrankAdd

Go 语言闭包详解

文链接:Go 语言闭包详解 什么是闭包?闭包是由函数和与其相关的引用环境组合而成的实体。 下面就来通过几个例子来说明 Go 语言中的闭包以及由闭包引用产生的问题。 函数变量(函数值) 在说明闭包之前,先来了解一下什么是函数变量。 在 Go 语言中,函数被看作是第一类值,这意味着函数像变量一样,有类型、有值,其他普通变量能做的事它也可以。 func square(x int) { println(x * x) } 直接调用:square(1) 把函数当成变量一样赋值:s := square;接着可以调用这个函数变量:s(1)。注意:这里 square 后面没有圆括号,调用才有。 调用 nil 的函数变量会导致 panic。 函数变量的零值是 nil,这意味着它可以跟 nil 比较,但两个函数变...阅读全文

博文 2020-05-31 23:32:45 line

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

Rust 入门 (四)

所有权是 rust 语言独有的特性,它保证了在没有垃圾回收机制下的内存安全,所以理解 rust 的所有权是很有必要的。接下来,我们来讨论所有权和它的几个特性:借用、切片和内存结构。 什么是所有权 Rust 的核心特性是所有权。各种语言都有它们自己管理内存的方式,有些是使用垃圾回收机制,有些是手动管理内存,而 rust 使用的是所有权机制来管理内存。 所有权规则 所有权规则如下: rust 中的每个值都有一个自己的变量。 rust 值在同一时间只能绑定一个变量。 变量超出作用域,值会自动被销毁。 不懂没关系,跳过往后看。 变量作用域 rust 语言的变量作用域和其他语言是类似的,看例子: { // 变量 s 还没有被声明,s 在这里是无效的 let s = "hello"; // 变量 s 是...阅读全文

博文 2019-12-05 15:34:23 单鹏飞

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

说说 Go 中的变量(附粗制滥造面试题)

和其他语言没有区别,Go 中的数据也是两种表示方式,常量和变量,本文先说说变量吧。 为了增加文章的趣味性(多掉些头发),文末搜集了一些常见的面试题。部分是自己瞎编的,顺便为自己明年可能到来的面试做些准备。 什么是变量 变量是可以理解为使用一个名称绑定一个用来存放数据的内存块。 变量,首先是量,即为数据,而后是变,即表示内存块中的数据是可变的。与变量相对的是常量,常即恒常,表示数据不可变。常量的值是在编译期就确定了。 变量的定义 Go 中变量的定义有多种方式,先看一个变量完整的定义组成。如下: 变量名称 变量类型 变量值 var varName typeName [= Value] var 是 Go 提供的用于定义变量的关键词,变量的定义语句可出现在函数和包级别中。 语句中核心是三个部分,分别...阅读全文

博文 2019-12-06 11:32:38 波罗学