文档章节

Go 学习笔记 1

F
 FaintX
发布于 2013/04/20 22:26
字数 1129
阅读 29
收藏 0

1 基础结构和原子数据类型

1.1 文件名-关键字-标识符

Go源代码存放在.go文件当中。
-文件名小写。
-文件名词之间用"_"分割
-文件名不能包含空格和其他特殊字符

标识符
-大小写敏感
-以字符开头,字符包含UTF-8的所有字符和"_"
-开头其后,可以跟0或者多个字符或者数字

_(下划线)空标识符
-对其赋值表丢弃
-这是因为Go的 多返回值特性 和 未使用变量即非法 这两个特性导致的

有时,有些变量、类型和函数可能没有名称,这叫匿名

关键字

default break func interface select
case defer struct go map
chan else goto switch if
return package fallthrough for import
var const range type continue

-关键字不能作为标识符


36个预声明标识符

int int8 int16 int32 int64 float32
uint uint8 uint16 uint32 uint64 float64
append cap len new make real
print println close copy imag complex
string uintptr iota panic recover complex64
byte bool true false nil complex128


被使用的符号

- () [] {}
- . , ; : ...


无需";"结尾(会自动添加)

1.2 基础结构和组件

package main

import "fmt"

func main(){
  fmt.Println("hello,wordl")
}


1.2.1 包,导入与可见性


package是Go的代码组织形式
-每个Go文件必须有且只有一个package
-package必须在第一行
-执行文件必须为package main


标准库
-Go安装自动包含一堆可以被使用的包,称为标准库
-pkg下
-构建一个程序,需要按正确的顺序编译
-包依赖决定了构建的顺序
-如果一个包改变了,那么使用到这个包的客户端程序也需要重编译
-通过仅编译相馆内容的中间文件.o加速构建过程,如
a.go < b.go < c.go
b.go read c.go -> b.o
a.go read b.o ->a
-所有代码仅编译一次
-导入包
import “package_name”
也写作
import (
"package_name"
"other_package"
)
也写作
import ("package_name";"other_package")
- . 或 / 开头,则搜索当前目录
- 不以 . 或 / 开头,则找go的目录树


可见性规则
-如果一个标识符以大写为开头,那么则包外可见
-小写为开头,则包外不可见
-大写字符是包含Unicode范围的,中文字也视为大写
-所以包可以被当做namespace来使用的
-包别名,如:
import fm "fmt"
-包被导入,但并为使用,视为错误


1.2.2 函数


声明: func functionName()
参数: func functionName(para1 type,para2 type) 逗号分割
-起始的main函数是必须的。并且不能有参数和返回值
-当main函数执行完毕时,程序马上退出,所以如有并行函数,必须for{}保证main在运行
-main {},{必须和main在同一行,否则报错,}可以在同一行
-完整的函数通用样式如下:
func functionName (parameter_list) (return_value_list) {
//some code
//return
}
parameter_list: (param1 type1,param2 type2,...)
return_value_list: (ret1 type1,ret2 type2,...)
-函数遇}或者return则停止,但程序会继续执行
-程序正常退出时,code 0;非正常退出,code 1

1.2.3 注释

//单行注释

/**/块注释

godoc会自动文档化。所以包和其每个顶级类型与导出函数,都应该在其上加上注释,以便自动文档化
godoc注释应该以该段的名称开头:
//Package testname ...
package testname


//function_name ...
func function_name(){}


1.2.4 类型

通过var声明的变量将自动初始化0值
类型可以是:
元素型: int float bool string
结构型: struct array slice map channel
接口型: type (interface)
结构型未赋值前为nil
没有类型继承


函数可以返回多值:
func Atoi(s string) (i int, err errror) { return var1,var2 }


type关键字可以定义自己的类型,或者别名:
type IZ int
批量定义:
type (
IZ int
FZ float
STR string
)
Go是静态类型语言


1.2.5 Go的通用结构


例子:

package main


import (
  "fmt"
)


const c="c"
var v int=5
type T struct{}


func init() {
  // initialization
}


