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)的更多相关文章

  1. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  2. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  3. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

  4. GO语言学习笔记(一)

    GO语言学习笔记 1.数组切片slice:可动态增长的数组 2.错误处理流程关键字:defer panic recover 3.变量的初始化:以下效果一样 `var a int = 10` `var ...

  5. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  6. Go语言学习笔记十三: Map集合

    Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...

  7. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  8. Go语言学习笔记十一: 切片(slice)

    Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

  9. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  10. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

随机推荐

  1. 高可用hadoop的hdfs启动的时候namenode启动不了

    启动的时候,一直要求输入namenode密码: 查看namenode的日志如下: 2019-03-28 18:38:08,961 INFO org.apache.hadoop.ipc.Client: ...

  2. PLSQL导出对象的表结构和表数据

    https://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html

  3. 使用docker搭建redis主从模式

    前期准备: 本地Linux版本:CentOS Linux release 7.5.1804 (Core)Docker版本:Docker version 1.13.1, build dded712/1. ...

  4. 使用LVS实现负载均衡原理及安装配置详解(转)

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...

  5. windows下mysql5.7 root密码重置

    1.在mysql根目录下新建配置文件my.ini(因为我安装的mysql-5.7.24安装完成后未看到该配置文件,所以新建一个,有的直接修改即可) [mysqld] skip-grant-tables ...

  6. Java方法通过RestTemplate调用restful接口

    背景:项目A需要在代码内部调用项目B的一个restful接口,该接口是POST方式,header中 Authorization为自定义内容,主要传输的内容封装在body中,所以使用到了RestTemp ...

  7. 乌龟svn不能拉取代码的原因

    因为一个账号只能在一个客户端登陆,用同一个账号的话,必然有一个会拉取失败,提示unable connect to url 解决方法: 清楚一下即可

  8. 使用Inent 携带 Bundle 携带 数组 传递给另外一个activity

    在activity发送数组: public static String [] PhoneAndTime = new String[2]; //new 新的Intent Intent data = ne ...

  9. 面向对象epoll并发

    面向对象epoll # -*- coding: utf-8 -*- import socket import selectors import re import sys HTML_ROOT = &q ...

  10. ace admin

    .svg             image/svg+xml.woff            application/x-font-woff.woff2          application/x- ...