内容简介:欢迎访问我的go 语言学习笔记第一弹,来自好记性不如烂笔头,也要多锻炼自己的写作能力。
go 语言学习笔记第一弹,来自 gotour ,以后要常写笔记,把自己学习笔记记录下来,就算只是笔记也要多写。
好记性不如烂笔头,也要多锻炼自己的写作能力。
说实话,今天很累了,最近在折腾操作系统内核,因为原先写了个bootloader,现在想要转向 grub 来,遇到坑太多了,已经两天了:sob:。
还是接触一点新知识简单的东西,来缓冲一下,脑子迷迷糊糊的。
package
每个 Go 程序由很多包组成。
程序都是从 main 包开始运行。
该程序正在使用导入路径为“ fmt”和“ math / rand”的软件包。
按照约定,程序包名称与导入路径的最后一个元素相同。
例如,“ math / rand”包包括以语句包rand开头的文件。
import
此代码将导入分组为带括号的“分解的”导入语句。
您还可以编写多个导入语句,例如:
package main import ( "fmt" "math" ) func main() { fmt.Println(math.Pi) }
但是使用分解式import语句是一种很好的样式。
导出名称
在Go中,如果名称以大写字母开头,则导出该名称。
例如,Pizza是一个导出的名称,Pi也是,它是从math包导出的。
pizza和pi不以大写字母开头,所以它们不被导出。
在导入包时,您只能引用它导出的名称。任何“未导出”的名称都不能从包外部访问。
package main import ( "fmt" "math" ) func main() { fmt.Println(math.Pi) }
函数
一个函数可以接受零个或多个参数。
在此示例中,add接受两个类型为int的参数。
请注意,类型位于变量名称之后。
package main import "fmt" func add(x int, y int) int { return x + y } func mins(x int, y int) int { return x - y; } func main() { fmt.Println(add(42, 13)) fmt.Println(mins(23, 11)) }
当两个或多个连续的命名函数参数共享一个类型时,可以从除最后一个之外的所有其他参数中省略该类型。
在这个例子中,我们缩短了
x int,y int
至
x,y int
package main import "fmt" func add(x, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) }
多个返回值
一个函数能返回多个返回值。
package main import "fmt" func swap(a, b string) (string, string) { return b, a } func main() { a, b := swap("ai", "ni") fmt.Println(a, b) }
Named return values
Go的返回值可能会被命名。
如果是,则将它们视为定义在函数顶部的变量。
应该使用这些名称来记录返回值的含义。
没有参数的return语句返回指定的返回值。
这就是所谓的“naked” return。
裸返回语句应该只在短函数中使用,如下面的示例所示。
在较长的函数中,它们可能会损害可读性。
package main import "fmt" func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } func main() { fmt.Println(split(17)) }
变量
var语句声明了一个变量列表;在函数参数列表中,类型是最后一个。
var语句可以是包级的,也可以是函数级的。在这个例子中我们可以看到两者。
package main import "fmt" var c, python, java bool func main() { var i int fmt.Println(i, c, python, java) }
初始化数值
var声明可以包含初始化器,每个变量一个。
如果有初始化,类型可以省略;该变量将采用初始化器的类型。
package main import "fmt" var i, j int = 1, 2 func main() { var c, python, java = true, false, "no!" fmt.Println(i, j, c, python, java) }
短变量初始化
在函数内部,可以使用:= short赋值语句来代替具有隐式类型的var声明。
在函数之外,每个语句都以一个关键字(var、func等)开头,因此:=结构不可用
package main import "fmt" func main() { var i, j int = 1, 2 k := 3 c, python, java := true, false, "no!" fmt.Println(a ,i, j, k, c, python, java) }
基本数据类型
go 语言的基本数据类型
bool string int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr byte // alias for uint8 rune // alias for int32 // represents a Unicode code point float32 float64 complex64 complex128
该示例显示了几种类型的变量,并且与import语句一样,变量声明也可以“分解”为块。
int,uint和uintptr类型通常在32位系统上为32位宽,在64位系统上为64位宽。
当您需要整数值时,应该使用int,除非有特殊原因要使用大小或无符号整数类型。
package main import ( "fmt" "math/cmplx" ) var ( ToBe bool = false MaxInt uint64 = 1<<64 - 1 z complex128 = cmplx.Sqrt(-5 + 12i) ) func main() { fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe) fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt) fmt.Printf("Type: %T Value: %v\n", z, z) }
零值
声明时没有明确的初始值的变量将被赋予零值。
零值为:
数字类型为0,
对于布尔类型为false
“”(空字符串)表示字符串。
package main import "fmt" func main() { var i int var f float64 var b bool var s string fmt.Printf("%v %v %v %q\n", i, f, b, s) }
类型转换
使用 T(v) 将 v 值转换为 T 类型
一些例子:
package main import "fmt" func main() { v := 12.2 // change me! fmt.Printf("v is of type %T\n", v) }
与 C语言 不同,在Go语言中,不同类型的项目之间的分配需要显式转换。
类型推断
在声明变量而不指定显式类型时(使用:=语法或var =表达式语法),将从右侧的值推断出变量的类型。
键入声明的右侧时,新变量具有相同的类型:
var i int j:= i // j是一个整数
但是,当右侧包含无类型的数字常量时,新变量可能是int,float64或complex128,具体取决于常量的精度:
i:= 42 //整数 f:= 3.142 // float64 g:= 0.867 + 0.5i //complex128
package main import "fmt" func main() { v := 12.2 // change me! fmt.Printf("v is of type %T\n", v) }
常量
常量像变量一样声明,但是使用const关键字。
常量可以是字符,字符串,布尔值或数字值。
不能使用:=语法声明常量。
package main import "fmt" const Pi = 3.14 func main() { const World = "世界" fmt.Println("Hello", World) fmt.Println("Happy", Pi, "Day") const Truth = true fmt.Println("Go rules?", Truth) }
数字常量
数字常数是高精度值。
未说明类型的常量采用其上下文所需的类型。
(一个int最多可以存储一个64位整数,有时更少。)
package main import "fmt" const ( // 1 左移 100 位 Big = 1 << 100 // 右移 99 位 Small = Big >> 99 ) func needInt(x int) int { return x*10 + 1 } func needFloat(x float64) float64 { return x * 0.1 } func main() { fmt.Println(needInt(Small)) fmt.Println(needFloat(Small)) fmt.Println(needFloat(Big)) }
以上所述就是小编给大家介绍的《golang学习笔记(一):包,变量,函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Golang 函数变量
- 【项目实用】Css 变量及函数
- 015.Python函数名的使用以及函数变量的操作
- Shell编程—【04】函数的定义、参数、变量作用域、函数库
- JS变量声明和函数声明提升
- 如何使用 Linux 内核中没有被导出的变量或函数?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
区块链:定义未来金融与经济新格局
张健 / 机械工业出版社 / 2016-6-18 / 49.00
从构建价值互联网的角度看,区块链的出现意味着从0到1。正因如此,本书章节结构与常见的体例不同,从第0章开始。第0章从文字与货币的起源出发,通过论述人类信息传递和价值传输手段的进步,说明区块链技术诞生的必然性。第1章用深入浅出的语言讲解区块链的本质、运行原理、颠覆性潜力以及区块链技术的现状与未来;第2章宏观讲述了区块链技术带来的新产品和新机遇,包括数字货币、互联网金融、物联网,以及新一代的基础设施;......一起来看看 《区块链:定义未来金融与经济新格局》 这本书的介绍吧!