[TOC]
Go语言简介
2 - 基本要素
Printf参数备忘:
符号 |
解释 |
%d |
decimal integer |
%x,%o,%b |
integer in hexadecimal,octal,binary |
%f,%g,%e |
floating-point number: 3.141593,3.141592653589793,3.141593e+00 |
%t |
boolean: true or false |
%c |
rune (Unicode code point) |
%s |
string |
%q |
quoted string "abc" or rune 'c' |
%v |
any value in a natural format |
%T |
type of any value |
%% |
literal percent sign (no operand) |
命名
命名规则跟C相似。
Go 有25个关键字不能用作名字:
break |
default |
func |
interface |
select |
case |
defer |
go |
map |
struct |
chan |
else |
goto |
package |
switch |
const |
type |
if |
range |
fallthrough |
continue |
for |
import |
return |
var |
Go 还有37个预声明的名字用于内置常量、类型和函数(可覆盖):
Constants: true,false,iota,nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex64 complex128
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
名字第一个字符决定其可见性。大写字符表示对外公开。包名始终是小写字符。
名字长度没有限制,但倾向于较短的名字,命名使用驼峰风格。
变量声明可以按列表方式,如var b,f,s = true,2.3,"four"
支持tuple assignment ,如i,j = j,i // swap values of i and j
简化的声明形式必须要声明至少一个新变量var i,j int; i,j := 1,2 // compile error: no new variables
指针与C 类似,* 取值& 取地址,如*p++
++ec2.go++ (增加命令行参数)
package main
import ( // 导入多个包的常用形式
"fmt"
"flag"
"strings"
)
var n = flag.Bool("n","omit trailing newline")
var sep = flag.String("sep"," ","separator")
func main() {
flag.Parse()
fmt.Print(strings.Join(flag.Args(),*sep))
if !*n { fmt.Println() }
}
要点
new 和delete 与C++ 相似,但它们是函数
变量生命周期与C 或Java 等主流语言一致,new 分配的对象可能位于栈中
隐式赋值如medals := []string{"bronze","silver","gold"}
type 声明一个新的类型,不改变其值,支持其基础类型的操作
包机制类似Java ,包对应文件的路径
包也体现了命名空间namespace ,类似Python
首字符大写即是导出的实体(如变量、函数、类型等等)
跟着包声明的的注释作为包的文档描述,跟Python 有相似之处
引入没有用到的包会导致编译错误
func init() { /* ... */ } 是文件/包的初始化函数
作用域范围跟其它语言相似,但是由于Go 语法的原因有一些奇怪的用法
if f,err := os.Open(fname); err != nil { // compile error: unused: f
return err
}
f.ReadByte() // compile error: undefined f
var cwd string
func init() {
cwd,err := os.Getwd() // compile error: unused: cwd
if err != nil {
log.Fatalf("os.Getwd failed: %v",err)
}
} (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|