
Subscribe to myz

Subscribe to myz
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
https://github.com/songleo/the-little-go-book_ZH_CN
package
变量,指针,函数,流程控制
数组,切片,映射
struct,方法,接口
并发
package main
import (
"fmt"
"math"
)
func main(){
...
}
每个 Go 程序都是由包构成的。程序从 main 包开始运行。因此必须在源文件中非注释的第一行指明这个文件属于哪个包。
import 导入其他包
导出名首字母大写
https://learnku.com/go/t/32464
var 声明变量, const 声明常量
var i int
const Pi = 3.14
如果初始值已存在,可以省略类型。
在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
没有明确初始值的变量声明会被赋予它们的 零值
数值类型:0
bool: false
string: ””
基本类型:
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 的别名
rune // int32 的别名
// 表示一个 Unicode 码点
float32 float64
complex64 complex128
类型 *T 是指向 T 类型值的指针,其零值为 nil。
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
类型在变量名之后。
参数:0个 - 多个。
返回值:0个-多个,可被命名,会被视作定义在函数顶部的变量
函数值/函数类型
函数也是值,可以像其它值一样传递,也可以用作函数的参数或返回值。
函数是一种类型
闭包
… …
for
for i := 0; i < 10; i++
for sum < 1000 //相当于while
if
同 `for` 一样, `if` 语句可以在条件表达式前执行一个简单的语句, 其中声明的变量可以在对应的 `else` 块中使用。
switch
没提到的case自动 break
无条件的switch可代替if
defer
会将函数推迟到外层函数返回之后执行 (但其参数会立即求值)。栈,外层函数返回时后进先出。
type Vertex struct {
X, Y int
}
func main() {
v := Vertex{X: 1} //Y: 0 隐式赋予
p := &v
v.X = 4
p.Y = 1e9 //指向结构体的指针p,可以隐式间接引用
fmt.Println(v)
}
声明:字段后要带,
初始化:Name:赋值 未提到的自动赋予零值。
new(x) = &x{ }
方法就是一类带特殊的 接收者 参数的函数。Go 没有类,不过可以为结构体类型定义方法。
只能为同一包里新定义的类型和其指针声明方法。指针接收者的方法可以修改接收者指向的值。
func (v Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
函数与方法的区别:以指针为接收者的方法被调用时,接收者既能为值又能为指针。
keyword:interface
接口是定义了合约但并没有实现的类型。接口有助于将代码与特定的实现进行分离。
type Logger interface {
Log(message string)
}
var a [6]int{2, 3, 5, 7, 11, 13}
… …
https://github.com/songleo/the-little-go-book_ZH_CN
package
变量,指针,函数,流程控制
数组,切片,映射
struct,方法,接口
并发
package main
import (
"fmt"
"math"
)
func main(){
...
}
每个 Go 程序都是由包构成的。程序从 main 包开始运行。因此必须在源文件中非注释的第一行指明这个文件属于哪个包。
import 导入其他包
导出名首字母大写
https://learnku.com/go/t/32464
var 声明变量, const 声明常量
var i int
const Pi = 3.14
如果初始值已存在,可以省略类型。
在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
没有明确初始值的变量声明会被赋予它们的 零值
数值类型:0
bool: false
string: ””
基本类型:
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 的别名
rune // int32 的别名
// 表示一个 Unicode 码点
float32 float64
complex64 complex128
类型 *T 是指向 T 类型值的指针,其零值为 nil。
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
类型在变量名之后。
参数:0个 - 多个。
返回值:0个-多个,可被命名,会被视作定义在函数顶部的变量
函数值/函数类型
函数也是值,可以像其它值一样传递,也可以用作函数的参数或返回值。
函数是一种类型
闭包
… …
for
for i := 0; i < 10; i++
for sum < 1000 //相当于while
if
同 `for` 一样, `if` 语句可以在条件表达式前执行一个简单的语句, 其中声明的变量可以在对应的 `else` 块中使用。
switch
没提到的case自动 break
无条件的switch可代替if
defer
会将函数推迟到外层函数返回之后执行 (但其参数会立即求值)。栈,外层函数返回时后进先出。
type Vertex struct {
X, Y int
}
func main() {
v := Vertex{X: 1} //Y: 0 隐式赋予
p := &v
v.X = 4
p.Y = 1e9 //指向结构体的指针p,可以隐式间接引用
fmt.Println(v)
}
声明:字段后要带,
初始化:Name:赋值 未提到的自动赋予零值。
new(x) = &x{ }
方法就是一类带特殊的 接收者 参数的函数。Go 没有类,不过可以为结构体类型定义方法。
只能为同一包里新定义的类型和其指针声明方法。指针接收者的方法可以修改接收者指向的值。
func (v Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
函数与方法的区别:以指针为接收者的方法被调用时,接收者既能为值又能为指针。
keyword:interface
接口是定义了合约但并没有实现的类型。接口有助于将代码与特定的实现进行分离。
type Logger interface {
Log(message string)
}
var a [6]int{2, 3, 5, 7, 11, 13}
… …
No activity yet