func main() {
  var a int
  Func1()
  //..
  fmt.Println(a)
}


func (t T) Method1() {
  //do something
}


func Func1() {
  //do something
}



结构次序:
包声明
包导入
全局变量声明
初始化函数
main函数
其他函数


执行次序:
导入所有包
递归导入包中的包,但:每个包只导入一次
每个包中(按相反次序)的所有常量和变量被求值,然后执行init(如有)
最后,package main的main()被执行


1.2.6 转化

Go绝对不会隐式转化值类型,必须显示转化
valueOfTypeB = typeB(valueOfTypeA)


变量有相同定义类型的,能够互相转化:

var a IZ=5
c := int(a)
d := IZ(c)




1.2.7 命名


干净、可读与简单是Go的主要目标

© 著作权归作者所有

F
粉丝 2
博文 10
码字总数 5378
作品 0
厦门
私信 提问
Posix多线程编程学习笔记

Posix多线程编程学习笔记(一)—线程基础(1) http://blog.chinaunix.net/u/22935/showart_310711.html Posix多线程编程学习笔记(一)—线程基础(2) http://blog.chinaunix.net/u/2293...

晨曦之光
2012/04/13
238
0
《HTML5学习笔记简明版》系列技术文章整理收藏

《HTML5学习笔记简明版》系列技术文章整理收藏 HTML5学习笔记简明版来自博客园的汤姆大叔,在HTML5学习笔记简明版汤姆大叔对HTML5有更详细的讲解,收藏在这里供学习参考 1HTML5学习笔记简明版...

开元中国2015
2015/06/22
11
0
读《PHP和MySQL Web开发》

【第一部分】PHP基础与入门 1、PHP学习笔记1:基础知识快速浏览 http://my.oschina.net/bluefly/blog/472673 2、PHP学习笔记2:文件 http://my.oschina.net/bluefly/blog/477601 3、PHP学习笔...

slyso
2015/07/14
467
0
ActiveMQ 学习笔记系列

ActiveMQ学习笔记(1)——JMS的概念 ActiveMQ学习笔记(2)——JMS消息模型 ActiveMQ学习笔记(3)——ActiveMQ的安装 ActiveMQ学习笔记(4)——通过ActiveMQ收发消息 ActiveMQ学习笔记(5)——使用...

foxeye
2016/03/07
332
0
AngularJS学习笔记 目录

自我学习弹性很大,我不是一个非常自律的人。但是就AngularJS来言,真的是一个超级赞的框架。真的! 第一遍学习感觉到了AngularJS的魅力,有很多不足。希望再接再厉!把我目前学到的东西分享...

Asktao
2016/07/30
179
0

没有更多内容

加载失败,请刷新页面

加载更多

解答二进制求和

思路:创建一个新的字符串,用于记录原两个字符串每位相加的结果。 1、因为是从左到右计算,所以要把字符串先进行反转,用reverse()方法。 2、字符串对齐,采用补零的方法。 3、计算的时候...

无名氏的程序员
12分钟前
2
0
JSONUtils

package com.demo.utils;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Tr......

任梁荣
12分钟前
4
1
在jest中配置typescript

测试是报错: Property 'assign' does not exist on type 'ObjectConstructor' NodeJS已经是最新版了,但道理不需要polyfill。 然后发现是typescript的lib没有"es2015.core",说明ts-jest没有......

linsk1998
13分钟前
2
0
Redis实现分布式文件夹锁

缘起 最近做一个项目,类似某度云盘,另外附加定制功能,本人负责云盘相关功能实现,这个项目跟云盘不同的是,以项目为分配权限的单位,同一个项目及子目录所有有权限的用户可以同时操作所有...

逸竹小站
22分钟前
2
0
Andorid SQLite数据库开发基础教程(2)

Andorid SQLite数据库开发基础教程(2) 数据库生成方式 数据库的生成有两种方式,一种是使用数据库管理工具生成的数据库,我们将此类数据库称为预设数据库,另一种是使用代码生成的数据库。...

大学霸
42分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部