分享
  1. 首页
  2. 文章

minikube代码分析与Go语言 - 2

openqt · · 1019 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

[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", false, "omit trailing newline")
var sep = flag.String("sep", " ", "separator")
func main() {
 flag.Parse()
 fmt.Print(strings.Join(flag.Args(), *sep))
 if !*n { fmt.Println() }
}

要点

  • newdeleteC++相似,但它们是函数

  • 变量生命周期与CJava等主流语言一致,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)
 }
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:openqt

查看原文:minikube代码分析与Go语言 - 2

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1019 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