go基本语法
go基本语法
变量基本类型
定义变量
数组
slice数组切片;引用类型,同一数组的slice指向同一数组; map无序;引用类型; structstruct的组合即为面向对象中的类 自定义类型
常量
语句
函数(面向过程的函数)定义函数第一行 以 函数返回值如果需要有返回值,则在参数列表后跟小括号,括号内写返回值类型 func get()(a int,b int){
a=1
b=2
return
// 同return 1,2
}
变长参数func get(arg ...int){
for n := range arg{
// process n
}
}
传值与传指针
函数作为类型与变量// 定义一种函数类型
type testInt func(int) bool
// 定义该项类型方法
func bigThanZero(v int) bool {
return v > 0
}
// 定义该项类型方法
func smallThanZero(v int) bool {
return v < 0
}
// 方法作为参数
func process(v int,f testInt) bool {
a := 0
return f(a)
}
func main() {
a := 0
// 方法作为变量
process(a,bigThanZero)
}
方法(面向对象的方法)带接收者的函数 // r为变量名,Receiver为接收者类型
func (r Reciever) f(){ }
方法的继承
重写继承的方法声明方法时,指定新的接受者即可 interface// 定义接口I
type I interface{
fun1()
fun2(arg string)
}
接口作为参数同Java 接口定义变量同Java comma-ok类似java中 func main() {
m := map[string]Thing{"key": O{"a"}}
// m["key"].(Thing)类似java中m.get("key") instanceof Thing
if value,ok := m["key"].(Thing); ok {
value.create()
}
}
type Thing interface {
create()
}
type O struct {
name string
}
func (o O) create() {
o.name = "1"
}
也支持switch-case func main() {
m := map[string]Thing{"key": O{"a"}}
// m["key"].(Thing)类似java中m.get("key") instanceof Thing
if value,ok := m["key"].(Thing); ok {
value.create()
}
switch m["key"].(type) {
case Thing:
// process
case O:
//process
}
}
type Thing interface {
create()
}
type O struct {
name string
}
func (o O) create() {
o.name = "1"
}
接口继承类似struct的继承,或者叫组合 type i interface{ anotherInterfacce }
代码分组import "fmt"
import "os"
const i=100
const pi=3.14
const pre = "go"
var i int
var pi float
var pre string
可改写为 import(
"fmt"
"os"
)
const(
i=100
pi=3.14
pre="go"
)
var(
i int
pi float
pre string
)
规则
defer
func f(){
file.Open("file");
defer file.Close();
// process
}
并发方法前加 go run()
主动让出CPU runtime.Gosched()
通信channel
selectselect之于channel,类似switch之于int runtime并发控制 Tipsif逻辑快内定义变量//在if逻辑块内,允许声明一个变量,作用域只在块内有效
if x:= get(); x>10{
}
make、newmake返回值,new返回指针 标签可用于 for-rangem:=map[string]int{"a":1}
for k,v:=range m{
// process k,v
}
for _,v:=range m{
// process v
}
switch自动break不用手写 合并caseswitch i{
case 1:
case 2,3:
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |