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 ]Is Locally Controlled的局限性
一.在有机器人的游戏中,就不能使用IsLocallyControlled判断.而是要使用这个方法: 二.因为机器人也是属于本地控制的角色.所以不能使用IsLocallyControlled判断是否是本 ...
- 跨域验证cookie与缓存控制
1. 是否能跨域完全取决于浏览器控制,浏览器可以直接拒绝发送跨域请求(服务器根本收不到),也可以发送给服务器等接收到返回信息后决定是否让它被读取. 2. 服务器并不能辨别请求是从哪个源发过来的,只有在 ...
- MySQL 分区间进行数据展示 实例
如何进行分区间数据统计示例 业务场景:统计消费总金额大于1000元的,800到1000元的,500到800元的,以及500元以下的人数. SELECT COUNT(CASE WHEN IFNULL(t ...
- SSH2 No Session found for current thread原因
Hibernate4 与 spring3 集成之后, 如果在取得session 的地方使用了getCurrentSession, 可能会报一个错:“No Session found for curre ...
- sql server与C#中的字符串相等等效写法
sql server两个字段相等判断默认不区分大小写,并且字符串进行Unicode规范化处理. 等效c#中的相等为s=="字符".ToLower().Normalize(Syste ...
- python爬虫之登录
#-*-coding:utf--*- import cookielib, urllib, urllib2 import json import threading,time class Order(o ...
- windows下git的使用
1.安装git 下载地址:https://git-scm.com/download/win
- angularjs路由相关知识
angular.module('app').config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRout ...
- .NET MVC同页面显示从不同数据库(mssql、mysql)的数据
控制器: private readonly VipViewModel _model = new VipViewModel(); public static string Msg;// GET: Sys ...
- Jscraft 使用 Shell 与预先加载别名混合使用
Session session = a.getSessionShell("user", "pwd", "host"); Channel ch ...