结构体与方法
func createNode(value int) *TreeNode {
}
func (node TreeNode) print()
...
package main
import "fmt"
type TreeNode struct {
value int
Left,Right *TreeNode
}
func createNode(value int) *TreeNode {
return &TreeNode{value: value}
}
func (node TreeNode) print() {
fmt.Print(node.value)
}
func (node *TreeNode) setValue(value int) {
node.value = value
}
func print(node TreeNode) {
fmt.Print(node.value)
}
func main() {
var root TreeNode;
root = TreeNode{value: 0}
root.Left = &TreeNode{}
root.Right = &TreeNode{2,nil,nil}
root.Right.Right = new(TreeNode)
root.Left.Right = createNode(12)
root.print()
root.Right.Left.setValue(4)
root.Right.Left.print()
fmt.Println("")
}
接口
package main
import "fmt"
type student interface {
StudentName() string
Gender() int
}
type StudentImp struct {
name string
gender int
}
func (s StudentImp) StudentName() string{
return s.name
}
func (s StudentImp) Gender() int{
return s.gender
}
func main() {
imp := StudentImp{}
imp.name = "nian"
imp.gender = 1
var myStudent student
myStudent = imp
fmt.Println(myStudent.Gender())
}
问题集锦
new与make
- new只分配内存,make只用于slice,map,和channel的初始化
- new(T) 返回的是 T 的指针
- 慎重使用new, 建议使用make来初始化map
包
- 为同一个结构定义的方法必须在一个包内完成
- 每个目录一个包
- main为特殊包
- import时的包名由 go.mod中定义的前缀+package 名
- 扩展已有类型