Go语言学习笔记(1)
包
package 声明包,import 导入包,导入的包名要用"",包中导出的名字以大写字母打头。
package main
import "fmt"
import "math"
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi)
}
函数
函数使用 func 声明,采用类型后置语法,多个相同类型参数的声明可合并,可以返回多值(类似元组,成员可命名)。
func add(x int, y int) int {
return x + y
}
func add(x, y int) int {
return x + y
}
func swap(x, y string) (string, string) {
return y, x
}
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
变量和常量
变量使用 var 声明,采用类型后置语法,多个相同类型参数的声明可合并。
变量声明时可初始化,初始化的变量可省略类型,由编译器自行推导。
多个变量可同时初始化,类似其他语言的解构声明。
未显式初始化的变量用零值(0, false, "")初始化。
存在简写形式 :=,此时省略 var。
常量使用 const 声明。
var c, python, java bool
var i int
var i, j int = 1, 2
var c, python, java = true, false, "no!"
k := 3
c, python, java := true, false, "no!"
const Pi = 3.14
const World = "世界"
const Truth = true
基本类型
- bool
- string
- int int8 int16 int32 int64
- uint uint8 uint16 uint32 uint64 uintptr
- byte // uint8 的别名
- rune // int32 的别名,表示一个 Unicode 码点
- float32 float64
- complex64 complex128
// 类型转换
i := 42
f := float64(i)
u := uint(f)
语句
// 传统 for 循环
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
// for 循环三个部分都可以省略
sum := 1
for ; sum < 1000; {
sum += sum
}
// while 循环也用 for 来表达
sum := 1
for sum < 1000 {
sum += sum
}
// loop 循环也用 for 来表达
for {
}
// if 语句可以带初始化语句
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
// 这里开始就不能使用 v 了
// switch 语句可以带初始化语句
// switch 语句没有 break,case 无需为常量
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
fmt.Printf("%s.", os)
}
// 没有条件的 switch 语句相当于多路分支
switch {
case t.Hour() < 12:
fmt.Println("Good morning!")
case t.Hour() < 17:
fmt.Println("Good afternoon.")
default:
fmt.Println("Good evening.")
}
// defer 语句会将函数推迟到外层函数返回之后执行。
func main() {
fmt.Println("counting")
for i := 0; i < 10; i++ {
defer fmt.Println(i)
}
fmt.Println("done")
}
// counting
// done
// 9
// 8
// 7
// ...
// 2
// 1
指针
i, j := 42, 2701
// var p *int = &i
p := &i // point to i
*p = 21 // set i through the pointer
p = &j // point to j
*p = *p / 37 // divide j through the pointer
结构体
type Vertex struct {
X int
Y int
}
v := Vertex{1, 2}
v.X = 4
p := &v
p.X = 1e9
var (
v1 = Vertex{1, 2} // has type Vertex
v2 = Vertex{X: 1} // Y:0 is implicit
v3 = Vertex{} // X:0 and Y:0
p = &Vertex{1, 2} // has type *Vertex
)
Go语言学习笔记(1)的更多相关文章
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
- GO语言学习笔记(一)
GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- Go语言学习笔记十一: 切片(slice)
Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
随机推荐
- [UE4]使用name slot制作带背景的容器
name slot相当于asp.net模板中的content模板. 可以往“Name Slot”里面拖放控件,如果没有“Name Slot”就不能给“BgPanel”拖放任何控件
- 让android程序根据重力感应旋转屏幕(支持4个方向旋转)
原文地址:http://blog.csdn.net/yixiaoqingyuz/article/details/6453798代码如下: ChangeOrientationHandler.java p ...
- json及JavaBean转json
先来看看JSON: 什么是JSON: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON是用字符串来表示Javascript对象,例如可以在Ser ...
- CS229 6.6 Neurons Networks PCA主成分分析
主成分分析(PCA)是一种经典的降维算法,基于基变换,数据原来位于标准坐标基下,将其投影到前k个最大特征值对应的特征向量所组成的基上,使得数据在新基各个维度有最大的方差,且在新基的各个维度上数据是不相 ...
- Postgresql ERROR: permission denied for relation app_info
启用终端,: 进入mydb数据库:\c mydb 然后给当前数据库的角色赋予权限:GRANT ALL PRIVILEGES ON TABLE 表名 TO 角色名;
- python学习之----lxml库和HTML parser
lxml 这个库(http://lxml.de/)可以用来解析HTML 和XML 文档,以非常底层的实现而闻名 于世,大部分源代码是用C 语言写的.虽然学习它需要花一些时间(其实学习曲线越 陡峭,表明 ...
- uva-10085-搜索-最远状态的八数码
直接bfs即可,取最后一个状态 #include <iostream> #include <stdio.h> #include <string> #include ...
- urllib2.Request 添加浏览器简单反爬 结合BeautifulSoup解析标签
- spark historyserver 页面反应很慢 jvm堆调参
我们的spark historyserver 最近页面打开很慢 jstat -gcutil pid 1000 发现full gc 相当严重 查看堆大小,发现默认堆1G,打算修改到4G jps -lvm ...
- Android自定义View学习(三)
属性动画(上) 参考:HenCoder 自定义绘制的第 1-6 期:属性动画 Property Animation(上手篇) Interpolator 其实就是速度设置器,设置动画运行的速度. 属性动 ...